#Java反射技术笔记
一.反射定义:
反射机制是在 运行状态 中:
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用他的任意一个方法和属性。
二.反射提供的功能:
在运行时判断任意一个对象属性的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。
三.通过反射可以获取的内容
编写一个Person类,用反射对此类做操作:
package com.zmh.spbdemo.reflect;
public class Person implements MyInterface,MyInterface2{
private int id;
private String name;
private int age;
public Person(int id){
this.id = id;
}
public Person() {
}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public void interfaceMethod() {
System.out.println("interfaceMethod...");
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public static void staticMethod(){
System.out.println("static method...");
}
private void privateMethod(){
System.out.println("private method...");
}
@Override
public void interfaceMethod2() {
System.out.println("interface method2...");
}
private Person(String name){
this.name = name;
}
}
1.通过反射获取类:
例:通过反射获取Person类
获取反射对象(反射入口)Class 的三种方法:
- Class.forName(全类名),该法需要捕获异常
try {
Class<?> personClass = Class.forName("com.zmh.spbdemo.reflect.Person");
System.out.println(personClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
- xx.class
Class<Person> personClass2 = Person.class;
System.out.println(personClass2);
- 对象.getClass()
Person per = new Person();
Class<? extends Person> p = per.getClass();
System.out.println(p);
2.通过反射获取方法
获取所有的公共方法:getMethods()。注意,这里的公共是指本类,父类以及接口中的方法。此外,需要符合访问修饰符规律。