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

开发工具

eclipse

在这里插入图片描述

一些需要注意的东西

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

在这里插入图片描述
注意看CLASS.java是在study/src下的,而src下可以看到还有study和MathinGame两个文件夹,这两个文件夹这就是“包”package

包的概念还不太理解,但是经过摸索发现一个有趣的事情
在这里插入图片描述

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

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

下图是文件路径展示:

在这里插入图片描述

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

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

在这里插入图片描述
speak呢,则是这样的
在这里插入图片描述
运行一下:
在这里插入图片描述
顺理成章的如愿以偿

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

不妨实验一下

在这里插入图片描述
没有问题,居然成功了

那么speak方法能不能不定义成public void speak,而定义成void speak呢?
在这里插入图片描述
居然也可以?那public还有什么意义?
我们试试一个类文件写两个类,看看会发生什么
在这里插入图片描述
我们假设public什么用处也没有,然后study这边让他调用完自己的System输出之后在调用print2的Speak2方法

在这里插入图片描述

可以看到已经报错

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

也就是说,这个print2类理论上是不能在study的main类调用的,不过可以经过print类间接地调用
在这里插入图片描述

记得把main类的speak2调用注释掉
在这里插入图片描述
结果如下

在这里插入图片描述
ok,猜想正确

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

同包研究完了,跨包呢?

现在假设study要调用MathinGame的add类帮忙算个2+3;
假设adds不是public方法,我们看看会怎么样
在这里插入图片描述

在这里插入图片描述
可以看到报错信息了
在这里插入图片描述
大致意思是adds方法“不可见”

在这里插入图片描述
方法加上public之后就可以在main方法调用了

在这里插入图片描述

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值