JAVA核心知识进阶————反射和注解

注解(Annotation)

作用:1.可以对程序作出解释。
2.可以被其他程序读取(编译器)。

内置注解

@Override 适用于重写方法,重写注解。

@Deprecated 已过时的,不推荐使用(可以使用),有更好的表示方法,最新版本淘汰。
@SuppressWarnings 警告(方法或变量未使用),加上去则镇压警告。

元注解 (meta–annotation)

作用:负责注解其他注解,Java定义了4个元注解。

@Target @Retention @Documented @Inherited
1.@Target::描述注解的使用范围(被描述的注解可以用在什么地方)
2.@Retention: 表示在什么级别保存该注释信息。描述注解的生命周期(Source<Class<Runtime)
3.@Documented:说明这个注解在Javadoc中。
4.@Inherited:说明子类可以继承父类中的该注解。
自定义注解

1.(使用@interface自定义注解,自动继承java.lang.annotation)

注解的参数:参数类型+参数名(); 注解可以显示赋值,如果未给默认值,必须赋值。

反射(Reflection)

反射机制允许程序运行期间借助于反射API取得类的内部信息。,并直接操作。
加载完类之后,就会有一个class对象(一个类只有一个class对象),这个对象包含了类的完整信息。通过class对象查看类的结构,称之为:反射。

例如:

Class c = Class.forName(“java.lang.String”)

正常方式:引入包类名称实例化对象取得实例化对象正常方式:引入包类名称——new实例化对象——取得实例化对象**
优点:实现动态编译,有很大的灵活性。

缺点:对性能有影响。反射可以说是一种解释操作。这类操作慢于直接执行相同的操作。

在Object类中定义了 public final Class getClass()方法,这个方法被所有子类继承。且方法返回值类型是Class类。

1.class本身也是一个类

2.Class对象只能由系统创建。

3.一个加载的类在JVM中只会有一个Class实例

4.一个Class对象对应的一个实例的.class文件
在这里插入图片描述
class类的创建方式:

例如:Person类(属性 name),Student类继承Person类

1.通过对象获得

Class c1= person.getClass();

2.forname获得

Class c2 = Class.forName("com.myl.java.Student");

3.通过类名.class获得

Class c3 = Student.class;

4.基本内置类型的包装类都有一个TYPE

Class type = Integer.TYPE;

5.获得父类类型

Class c5 = c1.getSuperclass();

利用对象.hashCode判断是否为一个对象。
只要元素类型和维度一样 ,就是一个Class。

类的加载过程

类 的 加 载 — — 类 的 链 接 — — 类 的 初 始 化 类的加载——类的链接——类的初始化

类的加载:将类的class文件读入内存,创建一个java.lang.Class对象。

类的链接:将类的二进制数据合并到JRE中。

类的初始化:JVM负责对类初始化。

类加载器作用:把类加载进内存的。

通过反射获取运行时类的完整结构

Field、Method、Constructor、Superclass、interface、Annotation

实现的全部接口 、所继承的父类、全部的构造器、全部的方法、全部的Field、注解等

反射在实际代码中的应用

通过反射,动态的创建对象。
创建类的对象:调用Class对象的newInstance()方法调用无参构造器
(1)类必须有一个无参构造器
(2)类的构造器的访问权限需要足够

如果未有无参构造器,可通过指定的构造器创建对象,使用Class对象.getDeclaredConstructor(参数类型.class)方法创建对象,再调用Class对象的newInstance()方法进行赋值。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值