Java 基础 —— Hello World
“Hello, world"程序是指在计算机屏幕上输出“Hello, world”这行字符串的计算机程序,“hello, world”的中文意思是“你好,世界。”。因为《The C Programming Language》中使用它做为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这一习惯。
文章目录
- Java 源程序
- Hello World
- 编译 && 执行程序
- 拓展 HelloWorld
- PATH 和 CLASSPATH
Java 源程序
也称源代码,是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。
在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
Hello World
首先,来看下使用 Java 语言编写 HelloWorld 源程序的全貌:
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}}
在这段源程序的代码虽然非常少,但是我们能从中得到如下信息:
- public 修饰符用于限定类或类成员的访问级别
- class 关键字用于定义类,该类的标识符 是 HelloWorld
- 类标识符的命名一般采用 帕斯卡命名法
- HelloWorld 类被 public 修饰,应在名为 HelloWorld.java 的文件中声明
- 类标识符后紧跟一对大括号,类成员一般定义在这对大括号中,例如实例成员或者静态成员
- static 关键字用于声明静态成员,这里定义的是一个静态函数,标识符是 main
- 函数标识符的命名一般采用 驼峰命令法
- void 关键字用于定义无返回值的函数
- main 函数是 Java 程序的主入口函数
- 函数标识符后紧跟一对小括号,形式参数一般定义在这对小括号中,这些形式参数在程序运行时可用于接受来自外部传入的实际参数
- String 关键字用于定义字符串类型的变量
- String[] 用于定义字符串类型的数组,该数组的标识符是 args
- 该源程序中的 main 函数的函数签名是:
public static void main(String[] args)
- 在函数签名后紧跟一堆大括号,代码块一般定义在这对大括号中,大括号(包括大括号本身)内的所有代码的集合被称之为函数体
- 一个完整的函数成员是由函数签名和函数体组成
- System 是来自 java.lang 包下的一个类
- out 是 System 类中的一个静态成员,它是 java.io 包下 PrintStream 类的实例
- println 是 out 提供的一个实例成员,而且是函数成员
- 访问静态成员的语法是
类名.成员名
,访问实例成员的语法是实例名.成员名
- 在代码中调用一个函数时需要在该函数名后跟一对小括号,如果该函数需要传递参数,则将对应的实际参数按类型和顺序写到小括号中,并使用英文逗号隔开即可
- 定义字符串的字面量是直接将字符串写在双引号中,例如
"Hello World!"
- 分号代表一行或者一段代码的结束
作为初学者,对以上叙述的内容有部分可能不太理解,但不用着急,随着学习的深入,这些都会慢慢地被理解,我也会在后面的文章中详细阐述。
您在这段源程序中看到了哪些信息呢?在评论区留言给我吧!
编译 && 执行程序
在源程序所在目录下执行如下命令可对当前编写的源程序进行编译
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 的代码如下:
public class HelloWorld {public static void main(String[] args) {System.out.println("您好,世界!");if(args == null || args.length < 1) {return;}for(int i = 0; i < args.length; i++) {System.out.println("得到第" + (i + 1) + "个形参的值:" + args[i]);}}}
然后我们在 DOS 终端中输入如下指令:
cls && javac -encoding UTF8 HelloWorld.java && java HelloWorld Hello World
得到的结果如下图所示:
在修改之后的源程序中,用到了后面章节才有的条件语句,循环结构等,如果初学者看不懂这部分,仅作了解即可。
PATH 和 CLASSPATH
PATH 是一个系统全局变量,其值表示的是该操作系统中可执行文件的搜索路径。使得在 DOS 中执行某个命令的时候不需要自己手动查找该命令所在的磁盘的具体位置。其值具体格式是:
<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
在上一个章节中,在 PATH 变量的值的后面增加了 %JAVA_HOME%\bin
,其目的是为了在 DOS 中执行 java 指令的时候,让系统能够到我们安装的 JDK 目录下进行查找。
所以,PATH 是 Windows 操作系统中可执行文件的搜索路径集合。
同理,CLASSPATH 是 JVM 可被解释并执行的字节码文件的搜索路径集合。
所以,当我们在 CLASSPATH 中配置了 HelloWorld 程序所在目录后,达到的效果是:即便 DOS 终端驻留的目录不是 HelloWorld 程序所在目录,也能通过 java HelloWorld
成功执行该程序。
JDK的内置库中包含了一些工具包,在 dt.jar 和 tools.jar 中,推荐的 CLASSPATH 配置是:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
Java 基础 —— Hello World相关推荐
- Java基础入门语法和安装
1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...
- Java笔记整理-02.Java基础语法
1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- Java基础概念性的知识总结
属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...
- 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...
- 叮!您收到一份超值Java基础入门资料!
摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...
- java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理
原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
- [Spring 深度解析]第1章 Java基础
第1章 ◄Java基础► 在学习Spring之前我们需要对Java基础语法有一定的了解,Java中最重要的两个知识点是注解和反射.注解和反射在Spring框架中应用的最广泛.掌握注解和反射,有助于后面 ...
- 清华学长免费分享Java基础核心知识大总结(1)
自学Java,如果觉得看<Java编程思想>或者<Core Java>等之类的"圣经"觉得内容太多,一下子吃不透的话,不妨看看这本<Java基础核心总 ...
最新文章
- mysql 使用正则表达式查询
- Android之图片边显示模糊原因
- 047 一维数据的格式化和处理
- Docker 安装 Tomcat
- 关于python_关于Python,你必须知道的事!
- Sixpack —— 支持多语言的 A/B 测试框架
- python直方图规定化_数字图像处理-空间域处理-直方图规定化
- FPGA——按键消抖
- 计算机软件文档编制规范百度云,计算机软件文档编制规范
- 图片轮播插件slideBox
- 微信登录优化方案设计
- R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建多元线性回归模型、使用lmp函数生成置换检验多元线性回归模型
- Java经典代码工具类
- Spring Boot使用websocket实现聊天室
- 7.熟练掌握ES Java API基于upsert实现汽车最新价格的调整
- c语言中一维数组和二维数组,详解C++中的一维数组和二维数组
- 宅急送项目的第七天笔记!(JBPM工作流)
- 喵喵电影-前端页面开发
- 心流理论下混合式教学系统的设计与实现
- java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸