-
带泛型的数组 和不带的 在类类型上相同 只防止编译时出错,绕过编译,运行时泛型内放不同类型参数不会报错查看全部
-
用反射获得目标内里面的方法后,用invoke调用 如图查看全部
-
方法的反射: 1.获取A类中的print(int,int)方法: ①要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1=new A(); Class c= a1.getClass(); ②获取方法 由名称和参数列表来决定,getMethod获取的是public方法,getDelcaredMethod获取自己声明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用数组的形式 表示new Class[]{int.class,int.class},也可以直接列举类类型 2.方法的反射操作:是用m对象来进行方法调用,和a1.print(10,20)调用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(对象名,参数);//方法如果没有返回值返回null,如果有返回值返回具体值,参数可用数组的方式表示,也可以直接列举,没有参数就不写 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class); Object obj=getMet.invoke(a1,"df","df"); } }查看全部
-
如何获得class A里面的方法已知 A a1=new A();查看全部
-
二、构造函数是java.lang.Constructor类的对象 1、通过Class.getConstructor()获得Constructor[]所有公有构造方法信息 2、建议getDeclaredConstructors()获取自己声明的构造方法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[] 成员变量也是对象,是java.lang.reflect.Field的对象;查看全部
-
Java反射机制——获取成员变量&构造函数 一、成员变量是java.lang.reflect.Field的对象 1、Field类封装了关于成员变量的操作 2、Field[] fs = c.getFields()方法获取所有public的成员变量Field[]信息 3、c.getDeclaredFields获取的是该类自己声明的成员变量信息 4、field.getType()获得成员类型的类类型 5、field.getName()获得成员的名称查看全部
-
基本数据类型的类类型: Class c1=int.class; c1.getName=int; Class c2=String.class; Class c3=void.class; c2.getName=void; Class c=obj.getClass(); 如何获取类类型的信息: c.getName(); c.getMethods();获取类里面的public的函数,包括父类的方法 得到Method[]数组,如何得到方法的方法名、返回值、返回类型 见图查看全部
-
万事万物皆对象 只有static和变量不是(例如int a=5,a不是) 动态加载类: Class.forName("类的全程") 为动态加载(运行加载) (编译时加载时静态加载,new创建的对象是静态加载,在编译时就要加载所有可能用到的类) 希望用哪个就加载哪个———这就是动态加载的用处 先创建一个类类型class 然后在用class创建实例(因为只能指定一个实例,同时现实中可能有多种类,所以只要创建一个规范借口就可以,以后用那种就实现这个借口类就可以) ok!查看全部
-
创建一个类类型的三种方法: 1)Foo类的对象是 foo1 Class c2 = foo1.getClass() --->已知该类的对象,通过该类的对象通过getClass方 法获取Foo类的类类型 2)Foo类的类类型c1指的是Class的对象 Class c1 = Foo.class; 3)Class c3=Class.forName("com.imooc.reflect.Foo"); 三种方式创建的类类型都相等,都是Foo的类类型; Class的用法: 可以通过类的类类型创建Foo的实例对象 Foo foo=(Foo)c1.newInstance(); 4)我们可以通过类的类类型来创建该类的实例对象 Foo foo = (Foo)c1.newInstance(); 前提是需要有无参数的构造方法,它要调用查看全部
-
java动态加载类,如果在编译期就写死的话,后面的代码不好维护,如果改变类的话,整段代码需要重新维护。但是如果动态加载类的话,可以动态加载接口,需要具体的实现再直接添加类即可。查看全部
-
笔记1查看全部
-
第三种方式查看全部
-
两种得到class对象的方式查看全部
-
class对象三种获取方式 1.Class c1= A.class; 2.Class c2=a.getClass() 3.Class c3 = forNameClass(pakcage.A) 反射机制是在编译后的 所以可以绕过标准 所有的new 对象都是静态编译过程,就是必须编译时会检查 invoke方法是反射操作的核心 Mothed m = c1.getMethod(方法名 ,参数列表) m.invoke(代理的对象, 参数) 反射是绕过编译的。 集合的泛型只为了防止错误输入,编译阶段有效,绕过编译,使用反射是不会控制集合中的数据类型的。 方法的反射使用: Class c1=对象a.getClass() Method m = c1.getMethod(方法名,参数列表) Object o =m.invoke(对象a,参数列表,可以一一列举,也可以用数组)查看全部
-
方法的反射: 1.获取A类中的print(int,int)方法: ①要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型 A a1=new A(); Class c= a1.getClass(); ②获取方法 由名称和参数列表来决定,getMethod获取的是public方法,getDelcaredMethod获取自己声明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用数组的形式 表示new Class[]{int.class,int.class},也可以直接列举类类型 2.方法的反射操作:是用m对象来进行方法调用,和a1.print(10,20)调用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(对象名,参数);//方法如果没有返回值返回null,如果有返回值返回具体值,参数可用数组的方式表示,也可以直接列举,没有参数就不写 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class); Object obj=getMet.invoke(a1,"df","df"); } }查看全部
举报
0/150
提交
取消