1. 程式人生 > >Java基礎 反射的基礎應用和Class筆記

Java基礎 反射的基礎應用和Class筆記

.get 文件 通過 etag 內存 import sta reflect nac

筆記:

/**直接 throws Exception,完美包含全部異常!
 * ---------------------------
 *   Class:
     *   首先創建一個類, 接著編譯程序: javac(exe) file.java,生成.class文件,
     *   之後執行程序: java(exe) file ,將此.class文件加載到內存中,就是一個運行時類,存在緩存區;
     *   每一個運行時類只能加載一次!
 *   ------------------------
 *   反射:
 *      有了反射,可以通過反射創建一個類的對象,並調用其中的結構:
 *         //0.聲明Person的class類
 *         //1.創建clazz對應的運行時類Person 類的對象//newInstance()表示新建一個對象
 *         // 2.通過反射調用運行時類的指定的屬性
 *              2.1調用公用屬性 getField()
 *              2.2調用任意屬性 getField(),setAccessible(true)設置可更改,然後再set()具體值
 *        //3.通過反射調用運行時類的指定方法:invoke(p,...)
 *        ---------------------
 *
 
*/

測試代碼:

import org.junit.Test;
import java.lang.reflect.*;
import java.lang.reflect.Method;

public class Test1 {
    @Test
    public void test3() throws Exception{
        Person p=new Person();
        Class clazz=p.getClass();   //通過運行時類的對象,調用其getClass()
        System.out.println(clazz);
    }

    
//有了反射,可以通過反射創建一個類的對象,並調用其中的結構 @Test public void test2() throws Exception { //0.聲明Person的class類 Class clazz = Person.class; //1.創建clazz對應的運行時類Person 類的對象 Person p = (Person) clazz.newInstance(); //newInstance()表示新建一個對象 System.out.println(p); //Person{age=0, name=‘null‘}
// 2.通過反射調用運行時類的指定的屬性 //2.1調用公用屬性 getField() Field f1 = clazz.getField("name"); f1.set(p, "LiuDeHua"); System.out.println(p); //Person{age=0, name=‘LiuDeHua‘} //2.2調用任意屬性 getField(),setAccessible(true)設置可更改,然後再set()具體值 Field f2 = clazz.getDeclaredField("age"); f2.setAccessible(true); f2.set(p, 2000); System.out.println(p); //Person{age=2000, name=‘LiuDeHua‘} //3.通過反射調用運行時類的指定方法:invoke(p,...) Method m1=clazz.getMethod("show"); m1.invoke(p); //空參數 Method m2=clazz.getMethod("display",String.class); m2.invoke(p,"CHINA"); //有參數參數 } @Test//在有反射以前,如何創建一個類的對象,並調用其中的方法/屬性 public void test1(){ Person p=new Person(); p.setAge(10); p.setName("TangWei"); System.out.println(p); p.show(); p.display("HK"); } } class Person extends Creature<String> implements Comparable,MyInterface { private int age; public String name; public Person() { } public void show(){ System.out.println(this.getClass().getName()+"我是一個人類!"); } public void display(String s){ System.out.print("我的國籍是:"+s); } public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name=‘" + name + ‘\‘‘ + ‘}‘; } @Override public int compareTo(Object o) { return 0; } }

輸出結果:

Person{age=10, name=‘TangWei‘}
任務222_反射.Person我是一個人類!
我的國籍是:HKPerson{age=0, name=‘null‘}
Person{age=0, name=‘LiuDeHua‘}
Person{age=2000, name=‘LiuDeHua‘}
任務222_反射.Person我是一個人類!
我的國籍是:CHINAclass 任務222_反射.Person

Java基礎 反射的基礎應用和Class筆記