注解
注解 Annotation
1.作用
-
不是程序本身,可以对程序作出解释(类似于注释)
-
可以被其他程序(编译器)读取
2.格式
@Override//重写的注解
public String toString(){
retrun super.toString();
}
还可以添加参数
3.在哪使用
可以附加在package,class,method,field,额外辅助信息
内置注解
- @Override
- Deprecated
- SupressWarnings
元注解
- 负责解释其他注解的注解
-
@Target表示注解在哪个地方
-
@Retention 表示在什么级别注释,SOURCE<CLASS<RUNTIME
-
@Document表示是否将注解生成在JAVAdoc中
-
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()//找到全部的属性