Java基础22-反射reflect

    科技2026-08-15  10

    反射reflect

    Class实例Class实例取出属性、方法和父类反射调用方法 创建一个类Animal,创建一个实体类Person继承Animal

    class Animal { String dd; } package day12.reflect; public class Person extends Animal { String name; String age; public Person() { super(); // TODO Auto-generated constructor stub } public Person(String name, String age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public void hello() { System.out.println("你好"); } public void hi(String name) { System.out.println(name+",你好"); } }

    Class实例

    package day12.reflect; import java.util.ArrayList; public class Test { public static void main(String[] args) { // 所有类都是class实例 Person p = new Person(); Class c3 = p.getClass(); System.out.println(c3);// class day12.reflect.Person // 2对象 Class c4 = Person.class; System.out.println(c4);// class day12.reflect.Person // 3.给字符串 String类的class实例 try { // class实例 Class c = Class.forName("day12.reflect.Person");// class day12.reflect.Person Class c1 = Class.forName("java.util.ArrayList");// class java.util.ArrayList Class c2 = Class.forName("java.lang.String");// class java.lang.String System.out.println(c); System.out.println(c1); System.out.println(c2); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

    Class实例取出属性、方法和父类

    package day12.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import javax.swing.JFrame; public class Test2 { // 利用class实例取出属性和方法 public static void main(String[] args) { Class c = Person.class; Field sx[] = c.getDeclaredFields(); //得到属性 for (Field f : sx) { System.out.println(f); } /* * java.lang.String day12.reflect.Person.name java.lang.String * day12.reflect.Person.age */ Method sz[] = c.getDeclaredMethods();//得到方法 Method sz2[] = c.getMethods();//同时得到继承的方法 for (Method m : sz) { System.out.println("方法:"+m); } /* * 方法:public java.lang.String day12.reflect.Person.getName() 方法:public void * day12.reflect.Person.setName(java.lang.String) 方法:public void * day12.reflect.Person.hello() 方法:public void * day12.reflect.Person.setAge(java.lang.String) 方法:public java.lang.String * day12.reflect.Person.getAge() 方法:public void * day12.reflect.Person.hi(java.lang.String) */ Class p=c.getSuperclass();//查父类 System.out.println("父类:"+p);//父类:class day12.reflect.Animal Class c2=JFrame.class;//一阶一阶的查父类 while(true) { c2=c2.getSuperclass(); System.out.println(c2); if(c2==null) { break; } } /* * class java.awt.Frame class java.awt.Window class java.awt.Container class * java.awt.Component class java.lang.Object null */ } }

    反射调用方法

    package day12.reflect; import java.lang.reflect.Method; public class Test3 { public static void main(String[] args) { //不用反射,如何调用方法 Person a=new Person(); a.hello(); a.hi("Aimee"); //反射如何调用方法 1对象 2方法 3参数 Class c=Person.class; try { Object obj=c.newInstance();//对象 Method m=c.getDeclaredMethod("hello");//无参数方法 m.invoke(obj); Method m=c.getDeclaredMethod("hi", String.class);//有一个参数 m.invoke(obj, "Aimee"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
    Processed: 0.009, SQL: 9