反射的操作,都是编译后的操作,对.class文件的操作;
编译是去泛型的;Java中泛型是防止输入错误的,只在编译阶段有效,编译之后,就没有了泛型;
利用反射可以绕过编译中的类型判断过程
编译是去泛型的;Java中泛型是防止输入错误的,只在编译阶段有效,编译之后,就没有了泛型;
利用反射可以绕过编译中的类型判断过程
2015-01-15
Class int1=int.class;
Class String1=String.class; //String类的类 类型 String类字节码:编译后的文件-->字节码:类名.class
Class String1=String.class; //String类的类 类型 String类字节码:编译后的文件-->字节码:类名.class
2015-01-15
编译和运行是不同的:.java-->.class--->运行《机器码》
静态加载类:编译时加载所有的,可能使用到的类,即使不用也要加载。100个类,一个有错,全部报废:也浪费时间
动态加载类:运行时加载类
静态加载类:编译时加载所有的,可能使用到的类,即使不用也要加载。100个类,一个有错,全部报废:也浪费时间
动态加载类:运行时加载类
2015-01-15
1:Class class1=Foo.class; ------->实际在告诉我们,任何一个类都有一个隐含的静态成员变量
2: Class class2=foo1.getClass()---->已知该类的对象,通过该类的对象通过getClass方法
class1和class2表示Foo类的类 类型(class type) Foo这个类本身就是一个对象,Foo类的对象:
3:Class class3=null; class3=Class.forName();
class1==class2==class3
2: Class class2=foo1.getClass()---->已知该类的对象,通过该类的对象通过getClass方法
class1和class2表示Foo类的类 类型(class type) Foo这个类本身就是一个对象,Foo类的对象:
3:Class class3=null; class3=Class.forName();
class1==class2==class3
2015-01-15
我们可以通过类 类型创建该类的对象实例---->c1,c2,c3创建Foo的实例对象
Foo foo=(Foo)c1.newInstance();<须有无参的构造方法>
Foo foo=(Foo)c1.newInstance();<须有无参的构造方法>
2015-01-15
任何一个类都是Class的实例对象:3种表示方式
class Foo{}
Foo foo1=new Foo();
不能直接new Class()这个构造方法是私有的
class Foo{}
Foo foo1=new Foo();
不能直接new Class()这个构造方法是私有的
2015-01-15