Java 中的 Class.forName() 和 Class.forName().newInstance()
本文將解釋 Java 中的 Class.forName() 和 Class.forName().newInstance() 之間的區別。
Java 中的 Class.forName()
Class.forName() 返回所提供名稱的類的型別。它將返回對類的引用並載入所有可訪問的靜態塊,而不是例項方法。
java.lang.Class 類的 forName() 函式用於檢索具有提供的類名的此類的例項。類名作為 string 引數提供。
如果找不到該類,則丟擲 ClassNotFoundException。
語法:
public static Class<S> forName(String suppliedclass) throws ClassNotFoundException
例子:
forName() 技術在下面的應用程式中進行了演示。
- 在
Main類中建立一個Class型別變數,名為exampleclass,並將Class.ForName的引數設定為 ("java.lang.String")。 - 使用下面的程式碼行,你可能會看到
Class的名稱。
System.out.print(" The Example Class represents a class named : " + exampleclass.toString());
原始碼:
public class ForNameExample {
public static void main(String[] args) throws ClassNotFoundException {
Class exampleclass = Class.forName("java.lang.String");
System.out.print("The Example Class represents a class named : " + exampleclass.toString());
}
}
輸出:
The Example Class represents a class named : class java.lang.String
Java 中的 Class.forName().newInstance()
newInstance() 返回類的例項。然後這將返回該類的一個物件,我們可以使用它來呼叫例項方法。
java.lang 包中的 Class 類的 forName() 方法返回引數的 Class 物件,然後由類載入器載入。類的 newInstance() 函式然後返回一個新例項。
每當你希望載入類、執行其靜態塊並訪問其非靜態部分時,你都需要一個例項,這將需要以下內容。
語法:
Class.forName("class").newInstance();
例子:
建立一個名為 MultiplyExample 的類並初始化兩個 integer 型別變數,名為 z 和 x。此類通過將兩個提供的數字相乘來返回一個例項。
class MultiplyExample {
int Multiply(int z, int x) {
return (z * x);
}
}
現在建立一個名為 m 的 MultiplyExample 物件,然後應用 Class.forName().newInstance()。
MultiplyExample m = (MultiplyExample) Class.forName("MultiplyExample").newInstance();
最後,使用傳遞給 Multiply 函式的物件顯示結果。
System.out.println("After Multiply result is " + m.Multiply(7, 5));
在這種情況下,Class.forName("MultiplyExample") 生成 MultiplyExample.class,newInstance() 生成 Multiply 類例項。簡而言之,它與執行 new MultiplyExample() 相同。
原始碼:
class MultiplyExample {
int Multiply(int z, int x) {
return (z * x);
}
}
class Main
{
public static void main(String args[]) throws Exception
{
MultiplyExample m = (MultiplyExample)Class.forName("MultiplyExample").newInstance();
System.out.println("After Multiply result is "+ m.Multiply(7, 5));
}
}
輸出:
After Multiply result is 35
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn