反射:
Java反射(Reflection)是一种新的操作类中成员变量、构造方法和普通方法的机制,为了实现对成员变量、构造方法和普通方法的操作,我们需要借助Java自身提供的java.lang包下的Class类和java.lang.reflect包下的反射API 。
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
Student student=new Student();//调用构造方法
Student.name ="tom";//调用属性
student.doHomework();//调用普通方法
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
分类
1.Class.forName
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//1.Class.forName
Class clazz=null;
try {
clazz=Class.forName("keeper.Student");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
keeper.Student
2.类名
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//2.类名
Class clazz=null;
clazz=Student.class;
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
keeper.Student
3.对象
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//3.对象
Class clazz =null;
clazz=new Student().getClass();
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
keeper.Student
4.基本数据类型:
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//4.基本数据类型对应的class对象 (包装类.TYPE)
Class clazz=null;
clazz=Integer.TYPE;//数据类型
System.out.println(clazz.getName());
clazz=Integer.class;//返回的是 “类”
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
int
java.lang.Integer
5.数组
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//5.数组对应的class (元素类型.class)
Class clazz=null;
clazz = String[].class;
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
[Ljava.lang.String;
6.某个类的父类的class对象
package keeper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//6.某个类的父类的class对象
Class clazz=null;
clazz=Student.class.getSuperclass();
System.out.println(clazz.getName());
}
}
package keeper;
public class Student {
public static String name;
public void doHomework() {
System.out.println(name+"fadfsf");
}
public Student() {
}
public Student(String name) {
this.name=name;
}
}
结果:
java.lang.Object