-
Method类,方法对象
一个成员方法就是一个Method对象
getMethods()方法获取的是所有的public的函数,包括父类继承而来的
getDeclaredMethods()获取的是所有该类自己声明的方法,不管访问权限
查看全部 -
Class类
Class.forName("类的全称")
不仅表示了类的类类型,还代表了动态加载类
编译时刻加载类是静态加载类、运行时刻加载类是动态加载类
查看全部 -
class Foo{}
Foo foo1=new Foo();
任何一个类都是Class的实例对象,这个实例对象有三种表示方式
第一种表示方式 任何一个类都有一个隐含的静态成员变量class
Class c1=Foo.class;
第二种表达方式 已经知道该类的对象通过getClass方法
Class c2=foo1.getClass();
c1,c2表示了Foo类的类类型(class type)
第三种表达方式
Class c3=null;
c3=Class.forName("路径 包.类名");
我们完全可以通过类的类类型创建该类的对象实例
Foo foo=(Foo) c1.newInstance();
查看全部 -
获取一个类的类类型(java.lang.Class的实例对象)的三种方式: 1 类名.class 如: User.class 2 类的实例对象.getClass 如: user.getClass 3 Class.forName("类的全限定名") 如: Class.forName("com.zhuyc.User")查看全部
-
泛型的本质:编译之后的泛型是去泛型化的
Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了
验证,我们可以通过方法的反射操作,绕过编译,绕过编译操作就绕过了泛型
动态代理中,要执行某个类的方法时,先生成该类的代理类,通过代理类去调用目标类的方法,从而可以在代理类中执行 额外的逻辑。为了动态生成代理类,而不事先生成,我们就需要利用到反射。
查看全部 -
Java方法反射的基本操作:
如何获取某个方法:方法的名称和方法的参数列表才能唯一决定某个方法
方法反射的操作:method.invoke(对象,参数列表)
查看全部 -
先得到类的类类型,就可以进行对该类的各种常规操作了
查看全部 -
编译和运行怎么区分?
编译时刻加载类是静态加载类,运行时刻加载类是动态加载类
new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类
通过动态加载类可以解决该问题,在运行时刻加载
查看全部 -
反射专题:
class类的使用:万事万物皆对象,但是普通的数据类型类不是对象,但是有包装类,静态的成员不是对象,类是谁的对象?类是java.lang.Class类 的实例对象
方法的反射,成员变量的反射,构造函数的反射,Java类加载机制
查看全部 -
反射的操作都是编译之后的操作
查看全部 -
Class.forName("类的全称")
不仅代表了类的类类型,还代表了动态加载类
编译时刻 加载类是静态加载类
运行时刻加载类是动态加载类
查看全部 -
new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类
查看全部 -
反射查看全部
-
类名.class 类的类类型 (teacher所说类名.class是类的字节码方便记忆)
类类型.getName();//打印类的全称
类类型.getSimpleName();//打印不带包名的类的名称
基本数据类型,void关键字 都存在类类型
获取类的信息,首先要获取类的类类型(三种方法)
Class c=obj.getClass(); //obj是哪个子类的对象,c就是该子类的类类型
//获取类的名称
c.getName();
//Method类,方法对象(一个成员方法就是一个method对象)
getMethods()方法获取的是所有的public的函数,包括父类继承而来的
getDeclaredMethods()获取的是所有该类自己声明的方法,不管访问权限
查看全部 -
new 创建对象 是静态加载类 ,在编译时就需要加载所有的可能使用到的类
动态加载类就是避免整个程序不能编译通过而影响正常的代码的执行
具体方法:
//动态加载类,在运行时加载
Class c= Class.forName("类的全称");
//通过类类型,创建该类对象
OfficeAble oa=(OfficeAble)c.newInstance();
oa.start();
具体使用的时候再来实现OfficeAble接口
查看全部
举报