渚漪Day05——注解与反射

注解

注解 Annotation

1.作用

  • 不是程序本身,可以对程序作出解释(类似于注释)

  • 可以被其他程序(编译器)读取

2.格式

@Override//重写的注解
public String toString(){
    retrun super.toString();
}

还可以添加参数

3.在哪使用

可以附加在package,class,method,field,额外辅助信息

内置注解

  • @Override
  • Deprecated
  • SupressWarnings

元注解

  • 负责解释其他注解的注解
  1. @Target表示注解在哪个地方

  2. @Retention 表示在什么级别注释,SOURCE<CLASS<RUNTIME

  3. @Document表示是否将注解生成在JAVAdoc中

  4. Inheritd 子类可以继承父类的注解

自定义主注解

@interface 自定义注解,

格式:@interface 注解名{定义内容}

每一个方法实际上是声明了一个配置参数

方法名是参数名

返回值类型是参数的类型(Class,String,enum)

default声明猜数默认值

只有一个成员,参数名value()

注解元素必须要有值

反射

Refection,反射机制允许程序在执行期间借助Reflection API取得任何类的内部信息,并能直接操作任何对象的内部属性及方法。

Class类

对象.getClass()

Class.forname()

类名.Class

基本内置类型的包装类都有一个Type属性

对象.getSuperclass

内存分析

加载->链接->初始化

分析类的初始化

package lesson5;

public class test05 {
    static{
        System.out.println("Main被加载");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        //1.主动引用
        Son son = new Son();

        //2.反射也会产生主动引用
        Class.forName("lesson5.test05.Son");

        //不会产生引用的方法
        System.out.println(Son.b);

        Son[] sons = new Son[5];

        System.out.println(Son.M);
    }
}
class Father{
    static int b =2;
    static {
        System.out.println("父类被加载");
    }
}
class Son extends Father{
    static {
        System.out.println("子类被加载");
        m=300;
    }
    static int m = 100;
    static final int M = 1;
}

.getFields()//只能找到public 属性

.getDeclaredFields()//找到全部的属性

posted @ 2020-04-13 13:30  渚漪  阅读(155)  评论(0编辑  收藏  举报