-
Method类 类的方法
-
Field类 类的属性
-
Constructor类 类的构造方法
================================================================
使用反射的过程
-
获得Class对象
-
通过Class对象获得类的方法和属性
-
通过反射机制创建对象
-
通过对象调用方法和属性
-
类名.class 通过类获得
-
对象.getClass() 通过对象获得
-
Class.forName(“包名+类名”) 动态加载类到内存中
Class类的方法:
-
Method[] getDeclaredMethods() 获得所有已声明的方法
-
Field[] getDeclaredFields() 获得所有已声明的属性
Method的方法:
-
String getName() 获得方法名
-
Class getReturnType() 获得返回值类型
-
int getModifiers() 获得访问修饰符
-
Class[] getParameterTypes() 获得所有参数类型
Field的方法:
-
String getName() 获得方法名
-
Class getType() 获得类型
-
int getModifiers() 获得访问修饰符
Class类的方法:
-
Object newInstance() 创建对象,必须提供无参的构造方法
-
Method getMethod(String name,Class… paramType) 获得特定方法
name是方法名, paramType是参数的类型
Method类的方法:
- Object invoke(Object obj,Object… params) 调用方法
obj是调用方法的对象,params是参数的值
Class类的方法:
- Constructor getContructor(Class… paramType) 获得构造方法
paramType是构造方法的参数类型
Constructor的方法:
- Object newInstance(Object… params) 创建对象
params是参数的值
案例:运行时获得类的属性和方法信息
class Person{
private String name;
private Integer age;
public Person(){
}
public Person(String name,Integer age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void sayHi(){
System.out.println(“Hi:”+name+“,”+age);
}
}
public class ReflectTest {
public static void main(String[] args){
try {
//获得类型
Class clazz = Person.class;
//获得所有的属性
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
//属性名称
String name = f.getName();
//属性类型
Class c = f.getType();
System.out.println(name+" - "+c);
}
//获得所有的方法
Method[] methods = clazz.getDeclaredMethods();
for(Method m : methods){
//方法名
String name = m.getName();
//返回值类型
Class returnType = m.getReturnType();
System.out.print(returnType + " " + name + “(”);
//参数
Class[] params = m.getParameterTypes();
for(Class c : params){
System.out.print(" " + c.getName());
}
System.out.println(“)”);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
案例:创建对象,调用方法
try {
//获得类型
Class clazz = Person.class;
//获得类的对象,调用默认的构造方法
Object obj = clazz.newInstance();
//获得对象的方法
Method m1 = clazz.getMethod(“setName”, String.class);
Method m2 = clazz.getMethod(“setAge”, Integer.class);
Method m3 = clazz.getMethod(“sayHi”);
//调用方法
m1.invoke(obj, “micheal”);
m2.invoke(obj, 20);
m3.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
案例:调用指定构造方法
try {
//运行时将Person类加载到内存中
Class clazz = Person.class;
//获得指定的构造方法
Constructor con = clazz.getConstructor(String.class,Integer.class);
//调用构造方法
Object obj = con.newInstance(“Jim”,30);
//调用方法
Method m = clazz.getMethod(“sayHi”);
m.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
案例:使用反射完成JSON解析
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
[外链图片转存中…(img-cfnQCNNq-1713291351455)]
[外链图片转存中…(img-i0xdQ1vL-1713291351455)]
其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!