//获取一个class的Class实例
Class clas = String.class;
String s = "hello";
Class cals = s.getClass();
Class class = Class.forName("java.lang.String");
-
Class
实例在JVM
中是唯一的:可以用==比较两个
Class
实例。
Class cla1 = String.class;
String s = "hello";
Class cal2 = s.getClass();
Class cla3 = Class.forName("java.lang.String");
boolean b1 = cls1 ==cls2; // true
boolean b1 = cls2 ==cls3; // true
-
Class
实例比较和instanceof
的差别;用
instanceof
比较的时候,不但匹配当前类型,还匹配当前类型的子类。==
只匹配当前类型。通常情况下用instanceof
判断是数据类型,只有精确判断某个实例是否是某个类型的时候才用==
来判断。
Integer n = new Integer(123);
boolean b1 = n instanceof Integer ; // true
boolean b2 = n instanceof Number; // true
boolean b3 = n.getClass() == Integer.class;// true
boolean b4 = n.getClass() == Number.class;// false
-
反射的目的是获得某个
Object
实例时,我们可以获取该Object
的class
信息。 -
从
Class
实例判断class
类型。
Runnable.class.isInterface(); //true
String[].class.isArray(); //true
- 利用
JVM
动态加载class
的特性可以在运行其根据条件加载不同的实现类。
//commons Logging优先使用Log4j
LogFactFactory factory;
if (isClassPresent("org.apache.logging.log4j.Logger")) {
factory = createLog4j();
} else {
factory = createJdkLog();
}
boolean isClassPresent(String name) {
try {
Class.forName(name);
return true;
} cath (Exception e) {
return false;
}
}
2. 访问字段(field)
-
通过
Class
实例获取field
信息:getField(name):获取某个public的field(包括父类)。
getDeclaredField(name):获取当前的某个类的field(不包括父类)。
gerFields:获取所有public的field(包括父类)。
getDeclaredFileds():获取当前类的所有filed(不包括父类)。
-
Filed对象包含一个field的所有信息:
getName(); getType(); getModifiers()
; -
获取一个filed值:
get(Object)
获取一个实例的该字段的值。 -
设置一个filed值:
set(Object)
设置一个实例的该字段的值。 -
通过
setAccessible(true)
来访问非public字段。**注意:**设置setAccessible(true)的时候可以访问private字段 。但是这个方法可能会失败。如果定义了SecurityManManager,它的规则阻止了对该field设置Accessible就会抛出异常 。例如:把规则应用于所有的java和javax开头的package的类,那么对于java的核心类就不能访问它们的private字段。通常情况下自己写的类和第三方的类是没有这个限制的。
3. 调用方法(method)
-
通Clsss实例获取methood信息:
getMethod(…):获取某个public的method(包括父类)。
getDeclaredMethod(…):获取当前类的某个method(不包括父类)。
getMethods():获取所有public的method(包括父类)。
getDeclaredMethods():获取当前类的所有method (不包括父类)。
-
Method对象包含一个method的所有信息:
getName():返回一个名称。
getReturnType():返回一个类型。
getParParameterTypesTypes():返回一个参数类型。
getModifiers():返回方法的修饰符。
-
调用无参数的Method
Object invoke(Object obj)
Integer n = new Integer(123);
Class cls = n.getClass();
Method m = cls.getMethod("toString");
## 最后
分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。
#### 面试经验技巧篇
* 经验技巧1 如何巧妙地回答面试官的问题
* 经验技巧2 如何回答技术性的问题
* 经验技巧3 如何回答非技术性问题
* 经验技巧4 如何回答快速估算类问题
* 经验技巧5 如何回答算法设计问题
* 经验技巧6 如何回答系统设计题
* 经验技巧7 如何解决求职中的时间冲突问题
* 经验技巧8 如果面试问题曾经遇见过,是否要告知面试官
* 经验技巧9 在被企业拒绝后是否可以再申请
* 经验技巧10 如何应对自己不会回答的问题
* 经验技巧11 如何应对面试官的“激将法”语言
* 经验技巧12 如何处理与面试官持不同观点这个问题
* 经验技巧13 什么是职场暗语
![](https://img-blog.csdnimg.cn/img_convert/dbb305a4e112be25de8882a65bccd1c7.png)
#### 面试真题篇
* 真题详解1 某知名互联网下载服务提供商软件工程师笔试题
* 真题详解2 某知名社交平台软件工程师笔试题
* 真题详解3 某知名安全软件服务提供商软件工程师笔试题
* 真题详解4 某知名互联网金融企业软件工程师笔试题
* 真题详解5 某知名搜索引擎提供商软件工程师笔试题
* 真题详解6 某初创公司软件工程师笔试题
* 真题详解7 某知名游戏软件开发公司软件工程师笔试题
* 真题详解8 某知名电子商务公司软件工程师笔试题
* 真题详解9 某顶级生活消费类网站软件工程师笔试题
* 真题详解10 某知名门户网站软件工程师笔试题
* 真题详解11 某知名互联网金融企业软件工程师笔试题
* 真题详解12 国内某知名网络设备提供商软件工程师笔试题
* 真题详解13 国内某顶级手机制造商软件工程师笔试题
* 真题详解14 某顶级大数据综合服务提供商软件工程师笔试题
* 真题详解15 某著名社交类上市公司软件工程师笔试题
* 真题详解16 某知名互联网公司软件工程师笔试题
* 真题详解17 某知名网络安全公司校园招聘技术类笔试题
* 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题
![](https://img-blog.csdnimg.cn/img_convert/0bf58eafbe71ad4828e7bcb4730e1f71.png)
> 需要这份文档的朋友可以[点击蓝色传送门](https://gitee.com/vip204888/java-p7)即可免费获取!
资料整理不易,点个关注再走吧
* 真题详解15 某著名社交类上市公司软件工程师笔试题
* 真题详解16 某知名互联网公司软件工程师笔试题
* 真题详解17 某知名网络安全公司校园招聘技术类笔试题
* 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题
[外链图片转存中...(img-kzhjYZDs-1628234343433)]
> 需要这份文档的朋友可以[点击蓝色传送门](https://gitee.com/vip204888/java-p7)即可免费获取!
资料整理不易,点个关注再走吧