JavaAPI详解系列(8):Class类(2)

本文将演示Class类常用方法

public Class asSubclass(Class clazz)

从名字上看似是将调用的Class转成括号内的Class的子类,但正好是反的这个方法的作用是:父类Class对象作为参数,将父类转化为子类Class对象

示例4:

packagestring.lang.java;

classA{

publicString toString() {

return"A类对象";

}

}

classB1extendsA{

publicString toString() {

return"B1类对象";

}

}

classB2extendsA{

publicString toString() {

return"B2类对象";

}

}

publicclassClassDemo4 {

publicstaticvoidmain(String[]args) {

try{

Classc=B1.class;

Classb1=c.asSubclass(A.class);

System.out.println(b1.newInstance());

}catch(InstantiationExceptione) {

//TODOAuto-generated catch block

e.printStackTrace();

}catch(IllegalAccessExceptione) {

//TODOAuto-generated catch block

e.printStackTrace();

}

}

}

运行的结果如下:

说明:

上例中的Classc=B1.class;

Classb1=c.asSubclass(A.class);

将B1的Class对象转换成父类A的Class对象意义不大。但若c是通过Class.formName加载而成那未必可以转换,因此该方法的意义就是检测加载的class对象是否与目标类型的Class兼容,如果转换成功表示兼容,否则抛出异常

示例5:

packagestring.lang.java;

publicclassClassDemo5 {

publicstaticvoidmain(String[]args) {

try{

Classc1= Class.forName("string.lang.java.B1");//1

Classb1=c1.asSubclass(A.class);//2

Classc2= Class.forName("string.lang.java.B2");//3

Classb2=c2.asSubclass(A.class);//4

Classb3=c2.asSubclass(B1.class);//5

}catch(ClassNotFoundExceptione) {

//TODOAuto-generated catch block

e.printStackTrace();

}

}

}

运行的结果如下:

说明:异常在注释5处,原因就是无法将B2类型class对象转换成B1类型的Class对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见...
    时待吾阅读 1,093评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,497评论 0 17
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,261评论 0 2
  • A 朋友X偶尔会抱怨她的舍友,四个人合住,本一开始也还各自维护着和谐的关系,但时间长久之后,矛盾越积越多,隔一段时...
    可可布朗尼阅读 430评论 0 0