定义一个类,必须会生成一个class文件吗?

oracleperl 2019-10-23 10:07:21
定义一个类,必须会生成一个class文件吗?
那要是我定义了1000个class,就生成1000个class文件?这么很麻烦吗?
我是否可以在我的一个java文件里,不管定义几个class,就只有一个class文件呢?
如下我定义了一个public类,我还想再定义一个类,但是不像额外生成一个.class文件,可以吗?谢谢
public class test
{
public static void main(String[] args) throws Exception
...全文
759 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloworddm 2019-12-02
  • 打赏
  • 举报
回复
java是解释编译语言.解释和编译的区别可参考:https://blog.csdn.net/helloworlddm/article/details/101853704
树成 2019-11-27
  • 打赏
  • 举报
回复
引用 16 楼 weixin_40599844 的回复:
对的,Java是解释性语言,实战跨平台,底层JVM只认识class文件,每个Java类,编译后都会产生一个class文件。所以Java基本都是做中大型项目的。
这我去,你自己都说它编译以后会产生一个class文件,还说他是解释性语言......
weixin_40599844 2019-11-25
  • 打赏
  • 举报
回复
对的,Java是解释性语言,实战跨平台,底层JVM只认识class文件,每个Java类,编译后都会产生一个class文件。所以Java基本都是做中大型项目的。
  • 举报
回复
@weixin_40599844 java不是半解释半编译语言吗?
活在梦里吗 2019-11-24
  • 打赏
  • 举报
回复
会得,匿名内部类也会生成class
jiawenhe123 2019-11-24
  • 打赏
  • 举报
回复
一个java类一般是会生成一个class文件,这个class文件就是字节码,这是Java平台中立和语言中立的基础。 不过在这个字节码文件(class文件)也可以使用运行时的技术动态生成在内存中。很多动态代理框架就是这样实现的。 任何的字节码文件(class文件还是内存中的字节码文件)都需要被类加载器加载才能运行。 你不用纠结生成的class文件的多少,因为可以使用*ar(jar等)进行压缩,而你只需管理一个压缩文件。
树成 2019-11-19
  • 打赏
  • 举报
回复
引用 3 楼 ml_dark 的回复:
[quote=引用 1 楼 LittleSton 的回复:] 对的,Java是解释性语言,实战跨平台,底层JVM只认识class文件,每个Java类,编译后都会产生一个class文件。所以Java基本都是做中大型项目的。
JAVA属于编译性高级语言,解释性语言是PHP,ASP这种[/quote] java是属于编译性语言没错,不过你说高级语言会误导别人,因为PHP和ASP也是高级语言...。
SZ深呼吸 2019-11-19
  • 打赏
  • 举报
回复
很多IDE工具,eclipse、idea都可以打包,打包的方式也很多,也可以配合用ant、maven这些工具打包 你要知道原理,你自己就可以打包,打成zip格式的压缩包,把后缀改成jar就行了,注意下路径结构。
oracleperl 2019-11-19
  • 打赏
  • 举报
回复
[quote=引用 6 楼 rumlee 的回复:] 1、不喜欢那么多class文件,你可以打包成jar文件进行发行 quote] 谢谢,请教下如何打包?然后import ?
nayi_224 2019-10-25
  • 打赏
  • 举报
回复
引用 9 楼 断桥忆 的回复:
[quote=引用 8 楼 nayi_224 的回复:] [quote=引用 7 楼 断桥忆 的回复:] 可以使用内部类,这样他编译的时候就会在一个.class文件中 public class Person{ class Student{ } }
并不会, 结果见4楼[/quote] 我知道,用反编译工具结果是这样,不过这样应该也算是一个.class文件吧[/quote] 不算。你电脑里编译出2个class文件,还需要别的解释?
断桥忆 2019-10-25
  • 打赏
  • 举报
回复
引用 8 楼 nayi_224 的回复:
[quote=引用 7 楼 断桥忆 的回复:] 可以使用内部类,这样他编译的时候就会在一个.class文件中 public class Person{ class Student{ } }
并不会, 结果见4楼[/quote] 我知道,用反编译工具结果是这样,不过这样应该也算是一个.class文件吧
nayi_224 2019-10-25
  • 打赏
  • 举报
回复
引用 7 楼 断桥忆 的回复:
可以使用内部类,这样他编译的时候就会在一个.class文件中 public class Person{ class Student{ } }
并不会, 结果见4楼
断桥忆 2019-10-25
  • 打赏
  • 举报
回复
可以使用内部类,这样他编译的时候就会在一个.class文件中 public class Person{ class Student{ } }
Hello姜先森 2019-10-24
  • 打赏
  • 举报
回复
真正要运行的就是class文件, 将其进行加载才能在虚拟机运行, 而且就算你在一个java文件里定义了很多个类, 编译之后你看看编译之后产生的文件就知道了
rumlee 2019-10-24
  • 打赏
  • 举报
回复
1、不喜欢那么多class文件,你可以打包成jar文件进行发行 2、不希望有class文件产生,你也可以使用cglib之类的动态产生class,不过这种一般都是用于动态代理,一般不会有人把程序逻辑放到这种里面去,自己给自己挖坑 3、当然你也可以自己去定义一个文件格式,然后动态调用编译,然后自己写类加载器,动态加载运行 4、你还可以自己改写一下jdk,不知道oracle招不招人……
ml_dark 2019-10-23
  • 打赏
  • 举报
回复
引用 1 楼 LittleSton 的回复:
对的,Java是解释性语言,实战跨平台,底层JVM只认识class文件,每个Java类,编译后都会产生一个class文件。所以Java基本都是做中大型项目的。
JAVA属于编译性高级语言,解释性语言是PHP,ASP这种
qq_39936465 2019-10-23
  • 打赏
  • 举报
回复
引用 楼主 oracleperl 的回复:
定义一个类,必须会生成一个class文件吗? 那要是我定义了1000个class,就生成1000个class文件?这么很麻烦吗? 我是否可以在我的一个java文件里,不管定义几个class,就只有一个class文件呢? 如下我定义了一个public类,我还想再定义一个类,但是不像额外生成一个.class文件,可以吗?谢谢 public class test { public static void main(String[] args) throws Exception
分离有分离的好处,可以增强耦合性,如果全放在一个class又很大你不是看了头都大了,更别说修改了。
Little石头 2019-10-23
  • 打赏
  • 举报
回复
对的,Java是解释性语言,实战跨平台,底层JVM只认识class文件,每个Java类,编译后都会产生一个class文件。所以Java基本都是做中大型项目的。
SerendipityN 2019-10-23
  • 打赏
  • 举报
回复
是不可以的,比如这样定义 class Outer{ class Inner; } 你再去你的bin目录里找,会发现,有Outer.class和Outer$Inner.class

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧