类如何存放在多文件并可以使用(2021-9-20)

开发工具

eclipse

类如何存放在多文件并可以使用(2021-9-20)

一些需要注意的东西

创建类的时候需要注意下创建路径,举个例子,如下图所示

类如何存放在多文件并可以使用(2021-9-20)
注意看CLASS.java是在study/src下的,而src下可以看到还有study和MathinGame两个文件夹,这两个文件夹这就是“包”package

包的概念还不太理解,但是经过摸索发现一个有趣的事情
类如何存放在多文件并可以使用(2021-9-20)

在src的study包内的java文件必须要带上package + 自身包名才能运行,但是目录直接在src下的java文件则不需要,如果只是写一份代码用来写作业交题目的话直接在new界面建class就行,不然带着包名提交代码一不小心把包名也带上程序在后台是运行不了的。

那么这些包之间怎么合作运行一段程序呢?再举个例子

下图是文件路径展示:

类如何存放在多文件并可以使用(2021-9-20)

我们可以看到study工程下src文件有一个MathinGame包和一个study包,MathinGame包下有一个add类,study包下有一个print类文件和一个study类文件

先研究study类内部的情况
现在study作为主类,要调用print类文件的speak方法,然后自己再以一个System.out.pringln()语句去打印些东西,那么首先就需要import一下print类文件

类如何存放在多文件并可以使用(2021-9-20)
speak呢,则是这样的
类如何存放在多文件并可以使用(2021-9-20)
运行一下:
类如何存放在多文件并可以使用(2021-9-20)
顺理成章的如愿以偿

那么有个问题,为什么print类的定义是public class print,直接定义成class print不行吗?

不妨实验一下

类如何存放在多文件并可以使用(2021-9-20)
没有问题,居然成功了

那么speak方法能不能不定义成public void speak,而定义成void speak呢?
类如何存放在多文件并可以使用(2021-9-20)
居然也可以?那public还有什么意义?
我们试试一个类文件写两个类,看看会发生什么
类如何存放在多文件并可以使用(2021-9-20)
我们假设public什么用处也没有,然后study这边让他调用完自己的System输出之后在调用print2的Speak2方法

类如何存放在多文件并可以使用(2021-9-20)

可以看到已经报错

实际上,java允许在一个java源文件中编写多个类。但其中的多个类最多只有一个类使用public修饰,如果源文件中有多个类。但没有public类,那么源文件的名字只要和某个类的名字相同。并且扩展名是java就行,如果一个类是public类,那么他的类名必须和源文件名称相同

也就是说,这个print2类理论上是不能在study的main类调用的,不过可以经过print类间接地调用
类如何存放在多文件并可以使用(2021-9-20)

记得把main类的speak2调用注释掉
类如何存放在多文件并可以使用(2021-9-20)
结果如下

类如何存放在多文件并可以使用(2021-9-20)
ok,猜想正确

得出结论:
1、main类想调用“同包源文件”需要import + 自身包名.调用文件名(但是在package下不是必须)
2、一个java源文件有且只有一个public类(除非这个源文件里啥也没有且不需要使用),如果没写明谁是public类,哪个类的类目与源文件名一致,哪个类就是public类,这个文件其他的类都是给 public类服务的

同包研究完了,跨包呢?

现在假设study要调用MathinGame的add类帮忙算个2+3;
假设adds不是public方法,我们看看会怎么样
类如何存放在多文件并可以使用(2021-9-20)

类如何存放在多文件并可以使用(2021-9-20)
可以看到报错信息了
类如何存放在多文件并可以使用(2021-9-20)
大致意思是adds方法“不可见”

类如何存放在多文件并可以使用(2021-9-20)
方法加上public之后就可以在main方法调用了

类如何存放在多文件并可以使用(2021-9-20)

总结下public的用法
1、用在类名是表示当前文件的“主心骨类”,表示整个文件的类是在public类的管理下的。
2、用在方法名是表示这个方法能否被其他包使用

上一篇:Python Study


下一篇:RPC服务治理框架(一)RPC技术