1.新建一个Person实体类
package reflect;
public class Person {
private String name = "张三";
private int age = 22;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello(){
System.out.println(name+":大家好!");
}
public void sayHi(){
System.out.println(name+":嗨!,我今年"+age);
}
public void say(String name){
System.out.println(this.name+":你好!"+name);
}
public void say(String name,int age){
System.out.println(this.name+":你好!"+",你今年"+age+"了吗?");
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2. 获取一个类的类对象和类中所有方法
package reflect;
import java.lang.reflect.Method;
import java.util.Scanner;
public class ReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个类名:");
String className = scan.nextLine();
Class cls = Class.forName(className);
String name = cls.getName();
System.out.println("字符串的类对象名:"+name);
Method[] methods = cls.getMethods();
System.out.println("字符串的所有方法总计:"+methods.length+"个");
for(Method method : methods){
System.out.println(method.getName());
}
}
}
3.使用反射机制实例化对象
package reflect;
import java.util.ArrayList;
import java.util.Scanner;
public class ReflectDemo2 {
public static void main(String[] args) throws Exception {
ArrayList list = new ArrayList();
System.out.println(list);
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个类名:");
String className = scan.nextLine();
Class cls = Class.forName(className);
Object obj = cls.newInstance();
System.out.println(obj);
}
}
4.利用反射机制获得一个类的构造器并实例化对象
package reflect;
import java.lang.reflect.Constructor;
public class ReflectDemo3 {
public static void main(String[] args) throws Exception {
Person p1 = new Person();
System.out.println(p1);
Person p2 = new Person("苍老师",55);
System.out.println(p2);
Class cls = Class.forName("reflect.Person");
Constructor c = cls.getConstructor();
Object obj = c.newInstance();
System.out.println(obj);
Constructor c1 = cls.getConstructor(String.class,int.class);
Object obj1 = c1.newInstance("苍老师",55);
System.out.println(obj1);
}
}
5.使用反射机制获取一个类对象并调用一个类中的方法
package reflect;
import java.lang.reflect.Method;
public class ReflectDemo4 {
public static void main(String[] args) throws Exception {
Person p = new Person();
p.sayHello();
Class cls = Class.forName("reflect.Person");
Object o = cls.getConstructor().newInstance();
Method m = cls.getMethod("sayHello");
m.invoke(o);
p.say("李四");
Method m2 = cls.getMethod("say", String.class);
m2.invoke(o,"李四");
p.say("李四",22);
Method m3 = cls.getMethod("say", String.class, int.class);
m3.invoke(o,"李四",22);
}
}