Java反射機制概述

反射機制

Java反射機制概述

靜態 VS 動態語言

靜態 VS 動態語言

Java Reflection

Java Reflection

Java 反射機制研究及應用

Java 反射機制研究及應用

Java反射優點和缺點

Java反射優點和缺點

反射相關的主要API

反射相關的主要API

理解Class類並獲取Class實例

理解Class類並獲取Class實例
理解Class類並獲取Class實例
理解Class類並獲取Class實例
理解Class類並獲取Class實例

練習代碼1

// 什麼叫反射
public class Test01 {
	public static void main(String[] args) throws ClassNotFoundException {
		// 通過反射獲取類的Class對象
		// 參數傳入包名和類名
		Class c1 = Class.forName("com.lwm.reflection.User");
		System.out.println(c1);
		
		Class c2 = Class.forName("com.lwm.reflection.User");
		Class c3 = Class.forName("com.lwm.reflection.User");
		Class c4 = Class.forName("com.lwm.reflection.User");
		
		// 查看創建的對象是否相等用 hashCode(如果hashCode一樣就說明是同一個類)
		// 一個類在內存中只有一個class對象
		// 一個類被加載後,類的整個結構都會被封裝在class對象中。
		System.out.println(c2.hashCode());
		System.out.println(c3.hashCode());
		System.out.println(c4.hashCode());
	}
}

// 實體類:pojo,entity來表示
class User{
	private String name;
	private int id;
	private int age;
	
	public User() {
		
	}
	
	public User(String name,int id,int age) {
		this.name = name;
		this.id = id;
		this.age = age;
	}

	// 爲什麼要get和set呢?
	// 因爲屬性是 private的,私有權限的
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", id=" + id + ", age=" + age + "]";
	}
	
}

練習代碼2

// 測試 Class類的創建方式有哪些
public class Test02 {
	public static void main(String[] args) throws ClassNotFoundException {
		Person person = new Student();
		System.out.println("這個人是:" + person.name);
		
		// 方式一:通過對象獲得
		Class c1 = person.getClass();
		System.out.println(c1.hashCode());
		// 都是同一個 Class (Student)
		// 方式二:forname 獲得
		Class c2 = Class.forName("com.lwm.reflection.Student");
		System.out.println(c2.hashCode());
		
		// 方式三:通過類名.class獲得
		Class c3 = Student.class;
		System.out.println(c3.hashCode());
		
		// 方式四:基本內置類型的包裝類都有一個Type屬性(作爲了解)
		// 這裏的對象就和上面的不一樣了,這裏是 Integer,上面是 Student
		// public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
		Class c4 = Integer.TYPE;
		System.out.println(c4);
		
		// 獲得父類類型
		// Student 的一個父類類型(通過獲得這個類,在通過這個類的Class對象去獲得其它屬性(例如:父類))
		Class c5 = c1.getSuperclass();
		System.out.println(c5);
	}

}

class Person{
	public String name;
	
	public Person() {
		
	}
	
	public Person(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + "]";
	}
}

class Student extends Person{
	public Student() {
		this.name = "學生";
	}
}

class Teacher extends Person{
	public Teacher() {
		this.name = "老師";
	}
}

視頻學習鏈接:https://www.bilibili.com/video/BV1p4411P7V3?p=5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章