Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的.class文件_Java_Reflection - Fatal编程技术网

java中的.class文件

java中的.class文件,java,reflection,Java,Reflection,有谁能在这个问题上指导我吗(记住这个问题是在Java反射上下文下的) 有一个名为“a”的java类,其内部类名为“B”。当我编译这个java文件时,它创建了两个版本的.class文件,一个名为“a.class”,“a$B.class”,如果“a”类有两个内部类,即B,C然后将创建3个版本“A.class”和“A$B.class”“A$C.class” 为什么会发生这种情况 如果我想读.class文件,那么当我给A.class时,我读的是什么.class文件b/c,那么它会要求A$b.class,

有谁能在这个问题上指导我吗(记住这个问题是在Java反射上下文下的)

有一个名为“a”的java类,其内部类名为“B”。当我编译这个java文件时,它创建了两个版本的.class文件,一个名为“a.class”“a$B.class”,如果“a”类有两个内部类,即B,C然后将创建3个版本“A.class”“A$B.class”“A$C.class”
为什么会发生这种情况

如果我想读.class文件,那么当我给A.class时,我读的是什么.class文件b/c,那么它会要求A$b.class,然后给 原因:java.lang.ClassNotFoundException:A$B.class

如果我们给了一个$B.class,那么它会给一个例外

java.lang.NoClassDefFoundError: 
java.lang.ClassNotFoundException


class A {
 String _name="Tom";
    class B{
        int _phoneNo=8384040;  
    }
}
有一个名为“a”的java类,其内部类名为“B”

所以你有两个类,你应该有两个类文件

如果“A”类有两个内部类,即B、C

您有三个类和三个类文件

如果我想读.class文件,那么当我给A.class时,我读的是什么.class文件b/c,那么它会要求一个$b.class

当您读取A.class文件时,您只是在读取一个文件。它不要求你做任何其他事情

并给出由以下原因引起的结果:java.lang.ClassNotFoundException:A$B.class

只有当这个类不在您的类路径中时,才会发生这种情况,这是一个完全不同且不相关的事情


这就是加载类的方式,但是创建这些类的实例。不需要读取底层类,甚至不需要知道它们在磁盘上的排列方式

 A a = new A(); // creates an instance of A
 A.B b = a.new A.B(); // creates an instance of A.B which is "inside" 'A a'.
有一个名为“a”的java类,其内部类名为“B”

所以你有两个类,你应该有两个类文件

如果“A”类有两个内部类,即B、C

您有三个类和三个类文件

如果我想读.class文件,那么当我给A.class时,我读的是什么.class文件b/c,那么它会要求一个$b.class

当您读取A.class文件时,您只是在读取一个文件。它不要求你做任何其他事情

并给出由以下原因引起的结果:java.lang.ClassNotFoundException:A$B.class

只有当这个类不在您的类路径中时,才会发生这种情况,这是一个完全不同且不相关的事情


这就是加载类的方式,但是创建这些类的实例。不需要读取底层类,甚至不需要知道它们在磁盘上的排列方式

 A a = new A(); // creates an instance of A
 A.B b = a.new A.B(); // creates an instance of A.B which is "inside" 'A a'.
“为什么这样做”的答案是每个类都有自己的类文件:甚至匿名类也被保存为名为“A$1”的单独类文件A@2”等等

Java中名为“A.B”的类总是存储在名为$B.class的文件中。如果出于某种原因需要查找类文件,那么应该在那里查找。但是在反射调用中,您仍然调用类“A.B”,而不是“A$B”。

对于“为什么这样做”的答案是每个类都有自己的类文件:即使是匿名类也会保存为名为“A$1”的单独类文件。”A@2”等等


Java中名为“A.B”的类总是存储在名为$B.class的文件中。如果出于某种原因需要查找类文件,那么应该在那里查找。但是在反思调用中,你仍然将类称为“A.B”,而不是“A$B”。

你所说的“当我给A.class时”是什么意思?您是如何读取类文件的?您的意思是在使用javac编译时将A.class指定为将其指定给命令行吗?我认为在Java中创建“类中的类”是一件坏事,为什么他们发明了“扩展”无论如何……这听起来像是一个类路径问题,与内部类或反射无关。你说的“当我给了一个.class”是什么意思?您是如何读取类文件的?您的意思是在使用javac编译时将A.class指定为将其指定给命令行吗?我认为在Java中创建“类中的类”是一件坏事,为什么他们发明了“扩展”无论如何,这听起来像是一个类路径问题,与内部类或反射无关。不,这不是你所理解的scnerio,请再看一次问题不,这不是你所理解的scnerio,请再看一次问题