首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.class文件和java.lang.Class

.class文件和java.lang.Class
EN

Stack Overflow用户
提问于 2009-11-20 04:01:01
回答 4查看 832关注 0票数 4

java.lang.Class与实际的.class文件相同吗?即内容是否等同?

我想通过套接字发送.class,并且想知道是否可以尝试查找和加载实际的.class文件,是否可以只发送java.lang.Class?

精化(如果您需要更多信息,请阅读)

假设我有一个名为SomeObj的Java类。在编译该文件时,将生成一个名为SomeObj.class的文件。

我们还知道,如果我将SomeObj作为类型,则可以通过以下操作获得它的java.lang.Class类型:

代码语言:javascript
复制
Class someObjClss = SomeObj.class;

我们知道java.lang.Class实现了可序列化,因此它可以被传输。

那么,java.lang.Class基本上是实际.class文件的对象表示吗?

更新:

假设我已经将.class文件传输到了另一个主机,那么我是否只是使用defineClass()方法来构造类呢?

链接这里

UPDATE2:

此代码确实返回空InputStream。那件事怎么可能?

代码语言:javascript
复制
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());
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-20 04:05:00

不是的。java.lang.Class是一个java类。它有自己的.class文件:-) 实例 of java.lang.Class用于表示对象的类,允许您对其执行某些操作(例如,使用反射API)。

序列化与.class文件一点关系都没有--序列化的是对象状态。如果您要序列化Class<MyObject>并将其通过线路发送给一个没有MyObject.class的JVM,那么它仍然不知道MyObject是什么。

为什么您需要手动发送.class通过连线开始?有远程类加载器来处理这个问题。

票数 5
EN

Stack Overflow用户

发布于 2009-11-20 04:34:04

java.lang.Class实例与相应的".class“文件相关,但它们绝不是等价的。

java.lang.Class实例对".class“文件的类型签名进行编码,但不多。因此,尽管可以序列化java.lang.Class,但这样做并不能为您提供足够的资源,以便在另一端实例化相应类的实例。如果您想这样做,您应该发送".class“文件。

票数 2
EN

Stack Overflow用户

发布于 2009-11-20 05:37:41

我认为OP试图识别类文件所在的类路径上的一个文件。请参阅http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1768256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档