JavaRTTI和反射基本讲解

来源:互联网 发布:常用理财软件 编辑:程序博客网 时间:2024/06/05 15:45
public class Test {public static void main(String[] args) {new Shape().draw();//每一个类都对应一个Class对象 我们获取这个对象之后,可以进行一系列的操作Class class1=new Shape().getClass();System.out.println(class1.getName());System.out.println(class1.getSimpleName());System.out.println(class1.getCanonicalName());System.out.println(class1.getSuperclass());System.out.println(class1.getInterfaces());System.out.println(class1.isInterface());try {System.out.println(class1.newInstance());} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}//用类字面常量的方式获取Class对象Class class2=Shape.class;System.out.println(class1==class2);System.out.println(class1.equals(class2));System.out.println(byte.class);System.out.println(short.class);System.out.println(int.class);System.out.println(long.class);System.out.println(char.class);System.out.println(float.class);System.out.println(double.class);System.out.println(boolean.class);System.out.println(Integer.class);System.out.println(Integer.TYPE);//class对象与泛型的结合//判断对象是不是某个类型System.out.println(new Shape() instanceof Shape);//这种方式也可以System.out.println(class1.isInstance(new Shape()));//传统的RTTI要求我们在编译时就知道所有的类的信息//如果运行时获取类型的信息,就是反射,或者说基于RMI,远程方法调用//反射机制并没有什么神奇之处,当通过反射与一个未知的对象打交道时,JVM只是简单的检查这个对象,看它属于哪个特定的类,就想RTTI那样//在用它做其他事情之前,必须先加载那个类的Class对象,因此,那个类的.class文件对于JVM来说必须是可获取的,要么在本地机器,要么//通过网络获得,所以RTTI和反射真正的区别在于,对于RTTI来说,是在编译期间打开和检查.class文件,可以用普通的方法调用对象的所有方法//而对于反射机制来说,.class文件在编译时是不可获取的,所以是运行时打开和检查.class文件}}class Shape{public void draw(){System.out.println(this);}public String toString(){return "测试RTTI";}}

0 0
原创粉丝点击