Java 语言是美国 Sun 公司(Stanford University Network)在 1995 年推出的计算机语言
Java 之父:詹姆斯·高斯林(James Gosling)
2009 年,Sun 公司被甲骨文公司收购,所以我们现在访问 Oracle官网即可
Java 程序执行过程
Java 语言可以跨平台运行其原理为:Java 程序并非是直接运行的,Java 编译器将 Java 源程序编译成与平台无关的字节码文件(class 文件),然后由 Java 虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的 Java 虚拟机即可实现 Java 程序的跨平台。
Java 源文件(*.java)通过 javac 命令编译成字节码文件(*.class)在使用 java 命令解释执行为特定的机器码。
什么是字节码?采用字节码的好处是什么?
:::info
在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器。因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
:::

▲ 一次编译,处处运行
Java 语言中负责解释执行字节码文件的是 Java 虚拟机,即 JVM(Java Virtual Machine)
Java 开发环境
JDK 与 JRE
Java 标准版开发包,JDK(Java SE Development Kit),是一套用于开发 Java 应用程序的开发包,它提供了编译、运行 Java 程序所需的各种工具和资源,包括 Java 编译器、Java 运行环境,以及常用的 Java 类库等。JRE 则是 Java 运行时环境 Java Runtime Environment。
- 如果只是运行 Java 程序,只需要安装 JRE,无需安装 JDK
- 如果需要开发 Java 程序,应该安装 JDK,安装后就包含了 JRE
Java SE 与 Java EE
随着 Java 的发展,SUN 给 Java 又分出了三个不同版本:
- Java SE(Standard Edition)标准版,包含标准的 JVM 和标准库
- Java EE(Enterprise Edition)企业版,它只是在 Java SE 的基础上加上了大量的 API 和库,以便方便开发 Web 应用、数据库、消息服务等。Java EE 的应用使用的虚拟机和 Java SE 完全相同。2018年3月,开源组织 Eclipse 基金会宣布,Java EE 被更名为 Jakarta EE。
- Java ME(Micro Edition)针对嵌入式设备的“瘦身版”,Java SE 的标准库无法在 Java ME 上使用,Java ME 的虚拟机也是“瘦身版”
:::info 从 JDK 5.0 开始 J2EE 改名为 Java EE,J2SE 改名为 Java SE,J2ME 改名成 Java ME :::
Java 学习指南
- 首先要学习 Java SE,掌握 Java 语言本身、Java 核心开发技术以及 Java 标准库的使用;
- 如果继续学习 Java EE,那么 Spring 框架、数据库开发、分布式架构就是需要学习的;
- 如果要学习大数据开发,那么 Hadoop、Spark、Flink 这些大数据平台就是需要学习的,他们都基于 Java 或 Scala 开发;
- 如果想要学习移动开发,那么就深入 Android 平台,掌握 Android App 开发。
JDK 下的命令
JDK 目录下的bin,该路径下存放了JDK 的各种工具命令:
java:这个可执行程序其实就是 JVM,运行 Java 程序,就是启动 JVM,然后让 JVM 执行指定的编译后的代码;javac:这是 Java 的编译器,它用于把 Java 源码文件(以.java后缀结尾)编译为 Java 字节码文件(以.class后缀结尾);jar:用于把一组.class文件打包成一个.jar文件,便于发布;javadoc:用于从 Java 源码中自动提取注释并生成文档;jdb:Java 调试器,用于开发阶段的运行调试。
Java 程序的组织形式
Java 程序包括:注释、包声明、导入语句、类定义、包含实际代码的方法

public class Hello {// Java 程序的入口方法,程序将从这里开始执行public static void main(String[] args){// 向控制台打印一条语句,Java 程序严格区分大小写System.out.println("Hello Word!");}}
所有的程序都必须放到类的定义里。
如果某个类能被解释器直接解释执行,则这个类里必须包含 main 方法,而且 main 方法必须使用 pubilc static void 来修饰,且 main 方法的形必须是字符串数组类型( String[] args 是字符串数组的形式)
Java 基本语法
编写 Java 程序时,应注意以下几点:
- 大小写敏感:Java 是大小写敏感的,这就意味着标识符
Hello与hello是不同的。 - 类名采用大驼峰命名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如
MyFirstJavaClass。 - 方法名采用小驼峰命名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
- 源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为
.java。(如果文件名和类名不相同则会导致编译错误)。如果源代码定义了一个public类,则该源文件的主文件名必须与该public类名相同。因此一个 Java 源文件只能定义一个public类。 - 主方法入口:所有的 Java 程序由
public static void main(String []args)方法开始执行。
Java 标识符
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
- 所有的标识符都应该以字母( A-Z 或者 a-z),美元符($)、或者下划线(_)开始
- 数字不可以开头
- 首字符之后可以是字母( A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
- 关键字、保留字不能用作标识符
- 标识符是大小写敏感的,不能包含空格
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
Java 命名规范:
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
Java 修饰符
① 访问控制修饰符
Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
default(即默认,什么也不写):在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方er法。private: 在同一类内可见。使用对象:变量、方法。public:对所有类可见。使用对象:类、接口、变量、方法protected:对同一包内的类和所有子类可见。使用对象:变量、方法。
Java 的外部类为什么不能使用 private、protected 进行修饰
② 非访问修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
static:用来修饰类方法和类变量。final:用来修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。abstract:用来创建抽象类和抽象方法。synchronized和volatile:主要用于线程的编程。
static 修饰符:
- 静态变量:
static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为static变量。 - 静态方法:
static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。 - 对类变量和方法的访问可以直接使用
classname.variablename和classname.methodname的方式访问。
final 修饰符:
final变量:final表示”最后的、最终的”含义,变量一旦赋值后,不能被重新赋值。被final修饰的实例变量必须显式指定初始值。final修饰符通常和static修饰符一起使用来创建类常量
abstract 修饰符:
- 抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
- 一个类不能同时被
abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。 - 抽象类可以包含抽象方法和非抽象方法。
Java 保留词
| 访问控制 | private | protected | public | ||||
|---|---|---|---|---|---|---|---|
| 类,方法和变量修饰符 | abstract | class | extends | final | implements | interface | native |
| new | static | strictfp | synchronized | transient | volatile | ||
| 程序控制 | break | continue | return | do | while | if | else |
| for | instanceof | switch | case | default | |||
| 错误处理 | try | catch | throw | throws | finally | ||
| 包相关 | import | package | |||||
| 基本类型 | boolean | byte | char | double | float | int | long |
| short | null | true | false | ||||
| 变量引用 | super | this | void | ||||
| 保留字 | goto | const |
Java 类
因为 Java 是面向对象的语言,一个程序的基本单位就是class,class是关键字,这里定义的class 名字就是Hello:
public class Hello { // 类名是Hello
// ...
} // class定义结束
注意到 public 是访问修饰符,表示该 class 是公开的。不写 public,也能正确编译,但是这个类将无法从命令行执行。
在class内部,可以定义若干方法(method):
public class Hello {
public static void main(String[] args) { // 方法名是main
// 方法代码...
} // 方法定义结束
}
方法定义了一组执行语句,方法内部的代码将会被依次顺序执行。这里的方法名是 main,返回值是 void,表示没有任何返回值。
我们注意到 public 除了可以修饰 class 外,也可以修饰方法。而关键字 static 是另一个修饰符,它表示静态方法。
Java 入口程序规定:
- 方法必须是静态方法
- 方法名必须为
main - 括号内的参数必须是 String 数组。
注释
在方法内部,语句才是真正的执行代码。Java 的每一行语句必须以分号结束:
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!"); // 语句
}
}
在 Java 程序中,注释是一种给人阅读的文本,不是程序的一部分,所以编译器会自动忽略注释。
Java 有 3 种注释,第一种是单行注释,以双斜线开头,直到这一行的结尾结束:
// 这是注释...
而多行注释以 /* 星号开头,以 */ 结束,可以有多行:
/*
这是注释
blablabla...
这也是注释
*/
还有一种特殊的多行注释,以 /** 开头,以 */ 结束,如果有多行,每行通常以星号开头:
/**
* 可以用来自动创建文档的注释
*
* @auther liaoxuefeng
*/
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
这种特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。
Java 程序对格式没有明确的要求,多几个空格或者回车不影响程序的正确性,但是我们要养成良好的编程习惯,注意遵守 Java 社区约定的编码格式。
变量
在 Java 中,变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。
public class Main {
public static void main(String[] args) {
int x = 100; // 定义 int 类型变量 x,并赋予初始值 100
System.out.println(x); // 打印该变量的值
}
}
变量的一个重要特点是可以重新赋值, 还可以赋值给其他变量
变量命名规则:
- 名字必须以字母或下划线开头
- 名字中所有其他字符必须是字母、数字和下划线。名字中不能出现空格或其他特殊字符。
- 名字不能是任何保留词
