Java 中的 Class.forName() 和 Class.forName().newInstance()

Muhammad Zeeshan 2023年10月12日
  1. Java 中的 Class.forName()
  2. Java 中的 Class.forName().newInstance()
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() 技術在下面的應用程式中進行了演示。

  1. Main 類中建立一個 Class 型別變數,名為 exampleclass,並將 Class.ForName 的引數設定為 ("java.lang.String")。
  2. 使用下面的程式碼行,你可能會看到 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 型別變數,名為 zx。此類通過將兩個提供的數字相乘來返回一個例項。

class MultiplyExample {
  int Multiply(int z, int x) {
    return (z * x);
  }
}

現在建立一個名為 mMultiplyExample 物件,然後應用 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.classnewInstance() 生成 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
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

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

相關文章 - Java Class