学习路线
- 首先要学习Java SE,掌握Java语言本身、Java核心开发技术以及Java标准库的使用;
- 如果继续学习Java EE,那么Spring框架、数据库开发、分布式架构就是需要学习的;
- 如果要学习大数据开发,那么Hadoop、Spark、Flink这些大数据平台就是需要学习的,他们都基于Java或Scala开发;
- 如果想要学习移动开发,那么就深入Android平台,掌握Android App开发。
Java 简介
JDK
- java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
- javac:这是Java的编译器,它用于把Java源码文件(以
.java后缀结尾)编译为Java字节码文件(以.class后缀结尾); - jar:用于把一组
.class文件打包成一个.jar文件,便于发布; - javadoc:用于从Java源码中自动提取注释并生成文档;
- jdb:Java调试器,用于开发阶段的运行调试。
Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。
Java SE:Standard Edition
Java EE:Enterprise Edition(Java SE+大量的API和库)
Java ME:Micro Edition(嵌入式设备的“瘦身版”)
JDK:Java Development Kit(Java源码编译成Java字节码,提供编译器、调试器)
JRE:Java Runtime Environment(运行Java字节码的虚拟机)
JSR规范:Java Specification Request(标准化JVM的内存模型到Web程序接口)
JCP组织:Java Community Process(负责审核JSR组织)
Java 程序基础
java程序基本结构
类名要求
- 类名必须以英文字母开头,后接字母,数字和下划线的组合
- 习惯以大写字母开头
方法名要求
命名和
class一样,但是首字母小写类命名
- Hello
- NoteBook
- VRPlayer
注释
- 特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42/**
* 可以用来自动创建文档的注释
*
*/
## 变量和数据类型
- 引用:String 字符串
- 内部存储一个“地址”,指向某个对象在内存中的位置
- 常量:定义变量前加final修饰
- var关键字:相当于C++ auto
## 浮点数
整数运算除数0时报错,而浮点数运算在除数为`0`时,不会报错,但会返回几个特殊值:
- `NaN`表示Not a Number
- `Infinity`表示无穷大
- `-Infinity`表示负无穷大
## 布尔运算
- 短路运算
- 与运算在确定第一个值为`false`后,不再继续计算,而是直接返回`false`。
- 对于`||`运算,只要能确定第一个值为`true`,后续计算也不再进行,而是直接返回`true`。
## 字符串
- 字符串可以用`"""..."""`表示多行字符串(Text Blocks)
- 字符串不可变特性
- 字符串的不可变是指字符串内容不可变。
- 变的不是字符串,而是变量`s`的“指向”。
1. 执行`String s = "hello";`时,JVM虚拟机先创建字符串`"hello"`,然后,把字符串变量`s`指向它
2. 执行`s = "world";`时,JVM虚拟机先创建字符串`"world"`,然后,把字符串变量`s`指向它
3. 原来的字符串`"hello"`还在,只是我们无法通过变量`s`访问它而已
- 区分空值`null`和空字符串`""`,空字符串是一个有效的字符串对象,它不等于`null`。
- ```java
String s2; // 没有赋初值值,s2也是null
数组
- 数组是引用类型,并且数组大小不可变
流程控制
输入输出
1 | import java.util.Scanner; |
- 创建
Scanner对象并传入System.in。System.out代表标准输出流,而System.in代表标准输入流。 - 使用
scanner.nextLine(),要读取用户输入的整数,使用scanner.nextInt()。Scanner会自动转换数据类型,因此不必手动转换。
判断
if 判断
判断值类型的变量是否相等,可以使用
==运算符。判断引用类型的变量是否相等,
==表示“引用是否相等”,即是否指向同一个对象。要判断引用类型的变量内容是否相等,必须使用
equals()方法
1 | public class Main { |
- 变量
s1为null,会报NullPointerException- 短路运算
- if (“hello”.equals(s)) { … }
switch 判断
switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句
1 | public class Main { |
数组遍历
1 | public class Main { |
缺点:无法拿到数组索引
使用
Arrays.toString()可以快速获取数组内容。
数组排序
- 使用Java标准库提供的
Arrays.sort()进行排序
命令行参数
Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。
1 | public class Main { |
程序必须在命令行执行,先编译
1 | javac Main.java |
执行
1 | java Main -version |
