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个整数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类