生活随笔
收集整理的這篇文章主要介紹了
反射_获取字节码Class对象的三种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
* 獲取Class對象的方式:
1. Class.forName("全類名"):將字節碼文件加載進內存,返回Class對象
?? ?* 多用于配置文件,將類名定義在配置文件中。讀取文件,加載類
2. 類名.class:通過類名的屬性class獲取
?? ?* 多用于參數的傳遞
3. 對象.getClass():getClass()方法在Object類中定義著。
?? ?* 多用于對象的獲取字節碼的方式
* 結論:
?? ?同一個字節碼文件(*.class)在一次程序運行過程中,只會被加載一次,不論通過哪一種方式獲取的Class對象都是同一個。
?
package cn.learn.domain;public class Person {private String name;private int age;public String a;protected String b;String c;private String d;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", a='" + a + '\'' +", b='" + b + '\'' +", c='" + c + '\'' +", d='" + d + '\'' +'}';}public void eat(){System.out.println("eat...");}public void eat(String food){System.out.println("eat..."+food);}
}
package cn.learn.domain;public class Student {}
package cn.learn.reflect;import cn.learn.domain.Person;
import cn.learn.domain.Student;public class ReflectDemo1 {/**獲取Class對象的方式:1. Class.forName("全類名"):將字節碼文件加載進內存,返回Class對象2. 類名.class:通過類名的屬性class獲取3. 對象.getClass():getClass()方法在Object類中定義著。*/public static void main(String[] args) throws Exception {//1.Class.forName("全類名")Class cls1 = Class.forName("cn.learn.domain.Person");System.out.println(cls1);//2.類名.classClass cls2 = Person.class;System.out.println(cls2);//3.對象.getClass()Person p = new Person();Class cls3 = p.getClass();System.out.println(cls3);//== 比較三個對象System.out.println(cls1 == cls2);//trueSystem.out.println(cls1 == cls3);//trueClass c = Student.class;System.out.println(c == cls1);}
}
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的反射_获取字节码Class对象的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。