Java--反射、标注、类加载器

Class类:描述Java中的一切类事务。

Class实例代表内存中的一份字节码,所谓字节码就是当Java虚拟机加载某个类的对象时,首先需要把硬盘上该类的二进制源码编译成class文件的二进制代码(字节码),然后把class文件的字节码加载到内存中,之后再创建该类的对象。

如何获取Class类的对象,即相应类的字节码呢?

1、调用相应类对象的getClass()方法

Data data;

Class dataclass=data.getClass() ;

2、通过Class类中的静态方法forName(),来获取与字符串对应的Class对象

Class dataclass=Class.forName("Data");

3、通过类名.class形式来实现

Class dataclass=Data.class   

第一种方式为对象的方法,而后两种方式为类的方法。

基本应用

所谓反射就是把Java类中的各种成分映射成相应的Java类。

通过反射,在具体编写程序时,不仅可以动态地生成某个类中所需要的成员,而且还能动态调用相应的成员。

反射涉及的类:Class(表示一个类的类)、Field(表示属性的类)、Method(表示方法的类)、Constrctor(表示类的构造方法的类)。

Class类位于java.lang包中,后面3个类位于java.lang.reflect包中。

高级应用

标注

@Override

java.lang.Override被用作标注方法,主要用于子类在覆盖父类中的方法名时,检测方法名称。

位置可以放在方法的上边,还可以放在方法的前边。

@Deprecated

例子:1方法和2方法能实现相同的功能,但2方法效果更好,若是去掉1方法,则调用该方法的类就会出现错误。为了兼容以前的类而又不建议新设计的类使用1方法,则把1方法作@Deprecated。

@Deprecated修饰具有一定的延续性:即在代码中通过继承或者覆盖的方式使用这个过时的类型及成员,虽然继承或覆盖后的类型及成员并不是被声明为@Deprecated的,但编译器仍然要报警。

位置可以在方法的前边,还能用在参数或类的前边。

@SuppressWarnings

java.lang.SuppressWarnings被用作标注类、属性、方法等成员,主要用于屏蔽警告。

可以带参数,可以是多个。

当@SuppressWarnings接收的参数为多个值时,必须以数组的方式为参数赋值。

例如:@SuppressWarnings({"deprecation","unused","unchecked"}).

类加载器

加载类的工具,字节码的制造器。

运行一个.class文件-->运行java.exe-->根据%JAVA_HOME%\jre\lib\i386\jvm.cfg配置来选择激活JVM-->启动及初始化工作完成后产生BootstrapLoader加载器。

BootstrapLoader加载器不需要加载,由C++编写。

内置类加载器ExtClassLoader和AppClassLoader定义在sun.misc.Launcher.class中为内部类,由BootstrapLoader加载器即在进入JVM。

类加载器装载某个类字节码的过程实际上就是创建Class类的一个对象实例。

JVM中有多个类加载器,JVM加载一个具体的类时,通过什么方式选择类加载器?这些加载器之间有什么关系呢?

1、第一个类加载器(BootstrapLoader):引导类加载器,其他类加载器也需要加载。引导类加载器由操作系统的本地代码实现,不需要加载,主要负责加载Java核心包中的类(%JAVA_HOME%\jre\lib目录下的jar文件)。

2、ExtClassLoader(扩展类类加载器)和AppClassLoader(应用程序类加载器)

扩展类类加载器主要负责扩展路径下的代码,即位于%JAVA_HOME%\jre\lib\ext目录下的jar文件或通过java.ext.dirs这个系统属性指定路径下的代码。

应用程序类加载器:负责加载应用程序,即CLASSPATH这个系统属性指定路径下的代码。

委派模型:如果应用程序类加载器需要加载一个类,它首先委托扩展类加载器,扩展类加载器再委托引导类加载器。如果父类加载器不能加载类,子类加载器就会在自己的库中查找这个类。如果这时还加载不了,就会抛出ClassNotFoundException。基于这个特性,类加载器只负责它的祖先无法加载的类。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值