1. 程式人生 > 其它 >JavaSE-24.2.1【反射、獲取Class類物件的三種方式】

JavaSE-24.2.1【反射、獲取Class類物件的三種方式】

 1 package day15.lesson2;
 2 
 3 /*
 4 2 反射
 5 
 6 2.1 反射概述
 7     是指在執行時去獲取一個類的變數和方法資訊。然後通過獲取到的資訊來建立物件,呼叫方法的一種機制。
 8     由於這種動態性,可以極大的增強程式的靈活性,程式不用在編譯期就完成確定,在執行期仍然可以擴充套件。
 9 10 
11 2.2 獲取Class類物件的三種方式
12 
13     要想通過反射使用一個類,首先要獲取到該類的位元組碼物件檔案,即型別為Class型別的物件
14 
15     (1)類名.class屬性
16         使用類的class屬性來獲取該類對應的Class物件。例如:Student.class返回Student類對應的Class物件
17 (2)物件名.getClass()方法 18 呼叫物件的getClass()方法,返回該物件所屬類對應的Class物件 19 該方法是Object類中的方法,所有java物件都可以呼叫該方法 20 (3)Class.forName(全類名)方法 21 使用Class類中的靜態方法forName(String className) 22 該方法需要傳入字串引數,該字串的值為某類的全路徑,即包含完整包名的路徑 23 24 */ 25 public class Demo1Reflect { 26 public
static void main(String[] args) throws ClassNotFoundException { 27 Class<Student> c1 = Student.class; 28 System.out.println(c1); //class day15.lesson2.Student 29 Class<Student> c2 = Student.class; 30 System.out.println(c2); //class day15.lesson2.Student 31 System.out.println(c1 == c2); //
true 32 33 System.out.println(); 34 35 Student s = new Student(); 36 Class<? extends Student> c3 = s.getClass(); 37 System.out.println(c3); //class day15.lesson2.Student 38 System.out.println(c1 == c3); //true 39 40 System.out.println(); 41 42 Class<?> c4 = Class.forName("day15.lesson2.Student"); //丟擲異常ClassNotFoundException 43 System.out.println(c4); //class day15.lesson2.Student 44 System.out.println(c1 == c4); //true 45 } 46 } 47 48 class Student{ 49 //成員變數 50 private String name; //私有 51 int age; //預設 52 public String address; //公共 53 54 //構造方法 55 public Student() { //公共 56 } 57 58 public Student(String name, int age, String address) { //公共 59 this.name = name; 60 this.age = age; 61 this.address = address; 62 } 63 64 private Student(String name){ //私有 65 this.name = name; 66 } 67 68 Student(String name, int age){ //預設 69 this.name = name; 70 this.age = age; 71 } 72 73 //成員方法 74 private void function(){ //私有 75 System.out.println("function"); 76 } 77 78 public void method1(){ //公共 79 System.out.println("method"); 80 } 81 82 public void method2(String s){ //公共 83 System.out.println("method:" + s); 84 } 85 86 public String method3(String s, int i){ //公共 87 return s + "," + i; 88 } 89 90 @Override 91 public String toString() { //公共 92 return "Student{" + 93 "name='" + name + '\'' + 94 ", age=" + age + 95 ", address='" + address + '\'' + 96 '}'; 97 } 98 }