使用当前类测试反射机制
package reflect;
public class Person{
private String name = "张三";
private int age = 20;
public Person(){}
public Person(String name,int age){
super();
this.name = name;
this.age = age;
}
public void sayHello(){
System.out.println(str+":"+str);
}
public void say(String str,int age){
System.out.println("大家好,我是"+str+",今年"+age+"岁");
}
@Override
public String toString(){
return "Person[name=" + name + ",age=" + age + "]";
}
private void dosome(){
System.out.println("Person:我是私有方法!!!")
}
}
package reflect;
import java.lang.reflect.Method;
public class ReflectDemo{
public static void main(String[] args){
Person p = new Person();
p.sayHello("大家好!");
p.say("张三",30);
Class cls = Class,forName("reflect.Person");
Object o = cls.newInstance();
Method m = cls.getMethod("sayHello",String.class);
m.invoke(o,"哈喽~~");
Method m1 = cls.getMethod("say",String.class);
m1.invoke(o,"李四",22);
}
}
Java反射机制
反射式一种动态机制,允许我们实例化对象、调用方法、操作属性从编码期间确定转移到程序运行期间确定。因此反射提高了程序的灵活性,但是随之带来的是更多的系统开销和较慢的运行效率。因此反射机制不能过度使用
package reflect;
import java.lang.reflect.Method;
import java.util.Scanner;
public class ReflectDemo1{
public static void main(String[] args){
Class cls = String.class;
Class cls1 = int.class
try{
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个类名:");
String className = scan.nextLine();
Class cls = Class.forName(className);
Method[] methods = cls.getDeclaredMethods();
for(Method method : methods){
System.out.println(method.getName);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
利用反射实例化操作
package reflect;
public class RedlectDemo2{
public static void main(String[] args){
Person p = new Person();
System.out.println(p);
Class cls = Class.forName("refiect.Person");
Object o = cls.newInstance();
System.out.println(o);
}
}
通过指定的构造器实例化对象
package reflect;
import java.lang.reflect.Constructor;
public class ReflectDemo3{
public static void main(String[] args) throws Exception{
Person p = new Person();
System.out.println(p);
Person p1 = new Person("李四",22);
System.out.println(p1);
Class<?> cls = Class.forName("reflect.Person");
Constructor<?> c = cls.getConstructor();
Object o = c.newInstance();
System.out.println(o);
Constructor<?> c2 = cls.getConstructor(String.class,int.class);
Object o 2 = c2.newInstance("小明",50);
System.out.println(o2);
}
}
使用反射机制调用方法
package reflect;
import java.lang.reflect.Method;
import java.util.Scanner;
public class ReflectDemo4{
public static void main(String[] args) throws Exception{
Person p = new Person();
p.sayHello();
Scanner scan = new Scanner(System.in);
System.out.println("请输入类名:");
String className = scan.nextLine();
System.out.println("请输入方法名:");
String methodName = scan.nextLine();
Class c = Class.forName(className);
m.invoke(o);
}
}
利用反射调用私有方法
package reflect;
import java.lang.reflect.Method;
public class ReflectDemo5{
public static void main(String[] args){
Person p = new Person();
Class cls = Class.forName("reflect.Person");
Object o = cls.newInstance();
Method m = cls.getDeclaredMethod("dosome");
m.setAccessible(true);
m.invoke(o);
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-5892.html