Java基础 Hello World

Java 源程序
也称源代码,是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。

在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。

Hello World
首先,来看下使用 Java 语言编写 HelloWorld 源程序的全貌:

 

在这段源程序的代码虽然非常少,但是我们能从中得到如下信息:

1.public 修饰符用于限定类或类成员的访问级别
2.class 关键字用于定义类,该类的标识符 是 HelloWorld
3.类标识符的命名一般采用 帕斯卡命名法
4.HelloWorld 类被 public 修饰,应在名为 HelloWorld.java 的文件中声明
5.类标识符后紧跟一对大括号,类成员一般定义在这对大括号中,例如实例成员或者静态成员
6。static 关键字用于声明静态成员,这里定义的是一个静态函数,标识符是 main
7.函数标识符的命名一般采用 驼峰命令法
8.void 关键字用于定义无返回值的函数
9.main 函数是 Java 程序的主入口函数
10.函数标识符后紧跟一对小括号,形式参数一般定义在这对小括号中,这些形式参数在程序运行11.时可用于接受来自外部传入的实际参数
12.String 关键字用于定义字符串类型的变量
13.String[] 用于定义字符串类型的数组,该数组的标识符是 args
14.该源程序中的 main 函数的函数签名是:public static void main(String[] args)
15.在函数签名后紧跟一堆大括号,代码块一般定义在这对大括号中,大括号(包括大括号本身)16.内的所有代码的集合被称之为函数体
17.一个完整的函数成员是由函数签名和函数体组成
18.System 是来自 java.lang 包下的一个类
19.out 是 System 类中的一个静态成员,它是 java.io 包下 PrintStream 类的实例
20.println 是 out 提供的一个实例成员,而且是函数成员
21.访问静态成员的语法是 类名.成员名,访问实例成员的语法是 实例名.成员名
22.在代码中调用一个函数时需要在该函数名后跟一对小括号,如果该函数需要传递参数,则将对23.应的实际参数按类型和顺序写到小括号中,并使用英文逗号隔开即可
24.定义字符串的字面量是直接将字符串写在双引号中,例如 "Hello World!"
25.分号代表一行或者一段代码的结束

编译 && 执行程序

在源程序所在目录下执行如下命令可对当前编写的源程序进行编译

javac HelloWorld.java

在编译结束后,会产生一个 .class 文件,这就是《搭建本地软件开发环境 》中提到的字节码文件,使用如下命令可将该字节码文件通过 JVM 解释给计算机并执行。

java HelloWorld

在 DOS 中,我们可以使用 && 将多个命令写到一条指令中,使其按顺序执行,关于这个我在《常用DOS命令 》一文中有提及。

cls && javac HelloWorld.java && java HelloWorld

当我们修改源程序中的字面量后,重新执行上述指令,会发现命令行打印了新的字面量信息。但如果字面量中包含中文的话,例如 "您好,世界!",就会乱七八糟的文字,这是因为 javac 指令在编译源程序的时候,默认的字符集不支持中文,我们需要为其指定支持中文的字符集,一般情况下,我们选择UTF-8字符集,修改编译指令如下:
javac -encoding UTF8 HelloWorld.java

拓展 HelloWorld
我们使用 java 指令执行 java 程序的时候,我们采用的指令是:java HelloWorld,我们在第二章节中搭建开发环境的时候说到过我们需要通过配置环境变量使得 java 指令能够在命令行中全局可用。这里的 java 指令实际上就是存在于 Window 操作系统磁盘上一个可执行的程序,也就是 JDK 中 bin 目录下的 java.exe,如图所示:

到这里我们知道了,之前修改系统环境变量 Path 的值,将该目录加入其中的目的是为了系统能找到这个指令。这个道理就跟我们在某个目录下找到一个可执行程序,双击启动该程序的道理一样。

在指令 java HelloWorld 中,java 程序是系统来执行的,而 HelloWorld 则是系统在执行java 程序的时候我们传递给这个程序的参数。这就好比在第一章提到的 CD 指令一样,当我们给 CD 指令传递参数是 .. 的时候,系统在执行CD这个程序后,会将当前目录切换到上级目录;当我们给 CD 指令传递参数是 / 的时候,系统在执行CD这个程序后,会将当前目录切换到根目录 。话说回来,我们给 java 指令传递的参数是 HelloWorld,那 java 这个程序在执行过程中,会在当前目录和环境变量指定的 CLASSPATH 目录下查找 HelloWorld.class 文件,如果找到了该字节码文件,则通过 JVM 来解释并执行,如果依然找不到这个源程序,则会提示 错误: 找不到或无法加载主类 HelloWorld 。

注:关于 CLASSPATH 的详细说明请参考文末的 PATH 和 CLASSPATH 段落。

关于 JVM,百度百科上的描述是 —— 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。那这个虚构的计算机在解释并执行 java 字节码的时候,能像 DOS 那样传递参数吗?
 

 

注:此图截自 2020年二月,仅作参考,因为百科上的内容可被编辑,故而,若您看到的说明不是此图上的内容,请以官方的为准。

DOS 在执行一个程序的时候,将程序名后面的文本看作是参数,那么,我们把 JVM 也看作是一个计算机操作系统的话,那大致可以这样理解:

 

换句话说,站在 DOS 的角度,传递了 HelloWorld 和 Hello 两个参数;而在 JVM 的角度,传递了Hello这一个参数。那既然我们传递了参数给 HelloWorld 程序,那 HelloWorld 程序如何接收到该参数,并作出相应的处理呢?

在上文中,我们看到 main 函数的形式参数 args 貌似都没有什么用处,实际上他就是为了接收外部传递的参数而存在的,关于形式参数的用法将会在后面分享函数的章节中详细为大家介绍。修改 HelloWorld.java 的代码如下:

 

 然后我们在 DOS 终端中输入如下指令:

 得到的结果如下图所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值