首先,大家都知道著名的主类Main,以及它的小弟main函数,还有System.out中拿来呐喊(指往控制台写字)的输出函数
但是,你有没有想过,什么是必要的,什么不是?
主类可以不叫Main
你可以颠三倒四改成喜欢的名字。但请注意,如果你的类名和类所在的文件名不一致,你会遇到一点小麻烦(其实如果javac可以限定输出的文件就好了,可惜我不知道)
主类可以没有public
是的,这不妨碍java加载其中的main函数!
main函数的参数名可以不叫args
是的,你也可以改成喜欢的名字。为什么它要叫args?难道不能叫xs么?
思考:给main的参数名改名,是基于什么原理?
更多:其实main函数还可以是继承自其他类的
class head{
public static void main(String[] ls){
System.out.println("head -hello");
}
}
class Main extends head{}
比如这样。关于这点应该是和继承有关,估计大家都知道。
总结:除了main函数(的类型以及一些限定)需要好好写以外,其他的不必理会
或许java可以修改启动时(该调用哪个函数)的行为?这我就不知道了
思考题答案:基于lambda演算中的α变换。变量命名不重要。也正因为如此,你才可以随便取名,然后后期一键重构。
———————
然而一上来就介绍类,介绍打印控制台其实有点新手不友好。
我们来点前期准备。
首先是函数。相必于数学上的函数,程序语言中的函数类似于打包好的一系列任务。
这一系列任务,首先需要点资源(也就是参数),当然它可能还会从其他地方索取资源(应该有节制地索取资源。你可以想象,当你面对乱做一团的一堆数据线时……)
经过一系列暗箱操作,这系列的任务最终会有些产出。
武德充沛的产出仅通过返回值提供,然而往往人们需要写一些不讲武德的产出。同索取资源一样,不讲武德往往喜欢向其他地方讲述系列任务的丰功伟绩——同样地,你需要限制这样的行为。
于是我们提问,有没有一种办法,可以很好地限制不讲武德,以及索取资源的行为?
答案当然是有的。
那就是通过类。
通过类,我们可以很好地限制上述两个行为(不讲武德和索取资源)。类当中同样有函数,当然还有变量。
类中的变量,很好地满足了这两者(不讲武德和索取资源)的需求——不过,与外部交互的输入输出除外。
(输入:比如让程序读取文件(包括网络上的,比如网页),或者接受用户输入;输出:比如生成文件,或者显示一段文字)
让我们回到系列任务——函数
人非圣贤,孰能无过。系列任务也是如此。难免其中会有些难以察觉的问题。
在此之前,介绍一下编译器。
编译器兢兢业业地负责把程序源代码转化为可执行的文件(不过java的需要jvm去运行)。
但是编译器这个老毕登有点怪脾气:
1、它会告诉你哪里不对,甚至有的给出了建议,但它就是不帮你改(我是觉得很奇怪啊,或许是不想破坏源码?)
2、有的编译器更会抱怨,有的不会(比如你可以轻松制造C语言的指针问题,但在(安全)Rust中几乎不可能)
我们无需关心老毕登,只需要知道,有些错误,编译器会提前告知我们。
剩下的,就是程序跑起来(运行时)才可能产生的错误了。
我们可爱的系列任务,正好可能犯一些运行时错误。
于是,你需要错误处理……(这里就不多提了)