-
反射的操作都是编译之后的操作
查看全部 -
方法的反射
方法反射的操作
method.invoke(对象,参数列表)
查看全部 -
导出方法:右击/Refactor/Extract Method...
查看全部 -
Method类,方法对象
一个成员方法就是一个Method对象
getMethods()方法获取的是所有的public的函数,包括父类继承而来的
getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限查看全部 -
静态成员
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问
查看全部 -
静态成员
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问
查看全部 -
Class类
Class.forName("类的全称")
不仅表示了类的类类型,还代表了动态加载类
请大家区分编译、运行
编译时刻加载类是静态加载类、运行时刻加载类是动态加载类
查看全部 -
package com.imooc.reflect; public class ClassDemo1 { public static void main(String[] args) { //Foo的实例对象如何表示 Foo foo1 = new Foo();//foo1就表示出来了. //Foo这个类 也是一个实例对象,Class类的实例对象,如何表示呢 //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class c1 = Foo.class; //第二中表达方式 已经知道该类的对象通过getClass方法 Class c2 = foo1.getClass(); /*官网 c1 ,c2 表示了Foo类的类类型(class type) * 万事万物皆对象, * 类也是对象,是Class类的实例对象 * 这个对象我们称为该类的类类型 * */ //不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象 System.out.println(c1 == c2); //第三种表达方式 Class c3 = null; try { c3 = Class.forName("com.imooc.reflect.Foo"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(c2==c3); //我们完全可以通过类的类类型创建该类的对象实例---->通过c1 or c2 or c3创建Foo的实例对象 try { Foo foo = (Foo)c1.newInstance();//需要有无参数的构造方法 foo.print(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Foo{ void print(){ System.out.println("foo"); } }
查看全部 -
Class类查看全部
-
JAVA-Reflect专题
查看全部 -
m.invoke()绕过编译就绕过了泛型
查看全部 -
m.invoke(对象,参数new Object[]{10,20});方法如果没有返回值返回null,有返回值返回具体的返回值。
查看全部 -
Field[] fs=c.getFields()获取所有的public 的成员变量的信息
Field[] fs=c.getDeclaredFields()获取该类自己声明的成员变量的信息
for(Field a:fs){
Class b=a.getType();得到成员变量的类型的类类型
}
构造函数也是对象java.lang.constructor封装了构造函数的信息
getConstructor获取所有的public的构造函数
constructor[] a=c.getConstructor();
constructor[] a=c.getDeclaredConstructor();
for(constructor b:a){
Class[] c=b.getParameterTypes();获取构造函数的参数列表,得到参数列表的类类型
}
查看全部 -
public static void printClassMessage(Object obj){
Class c=obj.getClass();
Method[] ms=c.getMethods();getmethods获取所有的public的函数,包括父类继承而来的。
c.getDeclaredMethods()获取所有该类自己声明的方法,不问访问权限
for(int i=0;i<ms.length;i++){
Class a=ms[i].getReturnType();得到方法的返回值类型的类类型
String b=ms[i].getName();得到方法的名称
Class[] c=ms[i].getParameterTypes();获取参数类型。得到的是参数列表的类型的类类型
for(Class d:c){
String a=d.getName()
}
}
查看全部 -
Class c=Class.forName(args[0])动态加载类
office oa=(office)c.newInstance()
使用子类实现这个接口
编译时javac office word即可
查看全部
举报