面试题
java中反射的实现过程和作用分别是什么
java语言编译之后会生成class文件,反射就是通过class文件找到一个类、方法、属性的。反射的实现主要借助以下四个类:CLass:类的对象,Constructor:构造器,Field:属性的对象,Method:方法的对象
作用:程序在运行时能够通过反射机制获取自身的信息。
获取反射的三种方法
- 通过new的对象实现反射机制
- 通过路径实现发射机制
- 通过类名实现反射 ```java package com.dongruan.jx.pet.test;
public class Student { private String name; private Integer age;
public Student() {
}
public Student(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;
}
}
package com.dongruan.jx.pet.test;
public class Test { public static void main(String[] args) { Student student = new Student();
通过new的对象实现反射机制
Class aClass = student.getClass();
System.out.println("aclass"+aClass);
try {
通过路径实现发射机制
Class forName = Class.forName("com.dongruan.jx.pet.test.Student");
System.out.println("forname"+forName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
通过类名实现反射
Class<Student> studentClass = Student.class;
System.out.println("studentclass"+studentClass);
}
}
<a name="c42ck"></a>
### 反射获取私有属性
```java
Class<Student> studentClass = Student.class;
Student student1 = studentClass.newInstance();
student1.setName("aaaa");
try {
Field name = studentClass.getDeclaredField("name");
name.setAccessible(true);
System.out.println("name+++"+name.get(student1));
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
System.out.println("studentclass"+studentClass);