在Java中,newInstance()方法是Object類的一個protected方法,用于創建并返回該類的一個新實例。當我們調用一個類的newInstance()方法時,Java會遵循以下類加載機制:
如果類已經被加載到JVM中,那么直接返回該類的一個新實例。
如果類尚未被加載到JVM中,那么Java會按照以下順序進行類加載: a. 檢查該類是否已經被顯式地加載過,例如通過調用Class.forName()方法。如果已經加載過,則直接返回該類的一個新實例。 b. 如果類沒有被顯式地加載過,Java會嘗試從父類加載器(ClassLoader)中加載該類。如果父類加載器無法加載該類,那么當前類加載器會嘗試加載該類。 c. 如果父類加載器和當前類加載器都無法加載該類,那么會拋出ClassNotFoundException異常。
在類被加載后,Java會創建該類的一個新實例。newInstance()方法會調用類的無參構造函數(default constructor)來創建實例。如果類沒有無參構造函數,那么newInstance()方法會拋出InstantiationException異常。
最后,newInstance()方法返回該類的一個新實例。
需要注意的是,從Java 9開始,推薦使用Class.getDeclaredConstructor().newInstance()方法來創建類的實例,因為這種方法更加靈活,可以指定構造函數參數,而newInstance()方法只能調用無參構造函數。同時,newInstance()方法已經被標記為過時(deprecated),因為它存在一些安全問題。