第一个Java程序——HelloWorld!

一  前置知识

  1. DOS命令在哪里编写?——在DOS命令窗口中编写DOS命令。
  2. DOS命令窗口怎么打开?——开始菜单-->运行-->输入cmd-->回车【默认打开的是黑色的命令窗口,这就是DOS窗口】,如下图 (Win11系统下的DOS命令窗口)

  3. 作为程序员要求掌握最基本的Windows相关DOS命令,常见的DOS命令及操作有:

常见DOS命令

命令/操作含义具体操作步骤
dir显示当前目录下的文件和子目录列表

在命令提示符下输入"dir",然后按下回车键,即可显示当前目录下的文件和子目录列表。

cd改变当前目录

cd 要去的路径,路径分为绝对路径和相对路径

        绝对路径:表示该路径从某个磁盘的盘符下作为出发点的路径。如:cd C:\Users\Administrator\Desktop,其中 C:\Users\Administrator\Desktop就是一个绝对路径。

        相对路径:表示该路径从当前所在的路径下作为出发点的路径 。 如:假设当前所在的路径是C:\Users\Administrator,那么在此时输入cd Desktop,其中Desktop就是一个相对路径,从当前所在的C:\Users\Administrator这个路径下寻找Desktop目录。    

具体步骤: 

                在命令提示符下输入"cd 目录名",然后按下回车键,即可改变当前目录。

                在命令提示符下输入"cd ..",然后按下回车键,即可返回上一级。

          在命令提示符下输入"cd \",然后按下回车键,即可返回根目录。

盘符名:切换盘符 在命令提示符下输入"盘符名 :",然后按下回车键,即可切换到该目录。
copy复制文件在命令提示符下输入"copy 源文件 目标文件",然后按下回车键,即可复制文件。
复制复制DOS命令窗口中的文字在DOS命令窗口中选中想要复制的内容右键标记,标记的内容就已经到剪切板了,在需要粘贴的位置右键粘贴即可。
上下键切换编写的命令切换编写的DOS命令的历史记录在命令提示符下按键盘的上下键,即可快速输入上次输入过的的命令。
del删除文件在命令提示符下输入"del 文件名",然后按下回车键,即可删除文件。也可以删除多个文件,并且支持模糊匹配,如del  *abc,就是删除所有文件后缀带有abc的文件。假如有T1.ababc和T2.aabc,则这两个文件都会被删除。
md创建新目录在命令提示符下输入"md 目录名",然后按下回车键,即可创建新目录。
rd删除目录在命令提示符下输入"rd 目录名",然后按下回车键,即可删除目录。
ren重命名文件或目录在命令提示符下输入"ren 原文件名 新文件名",然后按下回车键,即可重命名文件或目录。
type显示文件内容在命令提示符下输入"type 文件名",然后按下回车键,即可显示文件内容。
cls清空屏幕在命令提示符下输入"cls",然后按下回车键,即可清空屏幕。
exit退出命令提示符在命令提示符下输入"exit",然后按下回车键,即可退出命令提示符。

 二  环境变量的配置

        如果没有配置环境变量,直接在DOS命令窗口下输入命令javac是不会有效的,会提示javac 不是内部或外部命令,也不是可运行的程序或批处理文件,如下图:

为什么ipconfig、ping等命令可以使用,而javac用不了?我们发现windos操作系统中有这样一个环境变量 path,并且发现path的值是C:\Windows\sysytem32; 在C:\Windows\sysytem32这个目录下存在:ipconfig.exe。如果我们将此路径删除掉,我们再测试ipconfig命令,也会出现ipconfig 不是内部或外部命令,也不是可运行的程序或批处理文件。 由此,我们可以知道只要在path变量中添加javac或其他需要执行的命令的路径,我们就能在DOS命令窗口中使用我们需要的命令了,当然我们也可以将命令重命名,比如将javac重命名为a或其他任何都是可以的,只不过没必要。

        此处两个注意点:

  • 只是我的电脑的ipconfig在这个目录下,具体情况具体分析。
  • 修改完环境变量后,DOS命令窗口要关闭重新打开才会起作用。                

接下来我们来看环境变量配置的具体步骤:

        桌面上找到我的电脑-->右键-->属性-->高级系统设置-->环境变量,找到path,鼠标双击,即可添加删除修改环境变量。path环境变量中都是路径,可以配置多个,路径和路径之间必须采用半角的分号分隔(即英文分号

有两种配置java环境变量的方式,如下:

  1. 一种是直接将javac的路径添加到path环境变量中,如将下载的JDK的bin目录的路径配置到path当中,如D:\Java\JDK21\bin。此处,将你下载的JDK的bin目录添加进去即可。如果你有多个版本的JDK,配置两个路径的话,谁放在前面谁生效。
  2. 另一种是采用引用的方式,先新建另一个环境变量,命名为JAVA_HOME8(名字可以随便起),将JDK的安装路径添加进去,如果你有多个版本的JDK,可以多新建几个JAVA_HOME,比如我这里有两个版本,所以我新建了JAVA_HOME8和JAVA_HOME21,当然两个版本不可能同时使用,所以我将我需要使用到的版本放在一个新的JAVA_HOME(这个环境变量是对于Java的JDK所属的环境变量)中,将需要使用的版本放在两个%%直接表示引用JAVA_HOME21环境变量中的值,这样我就可以随时切换JDK的版本,如果想使用其他版本的话就修改一下JAVA_HOME21为JAVA_HOME8,最后再将JAVA_HOME添加进Path中,并加上%%还有bin,此处百分号仍然为引用JAVA_HOME中的值,如下图:​​​​

        整个过程就是①path中的%JAVA_HOME%+②JAVA_HOME中的%JAVA_HOME21%+③JAVA_HOME21中的D:\Java\JDK21,最后拼上\bin,组成的最终路径和1.方式一样 D:\Java\JDK21\bin

配置好后,我们使用java -version命令,检查我们是否配置成功。另外输入java命令可以查看其他命令,此处就不作展示了。

 补充几个问题:

        问题1:path环境变量的作用是什么?

                答:path环境变量的作用就是给windows操作系统指路的,告诉windows操作系统去哪里找这个命令文件,path环境变量中有很多很多路径。如path=A;B;C;D,path是环境变量的名字,A;B;C;D...就是path环境变量的值。

        问题2:path环境变量是java中的机制,还是windows操作系统中的机制?

                答:path环境变量本质是隶书与windows操作系统的,和java没有关系,java配置环境变量只不过是用了一下path环境变量,方便在DOS命令窗口下操作。前面写到JAVA_HOME环境变量,是对于Java的JDK所属的环境变量,直接采用方式1.配置环境变量,不配置这个环境变量也不会影响HelloWorld程序的运行,但学习到JavaWeb的时候安装了Tomcat服务器,这个时候Java_HOME就必须要配置了。除了JAVA_HOME环境变量之外,JDK相关的环境变量还有其他的。

触类旁通,以后在安装其他软件(如以后开发需要用到的构建工具Maven等)之后,如果需要再DOS命令窗口中使用该软件的某个命令时候,出现“命令找不到的错误”,要想起来需要配置path环境变量

另外一个值得注意的是:环境变量包括“系统变量”和“用户变量”

  • 系统变量:范围比较大,系统变量会让计算机所有用户都起作用。
  • 用户变量:范围比较小,这个变量只作用于电脑当前登录的用户。                              

        如下图:


三  编写运行第一个Java程序

  1. 打开记事本,编写如下程序
    public class HelloWorld{
        public static void main(String[] args){
            System.out.println("Hello World");
        }
    }
  2. 保存到你想保存的路径,以HelloWorld.java命名该文件。此处我编写的程序保存在E盘。

  3. 打开DOS命令窗口,使用javac命令编译,语法格式是 javac java源文件(以.java结尾的文件)的路径 ,注意参考前置知识中的路径知识,包括绝对路径和相对路径。①你可以使用cd切换到你编写的java文件的路径;②还可以直接用文件资源管理器找到你编写的java文件,然后在文件资源管理器地址栏输入cmd,打开的DOS命令窗口就有该文件的路径了;③甚至可以找到文件后,将文件拖入DOS命令窗口,就有了该文件的绝对路径。下图是我将编写的文件拖入窗口后的效果,得到了该文件的绝对路径:接下来我们加上javac 命令后,重新拖入文件,并进行编译,生成了HelloWorld.class字节码文件,效果如下: 

  4. 使用java命令运行我们编写的程序,语法格式是 java 类名。 运行的前提是①你第三步编译成功生成了HelloWorld.class字节码文件,没有字节码文件程序是无法运行的;②并且要切换到HelloWorld.class字节码文件的路径。其中HelloWorld就是类名,如果生成的是A.class,那么A是类名。所以我们此处切换到E盘输入命令java HelloWorld 而不是java HelloWorld.class。注意区分编译和运行时,语法格式的不同,编译时javac命令后跟的是路径,运行时java命令后跟的是类名;编译时可以在任何路径下javac加绝对路径或通过cd切换到HelloWorld.java文件进行编译,但运行时java命令不能加路径,只能跟类名,这也就是②中所讲的,要先切换到HelloWorld.class字节码文件的路径,再使用java 类名,而不能java 加HelloWorld.class字节码文件的路径进行运行。 

          运行成功的效果: 

    我的HelloWorld.class在E盘,当前不是HelloWorld.class的路径,运行失败报错: 

  5. 我们来研究一下:输入java HelloWorld 后的执行过程及原理 (如果此处不理解可以去参考我的另一篇博客中的第八点 Java程序的加载与执行原理 https://blog.csdn.net/qq_61657653/article/details/136116277?spm=1001.2014.3001.5502

           第一步:会先启动JVM(java虚拟机)

           第二步:JVM启动之后,JVM会去启动类加载器(classloader)。类加载器的作用是加载类,本质上类加载器负责去硬盘上找类对应的字节码文件。假设是java HelloWorld,那么类加载器会去硬盘上搜索HelloWorld.class文件。假设是java Test,那么类加载器会去硬盘上搜索Test.class文件。

           第三步:类加载器如果在硬盘上找不到对应的字节码文件,会报错,报错就是上述4.中运行错误的效果。类加载器如果在硬盘上找到对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动解释器将字节码解释为”10101000...“这种二进制码,操作系统执行二进制码和硬件交互。

补充两个问题:

        问题1:默认情况下,类加载器去硬盘上找字节码文件的时候,从哪找?

                答:默认情况下,类加载器会从当前路径下找,这也是4.②中为什么要切换到当前路径的原因,只有切换到当前路径,类加载器才能找到class字节码文件,java程序才能成功被装载被运行。

        问题2:能不能给类加载器指定一个路径,让类加载器去指定路径下加载字节码文件?

                答:可以,我们需要设置一个环境变量,叫做classpath,classpath是一个给类加载器指路环境变量,classpath环境变量不属于windows操作系统,classpath环境变量是java特有的。classpath环境变量,变量名只能是classpath,但是大小写无所谓,以下方式都可以,ClassPath,Classpath,CLASSPATH。

注意:

        如果不配置classpath环境变量,默认从当前路径下加载,如果你配置classpath环境变量值为D:\ 那么类加载器就只能从指定路径下D盘中加载了。

        最后一个小知识点,如果你配置classpath环境变量值为.(英文),也是从当前路径下加载,其中.就代表当前路径。

        如果你想让类加载器从多个路径下找,和其他配置环境变量一样,多配置几个路径就行了,路径之间记得用;(英文分号)隔开

拓展(了解即可):

        在高版本的JDK当中(8以上),有一个新特性,可以直接一步到位运行java程序:java xxx.java。java后面直接加java源文件的路径,这个特性是为了简化开发提出的,但实际上底层的实现原理还是和以前一样的,以上命令在执行过程中,还是会先进行编译,然后再运行,并且以上运行方式编译生成的class文件在硬盘上不存在,看不到。


 四  编写过程中遇到的问题

  1.  主函数(main方法) 缺少String[] args参数
  2.  类名前面缺少class关键字

 输出语句打错,System写成Systerm


 五  对第一个程序HelloWorld的解释说明

  1.  如下图,我在源码中以注释的方式进行解释。

补充:

  1. 一个Java源文件中可以定义多个class,编译之后每个class都会生成对应的class字节码文件
  2. 但是不是每个class都可以用public去修饰,只有与源文件同名的class才能用public修饰,也就意味着一个源文件虽然可以定义多个class,但是public的类只能有一个,另外如果你用public修饰两遍与源文件名相同的class(即写两个相同的class),会报错提示重复。
  3. 每个类中都可以编写入口main方法,每个类的main方法都可以被执行,语法是 java 类名,但在实际开发中对于一个软件来说,一般入口只有1个。                                     

                

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值