面试题
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>### 反射获取私有属性```javaClass<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);
