欢迎访问中国建设银行官方网站百度上看了不健康的内容犯法吗
一.何为反射
所谓反射,就是加载类,并将类中的各种成分解剖出来,如成员变量、方法、构造器等。然后对这些成员变量、方法、构造器等进行操作。
当我们使用idea时,出现这种提示,如.study()方法的提示就是使用反射解构出来的。
二.反射学什么
三.加载类,获取类的字节码文件
我们首先定义一个Student类,
package com.njau.d2_reflect;public class Student {private String name;private int age;private char sex;private double height;private String hobby;public Student(String name, int age, char sex, double height, String hobby) {this.name = name;this.age = age;this.sex = sex;this.height = height;this.hobby = hobby;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", sex=" + sex +", height=" + height +", hobby='" + hobby + '\'' +'}';}
}
接着我们通过以上获取Class对象的三种方式来获取Student类的类对象
首先第一种方式是通过类名.class的方式获取:
第二种方式是通过Class.forname(全类名)的方式获取:
第三种方式是通过该类的实现类对象调用.getClass()方法获取。
package com.njau.d2_reflect;/*** 目标:了解反射并掌握获取Class对象的3种方式* 反射:* 反射就是:加载类,并允许以编程的方式解剖类的各种成分(成员变量、方法、构造器等)* 获取Class对象的三种方式* 1、Class c1 = 类名.class* 2、调用Class提供方法:public static Class forName(String package);* 3、Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();*/
public class Test1Class {public static void main(String[] args) throws Exception {Class c1 = Student.class;System.out.println(c1.getName()); // com.njau.d2_reflect.Student(全类名)System.out.println(c1.getSimpleName()); // StudentClass c2 = Class.forName("com.njau.d2_reflect.Student");System.out.println(c2); // class com.njau.d2_reflect.StudentSystem.out.println(c2==c1); // trueStudent s = new Student();Class c3 = s.getClass();System.out.println(c3); // class com.njau.d2_reflect.StudentSystem.out.println(c3 == c2); // true}
}
我们通过验证可以知道获取到的都是同一个Student类对象,因为一个类只能存在一个。