java基础知识2-编译单元


1:java编译单元

.java文件是一个编译单元,每个编译单元顶多只有一个public标记的类,被public标记的类名字必须和文件的名字相同(包含大小写形式,但排除文件扩展名.java)当然一个.java文件可以包含许多其它类,但是其它类都是为这个public类起支撑作用的,他们都不能是public的。当.java文件中没有public标记的类时,这个类不能被外部访问,也就没意义了。

2:java编译

可以利用javac  xx.java对java编译单元进行编译,可以发现一个.java文件中有几个类,就会变成产生几个.class文件,这个和C++中一个编译单元产生一个.object文件是不一样的。需要注意的是如果在一个包中包含两个java文件,如A.java,B.java,如果两个java文件中都包含一个相同名字的类如Test。那么这两个java文件编译后,只能产生一个Test.class,当然是谁后编译,这个Test.class就属于谁的。一个有效的程序就是一系列的class文件,他们可以封装和 压缩到一个jar文件。

3:package

package  其实就是想当于一个namespace,为了避免命名冲突,可以用package将许多.java文件以及编译产生后的许多.class文件给包起来。当你建立一个package时候。会自动产生一个同名的文件夹。例如,我们创建一个ddxxpackage时候,会自动的创建一个ddxxpackage的文件夹,当我们在一个java文件中的第一个非注释语句写

package ddxxpackage;时,我们的java文件就处于这个ddxxpackage文件夹里面。说道本质就是利用操作系统的文件路径的相互独立性来避免命名冲突。

4:自动编译

当在程序中利用导入包中的类来产生一个类对象的时候,编译器会寻找同名的.class文件,如果就这一个.class文件,那么就利用这一个class来创建对象,如果还有一个同名的.java文件,那么会比较诸如xx.class 和xx.java两个文件的时间先后, 如果xx.java比较新,那么就会自动编译xx.java产生新的xx.class来产生对象。

5:在同一个package中注意的问题

同一个包中不同的java编译单元中不能包含相同的类名,即便是friend的类也不行,因为这样在编译的时候会产生类已经定义的错误告示。如A.java包含test class,B.java包含test.class那么编译时候就会出现 the type test isalready defined。

6:访问权限

声明为public的类可以在包外被访问,但是默认的类只能宅包内被访问,类中的成员也是这样,声明为public的成员可以被随便的访问如果类也是public 的话,那么该成员也可以被访问,但是类是public,成员是default的话,就不能被包外访问。

7:包和目录

其实一个包就相当于一个目录,一个个类包括public,default类都会编译成这个包下的class文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值