lyt0612

导航

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);
    }
}

###运行结果

 

 

posted on 2022-08-10 18:57  小仙女吖~  阅读(21)  评论(0编辑  收藏  举报