-
编译时加载的类:静态加载类(用new关键词创建的类) 运行时加载的类:动态加载类(用类类型创建的类)(不过需要有接口或者父类(抽象类)) //Class.forName("类的全名") Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble) (c.newInstance());//需要有无参构造器 //OfficeAble 是接口(interface)查看全部
-
Class类 1)在面向对象的世界里,万事万物皆对象。 类是对象,类是java.lang.Class类的实例对象。 There is a class named Class 2)//Foo的实例对象如何表示 Foo foo1=new Foo();//foo1就表示出来了 //Foo这个类也是一个实例对象,Class类的实例对象,如何表示呢? //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class c1=Foo.class; //第二种表达方式--->已经知道该类的对象通过getClassF方法 Class c2=foo1.getClass(); //官网c1,c2表示了Foo类的类类型(class type),万事万物皆对象,类也是对象,是Class类的实例对象 //这个对象我们称为该类的类类型 //不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象 //第三种表达方式 Class c3=null; c3=Class.forName("com.imooc.reflect.Foo"); //我们完全可以通过类的类类型创建类的对象实例--->通过c1 or c2 or c3创建Foo的实例对象 Foo foo=(Foo)c1.newInstance();//需要有无参数的构造方法查看全部
-
1. 反射的操作都是编译之后的操作。 2. Java中的泛型仅在编译阶段有效,(仅仅是防止编程错误的输入)绕过编译就无效了。 那就是说用反射可以使泛型无效(编译之后是去泛型化的)查看全部
-
方法的反射: 1. 方法名称加参数列表可以唯一确定一个方法 2. 通过方法对象来实现方法的功能,即把实例对象当成参数传给方法对象 Here is an example: There is a class A: class A{void printInfo(String s1, String s2){System.out.println(s1 + s2);}} Implement the class: A a = new A(); Class c = a.getClass(); Method m = c.getMethod("printInfo", String.class, String.class); //getMethod方法只能获得public方法 //getDeclaredMethod方法能获得所有自己声明的方法 //you can write the above code like following: Method m = c.getMethod("printInfo", new Object[]{String.class,String.class}); Object o = m.invoke(a, "Hello ", "World!");//Here, o = null //You can also write like: Object o = m.invoke(a, new Object[]{"Hello ","World!"}); //The above code just like: a.printInfo("Hello ","World!");查看全部
-
Class类实例化的三种表示方式...查看全部
-
获取一个类的方法,就是要获取一个类的信息; 而获取一个类的信息,首先要获取这个类的类类型查看全部
-
编译时加载类是静态加载类(一百个功能,如果有一个出错,其他也不能用),运行时加载类是动态加载类(每个功能各不干扰,用接口去实现)查看全部
-
Class类查看全部
-
@try——catch...内容 //Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class,int.class); //方法的反射操作 //a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同 //方法如果没有返回值返回null,有返回值返回具体的返回值 //Object o = m.invoke(a1,new Object[]{10,20}); Object o = m.invoke(a1, 10,20); System.out.println("=================="); //获取方法print(String,String) Method m1 = c.getMethod("print",String.class,String.class); //用方法进行反射操作 //a1.print("hello", "WORLD"); o = m1.invoke(a1, "hello","WORLD"); System.out.println("==================="); // Method m2 = c.getMethod("print", new Class[]{}); Method m2 = c.getMethod("print"); // m2.invoke(a1, new Object[]{}); m2.invoke(a1);查看全部
-
public class MethodDemo1 { public static void main(String[] args) { //要获取print(int ,int )方法 1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1 = new A(); Class c = a1.getClass(); /* * 2.获取方法 名称和参数列表来决定 * getMethod获取的是public的方法 * getDelcaredMethod自己声明的方法 */ try { ... } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class A{ public void print(){ System.out.println("helloworld"); } public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ System.out.println(a.toUpperCase()+","+b.toLowerCase()); } }查看全部
-
这个Foo类是Class类的“对象”查看全部
-
只有java虚拟机才能创建Class对象查看全部
-
1) 基本的数据类型,void的关键字都有类类型 2) 方法是Method类的对象 3) Class类常用方法: getName(); getSimpleName(); getMethods(); getDeclaredMethods(); Method类常用方法: getReturnType(); getParametersType(); getName();查看全部
-
Class、Method反射都是在运行时执行,可以绕过编译查看全部
-
方法的反射查看全部
举报
0/150
提交
取消