本文小结
1 完成第一个JAVA 程序
2 对第一个程序细节了解
3 JAVA 程序执行的过程了解
前情回顾
小辉辉和博仔几个已经完成了JAVA环境的安装。也完成了测试。万事俱备只欠东风。
周鹏程:确实万事俱备只欠东风。都划水好几集了,说什么也该我出场了吧。今天说什么都要好好整理以下。毕竟预习不易,且行且凡尔赛。
叮咚,叮咚。
小舒:周鹏程,预习完了吧,敲出第一个代码了嘛,怎么做啊,我有点没弄清楚。
周鹏程:hahaha 机会来了。"第一个代码啊,很简单啊,来来来我告诉你,先不管三七二十一 ,直接干出一段代码来"
class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
小舒:代码是出来了,要怎么运行咧,运行出来又是个啥咧?
周鹏程:这个简单。上图👇
1 在桌面建立一个tex的文件夹。
小舒:我后面怎么没有.txt的后缀啊?
周鹏程:这个是为了防止用户不小心修改了这个后缀造成文件损坏而故意设计的。我们可以这样去打开。
打开后缀名
打开任意盘符。选中查看。这里就想到与选择了其中一个文件对查看这个属性进行修改。只要选择勾选上文件拓展名即可让后缀名显示了。
小舒:好的,我的打开了。接下来是个什么操作。
周鹏程:照着把刚刚那段东西打上去即可。如图👇
小舒:这也简单。接下来咧,不用停下来。
周鹏程:那我可要开始咯。
右键重命名。
接着无视即可。
进入cmd
小舒:等一下,等一下,为啥进入cmd?
周鹏程:cmd 可以调用命令啦,你可别忘记了JAVA的运行是需要经过两个步骤的。我们这里得到的是.java的文件。还需要把他们变成.class文件,.exe文件咧。
小舒:哦这样啊,你继续,
周鹏程:如下操作即可👇
这里已经到达了当前的.java位置。可以使用javac把.java文件编译成.class文件。因为上节已经讲到了,我们把环境变量进行了配置。
执行javac命令,如果当前文件没有,就会去环境变量去找对应的位置。因为已经完成了配置,所以这里可以进入bin中找到javac这条命令。
小舒:哦,上节课原来是这个原理啊。懂了,懂了。
然后执行如下即可。
javac HelloWorld.java 意思是javac(编译)HelloWorld.java(名字是HelloWorld.java的文件)
ps:这里可以用Tab键进行补充,还不错哦。真的超强。
最后一步:java HelloWorld 即可。
小舒:好的,我的第一个程序也跑起来了。但是我不知道为啥。可以帮我解释一下这个程序吧。
周鹏程:ok,那我一句一句给你解释吧。
1 class HelloWorld{
2 public static void main(String[] args){
3 System.out.println("hello world");
4 }
5 }
不知道你发现了没,这个代码是非常对称的。可以简化一下。
class HelloWorld{
}
这是最大的一个整体。里面包含了如下
public static void main(String[] args){
}
在这个里面又包含了
System.out.println("hello world");
小舒:哎呀,好像确实是这样的咧。有点意思哦。
周鹏程:okok,那我直接开始讲了哦。由这个可以得出,{}可以作为一个整体。里面可以包含东西,这个称之为代码块。
class 是JAVA的关键字,表示接下来的一部分是类。{}里面全部是类的内容。
其中紧跟着的是类名。这就很好理解了。
class HelloWorld{} 有一个名字叫HelloWorld的类。这里懂了吧。
小舒:这里懂了,对了,我发现这个文件名字好像也是这个,这个是巧合还是可以随便乱写?
周鹏程:这就很有觉悟咯。这是因为java的源文件命名规则。
java源文件的命名规则是这样的:如果源文件中有多个类,那么只能有一个类是public类;如有有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是.java;如果源文件没有public类,那么源文件只要和某个类的名字相同,并且扩展名是.java就可以了。
知道我为啥没有加public了吧。
小舒:确定不是忘记了?
周鹏程:算了那不重要。我们来做以下实验。
实验1 :验证文件名字和类名是否需要统一。(这里先不加public)
对照组1_1:编写类为HelloWorld,文件名字为HelloWorld的文件,看是否会报错。
对照组2_1: 编写类为HelloWorld,文件名字为HelloWorlds的文件,看是否会报错。
对照组1_1 :
对照实验1_2.
编译未出错;
运行的时候出错误。
实验一小结
对照组1 没用使用public,文件名字和类名一致。所以编译成功,运行成功。
对照组2 没有使用public,文件名字和类名不一致。编译成功,运行失败,原因是没有找到主类。
小舒:所以那个报错的原因是什么?
周鹏程:这个啊,因为main是程序的入口,系统根据文件名去找对应的类,因为我们对照组2让文件名和类名不一致了。所以这里是不存在和文件名同名的类且包含main方法的。对了,main是程序的入口。所以这个一定是不能变的。
小舒:这里的public 是什么意思,会对后面的执行有影响嘛。
周鹏程:有的,我们来看第二个实验。
对照组2_1:文件名 HelloWorld 类名HelloWorld 加public
对照组2_2:文件名字 HelloWorld 类名 HelloWorlds 加public
小舒:哇,居然这么神奇啊。看来这个public 还是很有用的嘛。这么说,一个文件里面是可以有多个类存在的是吧?
周鹏程:是的,来看下一个实验。
对照组3_1:当类名和文件名相同的时候。
出现了两个.class 文件。说明这个在编译的时候是有几个类就完成几个类的编译。
ok了,差不多了,可以把上述进行一个完整的小结了。
说白了,就是源文件的命名规则。记住以下几点即可。
1 如果源文件中有多个类,只能有一个类被public修饰。出现的错误为实验2_2。
被public 修饰的类必须放在同名文件夹中。就这就好了,你只有一个文件,就不要想放两个public 修饰的东西。
2 main方法是函数的入口。且不要对上面的东西做什么修改。至于原因,稍后马上呈上。
3 其实把我建议一个文件夹下面就写一个类,他不香嘛?
对了,这个是第一个文件出现的一些问题小结。
一个程序的执行到底经历了啥
想要了解一个程序的执行过程,我们需要去了解我们上节课的老朋友,JDK。
JDK 是由JRE和编译器等相关工具。
JRE由核心内库和JVM组成。
JVM 是java虚拟机,就是他把编译完成的字节码文件变成了可以执行的文件。java程序是跑在这个上面的。
所以简单点来说就是,我们写好了一个程序,调用javac命令会把JDK中的编译器触发完成.java到.class的编译。然后java 文件名完成.class文件的运行。这个是由JVM完成的。所以想要刨祖坟就是要了解JVM,不过我劝你简单了解一下就好了,耗子尾汁。
再拉回main函数。
JVM规定main函数作为程序的入口。并做了如下规定。
public static void main(String[] args){}
为啥这样规定咧?
由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。目前就此打住吧,后面聊到JVM的时候再进一步。不然我怕你放弃学习了。
小结
1 Hello world 的程序编写。
2 Hello World 程序常见错误。
3 main函数相关问题。