java反射class文件_Java反射【二、Class类的使用】

类本身也是对象,是java.lang.Class类的实例对象——There is a class named Class.

Class类表示方式

Class类只有Java虚拟机才能初始化,有三种表示方式(Demo是一个类)

1、Class c1=Demo.class;

2、Demo d = new Demo();

Class c2 = d.getClass();

3、Class c3 = Class.forName("PackageName+ClassName");//使用类的全名获取类的类对象,需要try catch

使用类的类对象创建类对象(有点绕,就是用Class对象创建具体的类对象)

Demo d1 = c1.newInstance();

编译和运行

使用eclipse时Run会一并进行编译和运行,感知不是很清晰

用txt写java代码,命令行编译执行比较明确

javac 用于编译.java 文件为 .class文件

java 用于运行.class 文件

静态加载类和动态加载类

静态:使用new创建一个类即为静态加载(编译时刻加载)

动态:使用class.newInstance()创建一个类即为动态加载(运行时刻加载)

以下举例说明动态加载的优势:

有一个Porject程序,其中需要使用到A类和B类,最初实现如下:

public class StaticAndDynamicClass {

public static void main(String[] args) {

AClass a = new AClass();

a.exe();

BClass b = new BClass();

b.exe();

}

}

这样运行肯定会报错,因为AClass和BClass不存在

eb553d38eaab4431f8049996228ab46b.png

如果AClass存在呢?

public class AClass {

public static void Exe(){

System.out.println("AClass execute...");

}

}

此时报两个错,BClass找不到

701886f8ff8bfcb7b05194dab5767dcf.png

这就是静态加载类的特点,需要将用到的所有类全部加载之后才能编译

如果利用newInstance动态的加载类,就可以不用关心类是否完全加载,只要在运行时判断即可

public class StaticAndDynamicClass {

public static void main(String[] args) {

//AClass a = new AClass();

//a.Exe();

//

//BClass b = new BClass();

//b.Exe();

//创建一个接口,符合该接口定义的类都可以被动态加载

Class c = null;

try {

c = Class.forName(args[0]);

ISADC a = (ISADC) c.newInstance();

a.Exe();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

ISADC是一个统一定义接口,凡是符合该接口的类名称都可以通过传参动态的加载进来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值