面试题

java中反射的实现过程和作用分别是什么

java语言编译之后会生成class文件,反射就是通过class文件找到一个类、方法、属性的。反射的实现主要借助以下四个类:CLass:类的对象,Constructor:构造器,Field:属性的对象,Method:方法的对象
作用:程序在运行时能够通过反射机制获取自身的信息。

获取反射的三种方法

  1. 通过new的对象实现反射机制
  2. 通过路径实现发射机制
  3. 通过类名实现反射 ```java package com.dongruan.jx.pet.test;

public class Student { private String name; private Integer age;

  1. public Student() {
  2. }
  3. public Student(String name, Integer age) {
  4. this.name = name;
  5. this.age = age;
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public Integer getAge() {
  14. return age;
  15. }
  16. public void setAge(Integer age) {
  17. this.age = age;
  18. }

}

package com.dongruan.jx.pet.test;

public class Test { public static void main(String[] args) { Student student = new Student();

  1. 通过new的对象实现反射机制
  2. Class aClass = student.getClass();
  3. System.out.println("aclass"+aClass);
  4. try {
  5. 通过路径实现发射机制
  6. Class forName = Class.forName("com.dongruan.jx.pet.test.Student");
  7. System.out.println("forname"+forName);
  8. } catch (ClassNotFoundException e) {
  9. e.printStackTrace();
  10. }
  11. 通过类名实现反射
  12. Class<Student> studentClass = Student.class;
  13. System.out.println("studentclass"+studentClass);
  14. }

}

  1. <a name="c42ck"></a>
  2. ### 反射获取私有属性
  3. ```java
  4. Class<Student> studentClass = Student.class;
  5. Student student1 = studentClass.newInstance();
  6. student1.setName("aaaa");
  7. try {
  8. Field name = studentClass.getDeclaredField("name");
  9. name.setAccessible(true);
  10. System.out.println("name+++"+name.get(student1));
  11. } catch (NoSuchFieldException e) {
  12. e.printStackTrace();
  13. }
  14. System.out.println("studentclass"+studentClass);