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 ) ;
}
}