Q: 调用类对象.class 和 forName(类名)的区别?
Class<A> classA = A.class;
Class<A> classA = Class.forName("A");
A: 仅使用.class不能进行第一次静态初始化, forname函数则可以
例如B是A的基类,下面这段代码如何?
假设有父子2个类,如下:
static class Parent { }
static class Son extends Parent{}
Q: 用instanceof 可以和父类比较吗,且会返回true吗?
Son son = new Son();
if (son instanceof Parent) {
System.out.println("a instanof B");
}
A: 可以比较,且返回true。
Q: 用getClass并用== 可以和父类比较吗,且会返回true吗,下面这样:
注意A是B的子类。
Son son = new Son();
if (son.getClass() == Parent.class){
System.out.println("son class == Parent.class");
}
A: 不可以,编译就会报错了。和Class<泛型>的 ==号比较有关。
image.png
因为getClass返回的是<? extends Son>, .class返回的是Class<Parent>
Q: 用getClass并用.equals可以和父类比较吗,且会返回true吗,下面这样:
Son son = new Son();
if (son.getClass().equals(Parent.class)){
System.out.println("son class.equals(Parent.class)");
}
A: 可以比较,正常编译, 但是会返回false,即不相等!
Q: getDeclaredXXX 有哪几种?
A: 5种:注解Annotation
内部类Classed
构造方法Construcotor
字段Field
方法Method
Q:getMethods()返回哪些方法, getDeclaredMethods()会返回哪些方法?
A:
getMethods()返回 本类、父类、父接口 的public方法
getDeclaredMethods()只 返回本类的 所有 方法
其他getXXX和getDeclaredXXX的区别同理。
拿到Filed、Method、Constructor之后咋用
Method可以invoke(object, args)
Constructor可以newInstance(Object…)来做构造调用。
Filed可以用get(object)、set(object)来设置属性值。
Q: 反射拿到Method对象后, 该对象.getModifiers() 是干嘛的?
A: 返回该方法的修饰符,并且是1个整数。
标签:返回,反射,1.6,getClass,Parent,Son,son,class From: https://www.cnblogs.com/yuanbaobao/p/17564173.html