1.路徑處理 1.找模塊:sys.path import sys print(sys.path) - 1.理解 - 1.是python去查找包或模塊 - 2.項目開始根目錄,python內置的目錄 - 3.雖然說python的安裝目錄下也可以存放我們寫的模塊,但是不建議(太多了,不大好找) - 4. ...
轉自:
http://www.java265.com/JavaCourse/202206/3796.html
下文通過筆者的這篇文章,將帶你快速入門java反射,如下所示
java反射的概念
JAVA反射機制: 程式在運行時,可對任意一個實體類, 對任意一個對象 都可以調用其中的方法及屬性 我們將這種運行時,獲取其屬性的功能稱之為"java反射"
java反射的功效
1、運行時生成對象實例 2、運行期間調用方法 3、運行時更改屬性
Java反射的使用場景
1、在運行時判斷任意一個對象所屬的類 2、在運行時構造任意一個類的對象 3、在運行時判斷任意一個類所具有的方法和屬性 4、在運行時調用任意一個對象的方法 5、生成動態代理
Java反射涉及類
類名 | 用途 |
Class類 | 代表類的實體,在運行的Java應用程式中表示類和介面 |
Field類 | 代表類的成員變數(成員變數也稱為類的屬性) |
Method類 | 代表類的方法 |
Constructor類 | 代表類的構造方法 |
例:
User類 public class User { private String name; private int age; private User(String name, int age) { this.name = name; this.age = age; } public User(){ throw new IllegalAccessError("禁止無參構造方法"); } private String getName() { return name == null ? "" : name; } private void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TestClass{ public static void main(String[] args){ Class<?> clz = null; try { clz = Class.forName("User");//全路徑名 } catch (ClassNotFoundException e) { e.printStackTrace(); } // 找到帶有這個參數的構造方法 Constructor constructor = null; try { constructor = clz.getDeclaredConstructor(String.class, int.class); } catch (NoSuchMethodException e) { e.printStackTrace(); } constructor.setAccessible(true); // 初始化對象 Object user = null; try { user = constructor.newInstance("貓貓",20); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } System.out.println("--------------"+constructor.toString()); // 找到該私有方法 Method getName = null; try { getName = clz.getDeclaredMethod("getName"); } catch (NoSuchMethodException e) { e.printStackTrace(); } getName.setAccessible(true); String name = null; try { name = (String) getName.invoke(user); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } System.out.println("--------------"+name); // 找到私有屬性 Field age = null; try { age = clz.getDeclaredField("age"); } catch (NoSuchFieldException e) { e.printStackTrace(); } age.setAccessible(true); try { age.setInt(user16, 20); // 修改屬性 } catch (IllegalAccessException e) { e.printStackTrace(); } try { System.out.println("--------------"+age.get(user)); } catch (IllegalAccessException e) { e.printStackTrace(); } } }