簡體   English   中英

Java:.class文件和java.lang.Class

[英]Java: .class file and java.lang.Class

java.lang.Class是否與實際的.class文件相同? 即內容是否等同?

我想通過套接字發送.class,並想知道如果我只是傳輸java.lang.Class而不是試圖找到並加載實際的.class文件?

精化 (如果您想了解更多信息,請閱讀)

假設我有一個名為SomeObj的Java類。 編譯此文件時,將生成名為SomeObj.class的文件。

我們也知道如果我將SomeObj作為一個類型,我們可以通過執行以下操作來獲取其java.lang.Class類型:

Class someObjClss = SomeObj.class;

我們知道java.lang.Class實現了Serializable,因此可以傳輸。

那么java.lang.Class基本上是實際.class文件的對象表示嗎?

更新:

假設我已將.class文件傳輸到另一台主機,我是否只使用defineClass()方法構建該類?

鏈接在這里

UPDATE2:

此代碼確實返回null InputStream。 怎么可能?

Class clazz = String.class;

String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
  String pathName = url.getPath(); System.out.println(className);
}

InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
  System.out.println(inputStream.available());
}

java.lang.Class是java類。 它有自己的.class文件:-) java.lang.Class一個實例用於表示對象的類,允許您對其執行某些操作(例如,使用反射API)。

序列化根本與.class文件無關 - 它是被序列化的對象狀態 如果您要序列化Class<MyObject>並通過線路將其發送到沒有MyObject.class的JVM,它仍然不知道MyObject是什么。

為什么你需要手動發送.class開頭? 有遠程類加載器來處理這個問題。

java.lang.Class實例與相應的“.class”文件相關,但它們並不等效。

java.lang.Class實例對“.class”文件的類型簽名進行編碼,但不是很多。 因此,盡管可以序列化java.lang.Class ,但這樣做並不足以允許在另一端實例化相應類的實例。 如果你想這樣做,你應該發送“.class”文件。

我認為OP正在嘗試在類路徑中識別存在類文件的文件。 http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM