package com;
/**
* 类型创建
*/
public class TypeCast {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class s=Class.forName("com.MyLogger");//获取类的引用
System.out.println("s的类的全限定名称:"+s.getName());
System.out.println("s的类的名称:"+s.getSimpleName());
System.out.println("s的类的全限定名称:"+s.getCanonicalName());
for(Class c:s.getInterfaces()){
System.out.println("s的实现的接口:"+c.getCanonicalName());
}
System.out.println("s的父类:"+s.getSuperclass());
Object o=s.newInstance();//创建类的实例对象
if(o instanceof MyLogger){//instanceof 判断实例对象所属的类,若o属于 MyLogger的派生类,结果仍为true
if(MyLogger.class.isInstance(o)){//使用类的引用的isInstance()比较与instanceof 等价,若o属于 MyLogger的派生类,结果仍为true
System.out.println("使用类的引用的isInstance()比较某一个实例对象是否为同一个类型:"+true);
}
System.out.println("使用==比较类的引用是否为同一个类:"+ (o.getClass() == MyLogger.class));//比较类的引用是否为同一个类,相同为true,若o属于 MyLogger的派生类,结果为false
System.out.println("使用equals()比较类的引用是否为同一个类:"+ (o.getClass().equals(MyLogger.class)));//此处与==等价,若o属于 MyLogger的派生类,结果为false
MyLogger myLogger=(MyLogger)o;
System.out.println("myLogger:"+myLogger.toString());
Class s1=o.getClass();//通过对象实例获得类的引用
System.out.println("s1的类全限定名称:"+s1.getName());
Class s2=MyLogger.class;//通过类本身的class获得类的引用
System.out.println("s2的类全限定名称:"+s2.getName());
}
//获得泛型的具体的类引用,newInstance将返回对象的确切类型
Class<MyLogger> s3=MyLogger.class;
MyLogger myLogger1=s3.newInstance();
System.out.println("myLogger1:"+myLogger1.toString());
//使用?的泛型类引用,newInstance此时无法确定具体的类类型,仍需强转
Class<?> s4=MyLogger.class;
MyLogger myLogger2=(MyLogger)s4.newInstance();
System.out.println("myLogger2:"+myLogger2.toString());
//所有对象都可以通过new调用构造器创建类的对象实例
MyLogger myLogger3=new MyLogger();
System.out.println("myLogger3:"+myLogger3.toString());
}
}
运行结果:
s的类的全限定名称:com.MyLogger s的类的名称:MyLogger s的类的全限定名称:com.MyLogger s的父类:class java.lang.Object 使用类的引用的isInstance()比较某一个实例对象是否为同一个类型:true 使用==比较类的引用是否为同一个类:true 使用equals()比较类的引用是否为同一个类:true myLogger:com.MyLogger@6d6f6e28 s1的类全限定名称:com.MyLogger s2的类全限定名称:com.MyLogger myLogger1:com.MyLogger@135fbaa4 myLogger2:com.MyLogger@45ee12a7 myLogger3:com.MyLogger@330bedb4
转载于:https://my.oschina.net/langwanghuangshifu/blog/1935816