2022-08-10 第二组刘禹彤 学习笔记
打卡29天
###学习内容
注解和反射
注解(Annotation)
Java标注,JDK5引入的一种机制
Java中类,方法,变量,参数,包都可以被标注
- 元注解:专门给注解加的注解
- 我们发现注解中是可以有方法的:1.定义方法的格式:返回值 名字();
2.可以有默认值,也可以没有,如果没有默认值,使用的时候必须 填写对应的值,如果需要有默认值,可以使用default指定默认值
3.如果想要在使用的时候不指定具体的名字,可以使用value,但 要有多个方法需要声明值时,要写清楚
不学习反射,注解没什么用
- 在java的整个注解体系中,有三个非常重要的主干类
1.Annotation:接口,定义一些常用的方法
2.ElementType:枚举,指定注解类型,即注解要用在哪里
3.RetentionPolicy:用来指定注解的策略,不同类型的策略指定注解的作用域不同
(1)SOURCE:注解仅存在于编译机制处理期间,编译期处理完成 之后,这个注解就没用了
(2)CLASS:注解在.class文件中依然有效
(3)RUNTIME:编译器是不起作用的,只有在运行期才由JVM读取
- java自带的注解:10个
4个注解在Java.lang.annotation包下
6个注解在Java.lang包下
作用在代码上的注解:
1.@Override:检查该方法是否是重写方法,如果返回其父类,或者引用的接口没有该方法,会报错
2.@Deprecated:标记的方法,过时的方法
3.@SuppressWarnings:编辑器去忽略警告
4.@SafeVarargs:JDK7支持忽略任何使用参数为泛型变量的方法或构造器产生的警告
5.@FunctionalInterface:JDK8开始支持,表示一个接口为函数式接口
6.@Repeatable:JDK8开始支持,标识某个注解可以在同一声明上使用多次
all:忽略所有警告
boxing:忽略拆箱装箱警告
rawtypes:使用生成时没有指定数据类型警告
unchecked:忽略没有进行类型检查操作的警告
unused:忽略没有使用的警告
元注解:
1.@Retention:标识这个注解作用域
2.@Documented:标识这个注解是否包含在用户文档中
3.@Target:这个注解可以修饰哪些信息
4.@Inherited:如果一个类用上@Inherited注解,那么其子类也会继承这个注解
反射
class类:
- 获取类对象1.直接使用类名.class
2.使用全类名
3.使用对象
- 对类对象操作1.获取类的名字(getname)
2.获取类的加载器(classLoader)
3.获取资源(resource)
4.获取父类(Superclass)
5.判断一个类是不是接口,数组(isIntereface/isArray)
6.重点,使用class类对象实力化一个对象(newInstance)
###学习心得
今天学习了注解和反射,还将java基础知识整理了一些,感觉学习效果不错,对以前的知识理解也更加清楚了
###掌握情况:一般
###课上练习
@Bean public class Dog { public String type; private String name; private String color; public Dog() { } private Dog(String name){ this.name = name; } public Dog(String name, String color) { this.name = name; this.color = color; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @MyAnnotation(value = 20,age=10) public void show(String str) { System.out.println("show方法..." + str); } public String info() { return "info方法"; } private void fun() { System.out.println("私有的fun方法..."); } }
import java.lang.reflect.Field; /** * 获取对象的属性 */ public class Ch04 { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Dog dog = new Dog(); dog.setType("金毛"); Dog dog1 = new Dog(); dog1.setType("泰迪"); Class<Dog> clazz = Dog.class; Field type = clazz.getDeclaredField("type"); // 想要获取哪一个对象的color String str = (String) type.get(dog1); System.out.println(str); } }
###运行结果