框架靈魂——反射

反射的自我介紹

*獲取class對象的方式java

 

package Demo;

public class Person {
        private String name;
        private int age;
        public  int a;
        public  int b;

        @Override
        public String toString() {
            return "Peroson{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", a=" + a +
                    ", b=" + b +
                    '}';
        }

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

        public int getA() {
            return a;
        }

        public void setA(int a) {
            this.a = a;
        }

        public int getB() {
            return b;
        }

        public void setB(int b) {
            this.b = b;
        }

    public Person(String name, int age, int a, int b) {
        this.name = name;
        this.age = age;
        this.a = a;
        this.b = b;
    }

    public Person() {
    }
}

  

import Demo.Person;

public class Main{
    public static void main(String[] args) throws Exception {
        //第一種方式 Class.forname("全類名");
        Class cls1 = Class.forName("Demo.Person");
        System.out.println(cls1);//class Demo.Person
        //第二種方式 類名.class
        Class cls2 = Person.class;
        System.out.println(cls2);//class Demo.Person
        //第三種方式 對象.getClass()

        Person p=new Person();
        Class cls3= p.getClass();
        System.out.println(cls3);//class Demo.Person
    }
}
 
*class對象的功能
 
1.0獲取成員變量
 
 
import Demo.Person;

import java.lang.reflect.Field;

public class Main{
    public static void main(String[] args) throws Exception {
        Class cls = Person.class;
        Field[] fields = cls.getFields();//Public 修飾的成員變量
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("---------------------");

        Field[] fields1 = cls.getDeclaredFields();//全部的成員變量
        for (Field field : fields1) {
            System.out.println(field);
        }
        Field age = cls.getDeclaredField("age");
        System.out.println(age);

        Person p=new Person();
        age.setAccessible(true);//暴力反射
        age.set(p,18);
        Object o = age.get(p);
        System.out.println(o);


    }
}

 

打印結果:ide

public int Demo.Person.a
public int Demo.Person.b
---------------------
private java.lang.String Demo.Person.name
private int Demo.Person.age
public int Demo.Person.a
public int Demo.Person.b
private int Demo.Person.age
18this

 

2.0 獲取構造方法spa

 

import Demo.Person;

import java.lang.reflect.Constructor;

public class Main{
    public static void main(String[] args) throws Exception {
        Class cls = Person.class;
        Constructor constructor = cls.getConstructor(String.class, int.class, int.class, int.class);
        Object v = constructor.newInstance("V", 25, 12, 30);
        System.out.println(v);
        System.out.println("空參構造方法");
        Constructor constructor1 = cls.getConstructor();
        Object o = constructor1.newInstance();
        System.out.println(o);
        Object o1 = cls.newInstance();
        System.out.println(o1);

    }

}

3.0 獲取成員方法3d

 

 

import Demo.Person;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Main{
    public static void main(String[] args) throws Exception {
        Class cls = Person.class;
        Method[] methods = cls.getMethods();//person類繼承了object類
        for (Method method : methods) {
            System.out.println(method);
            System.out.println(method.getName());
        }
        Method method = cls.getMethod("eat");
        Person person=new Person();
        method.invoke(person);

        Method method1 = cls.getMethod("eat",String.class);
        Person p=new Person();
        method1.invoke(p,"披薩");
    }

}

  

public java.lang.String Demo.Person.toString()
toString
public java.lang.String Demo.Person.getName()
getName
public void Demo.Person.setName(java.lang.String)
setName
public int Demo.Person.getAge()
getAge
public void Demo.Person.eat()
eat
public void Demo.Person.eat(java.lang.String)
eat
public void Demo.Person.setAge(int)
setAge
public void Demo.Person.setA(int)
setA
public int Demo.Person.getB()
getB
public int Demo.Person.getA()
getA
public void Demo.Person.setB(int)
setB
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
wait
public final void java.lang.Object.wait() throws java.lang.InterruptedException
wait
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
wait
public boolean java.lang.Object.equals(java.lang.Object)
equals
public native int java.lang.Object.hashCode()
hashCode
public final native java.lang.Class java.lang.Object.getClass()
getClass
public final native void java.lang.Object.notify()
notify
public final native void java.lang.Object.notifyAll()
notifyAll
吃什麼好呢?
那就吃披薩好了

  

 案例

 

 

配置文件:Demo01/src/pro.Properties對象

classname=Demo.Person
methodname=eat

  

package Demo;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class TestPractice {
    public static void main(String[] args) throws Exception{
        Properties pro=new Properties();
        //類加載器 獲取class目錄下的文件
        ClassLoader classLoader=TestPractice.class.getClassLoader();
        InputStream stream = classLoader.getResourceAsStream("pro.Properties");
        pro.load(stream);

        String classname = pro.getProperty("classname");
        String methodname = pro.getProperty("methodname");

        Class cls = Class.forName(classname);
        Object o = cls.newInstance();//空參構造方法

        Method method = cls.getMethod(methodname);//方法參數

        method.invoke(o);

    }


}

 

打印結果:blog

吃什麼好呢?繼承

相關文章
相關標籤/搜索