0.實例準備ide
package com.blueStarWei.invoke; public class Student { private String name; public Student() { } public Student(String name) { super(); this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } @Override public String toString() { return "Student [name=" + name + "]"; } }
1. 什麼是反射this
反射是在運行時(非編譯時)動態獲取類型的信息(好比:接口信息、成員信息、方法信息等),而後根據這些獲取的信息建立對象、訪問修改爲員、調用方法。spa
2. 獲取Class類的方式(3種):代理
//方式一:Class.forName("包名.類名") Class stu1 = Class.forName("com.blueStarWei.invoke.Student"); //方式二:類名.class Class stu2 = Student.class; //方式三:實例.getClass() Class stu3 = new Student().getClass();
3. 建立實例對象code
Student student = (Student) stu.newInstance();
備註:1)該方法經過無參構造的方式建立實例對象
2)New一個對象的時候,類能夠沒有被加載;使用newInstance()方法的時候,必須保證這個類已經加載且已經鏈接【經過Class.forName()實現】。blog
Class clazz = Class.forName("com.blueStarWei.invoke.Student"); Student student1 = (Student) clazz.newInstance(); //等價於 Student student2 = new Student();
4. 反射的做用接口
4.1 判斷任意一個對象所屬的類;get
4.2 判斷任意一個類所具備的成員變量和方法;編譯
4.3 調用任意對象的方法;
4.4 構造任意一個類的對象;
4.5 生成動態代理操做。