Java学习中对于public类的一点探讨

 

目录

一、在一个源文件中,必须要有public类?

1.探索

2.总结

二、一个java源文件最多一个public类?

三、java应用程序必须要有主类?

四、Java中的应用程序主类比必须为public类?


一、在一个源文件中,必须要有public类?

1.探索

在一个源文件中必须有一个public,这个可就难到我了,我在做的时候确实是不知道,但是只需要把我上面的程序public删掉就能测试

  测试结果

我考虑到可能本身类的前后顺序造成影响,于是将其调换位置

两次均未出现报错,并且能够正常找出最大值。因此在一个源文件中可以没有public类。

  那么public到底是什么,它到底有什么用?目前我学到的位置(也许我进度有点慢)都没有讲到这个问题。但随着学习过程这个问题也会得到解决。search了一下:pubic是java访问权限饰词,另外还有protect,frendly,private三个访问权限饰词(公开,保护,友好,私人)。想起来上个学期在写c语言大作业时为了能让c语言主函数能够调用cpp源文件的函数,要在cpp的.h头文件里每个函数前加上extern(外部的),感觉似乎也是开放了权限,当然我仍然对此保持疑问。

回到题目,第三题的实践证明了可以不用public,这时文件名可以跟任意一个类名相同。而有public时必须得与public类保持一致。那么程序的开始执行的位置(或者说程序的主类)是不是由文件名决定的呢?还是说由main方法位置决定?

  我将第三题的源代码的文件名改为Max

报错了,在类Max没有找到主方法。这意味着文件名应该与含有主方法的类名保持一致(此处是错误的,我当时并不知道,后面会推翻)。注意到编译并不会报错,但解释运行会报错。

  这时新的问题出现了,我在网络上查询到的资料都说一个java源文件当有public类时文件名与public类保持一致,并且public类最多只能有一个。那么我将类Max改为public而类input则不加修饰词(网上说如果一个class的数据成员和方法都没有任何权限饰词,那么它的缺省访问权限就是friendly,这里input中有public修饰的main方法,那么类input是哪种访问权限呢?)

 结果加不加public都是一样的,那么网上的说法错误了吗?我将文件名改回input但仍然保持Max为public而input不加饰词。

  在编译时就报错了,类Max是public的,应该在名字叫做Max.java的文件中声明。

  说明网上的说法并没有错误。

  而都不加public时为什么不报错?是原本就无错误还是不加饰词时将其自动设为public访问权限呢?

  由于我不知道如何得知不加饰词时类的访问权限到底是哪一级,这个问题我暂时无法解答。

  当我们源文件有多个类时,我发现javac后就会有对应数目的class后缀文件(字节码文件)

  字节码文件的名字只与类名有关,在最前面两个类都无public时解释运行出错,会不会是我的操作错误呢?

  因为java解释器解释的是字节码文件而不是那个源文件,如果我打java input会不会就不报错呢?

  正确的

  如果文件名不为类名呢?

也一样没有出错,这就比较让人疑惑了,我在网上看到的都是说可以跟任意类名一致,其实是可以为任何名字

   我在类input前面加上public,文件名仍然为test.java。前面实际已经求证过了,这时是会报错的

2.总结

  一个源文件可以没有public类,当没有public类时,文件名可以跟任何一个类名保持一致,并无限制,可以随意命名。程序从主方法开始执行。不从主方法执行将会报错,说这个类没有主方法

  当源文件有public类时,那么这个public类只能有一个,并且文件名应该与public类名保持一致,并且必须该类可以不含有主方法。

  当有public类时,这个类中可以没有main方法,实例就是课本第一章的例子2(此处学习通的图片上传出现问题,我直接用图床的网址

<img src="https://pic.imgdb.cn/item/622beb745baa1a80ab4b1a5e.png">

  该程序是无任何问题的

<img src="https://pic.imgdb.cn/item/622bec965baa1a80ab4b81f5.png">

    二、一个java源文件最多一个public类?

  

两个public,javac报错:class Max应该在命名为Max.java的文件中声明,如果将名字改为这个可以想到class input就会报错

三、java应用程序必须要有主类?

  我在网上搜索了java主类是什么,但是看到了不同的答案,有说是主方法所在的类,有说是程序里定义了一个public class 里面有main函数或者程序执行的入口。第二个说法从上面我的测试中就能知道是错误的,一个java源文件可以没有public。

  那么第一种说法到底正不正确呢?首先我并没有找到主类的概念,无法从概念入手。但从字面理解,应该是最开始执行的类就像c语言里的主函数。

  既然这样,可以想到的是,我们在做一个有多个源文件的项目时,可以只有一个源文件有主类,其它的类都在该主类中调用。那么其它的源文件就没有主类。

四、Java中的应用程序主类比必须为public类?

在前面的实例中有很多主类不是public类的程序,比如都不是public类,以及课本例子2将主方法放到了class

A而不是public class people。因此第六题是错误的

  对于第五题,首先从第七题的代码入手,其刚好是一个没有main方法的程序

<img src="https://pic.imgdb.cn/item/622becdd5baa1a80ab4b9da2.png">

    程序在解释运行时会报错,class Dog内没有主方法。

  网上有这样的论述:

  任何一个Java Application应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extends Applet结尾。

应用程序的主类当源文件中只有一个类时不必用public修饰,但当有多于一个类时则主类必须用public修饰。小应用程序的主类在任何时候都需要用public来修饰。

原文链接:java程序是由什么组成的?一个程序中必须要有public类吗?java源文件的命名规则是怎样的?_java语言多选题 (3)..._我与我 周旋久的博客-CSDN博客

  实际上我在网上看到了很多关于主类必须用public来修饰的论断,可是我的测试则证明java应用程序的主类可以不是public类。

  实践测试只能证明错误而不能证明正确,第五题目前我没法证明其错误。也没法知道其是否正确。

  还有一点,一个java应用程序可以有多个主类,一个java源文件也可以有多个主类,一个类只能有一个main,但可以有多个含main的类。

​<img src="https://pic.imgdb.cn/item/622becef5baa1a80ab4ba52b.png">

  这个时候我们可以自己选择入口

  最后的答案是 2.错 3.错 4.对 5.不确定(书本的答案是错,我的求证没法证明其错) 6.错

  总结一下最后的结论:主类应该确实是含有main方法的类,当一个类中有main方法时其可以作为一个入口。(其实主类是什么并不重要,我们只需知道main方法可以作为一个java程序的入口)。主类可以不用public修饰,主类与文件名没有什么直接联系。一个java应用程序可以有多个主类,至于java应用程序是否一定要有主类,我还没有确定

public是访问权限饰词,主类与public没有必然联系,不一定要在主类前加上public。(也许之后做多个源文件的项目为了能够让JVM轻松访问主类,我们把它设定为public) main方法与public static void 绑定,这是一个语法规则。当一个源文件含有public类时,文件名必须与其保持一致。一个java源文件可以没有public修饰的类

main方法固定格式 public static void main,含有main方法的类我们就可以称为主类,其可以作为java应用程序的入口,我们java类名时必须java含有main方法的类。一个类只能有一个main方法,可以有多个类含main方法。文件名与类含不含main方法无关

文件名在文件含public修饰的类时需与其类名保持一致,不含public修饰的类时可以为任何名字(一般不推荐任意取名,原则上取任意一个类的名字,有主类取主类的名字)

  

  

猜你喜欢

转载自blog.csdn.net/m0_64198455/article/details/128444082
今日推荐