Java笔记
Java起源
Java语言最初是由美国Sun Microsystems公司的James Gosling等人开发的一种面向对象程序设计语言。Java的起源可以追溯到20世纪90年代初.Java语言于1995年5月23日正式发布。Java语言具有面向对象、平台独立、安全性以及可以开发一种称为Applet程序的特点.

Java是简单的 (simple)、面向对象的 (object oriented)、分布式的 (distributed)、解释型的 (interpreted)、健壮的 (robust)、安全的 (secure)、体系结构中立的(architecture neutral)、可移植的 (portable)、高性能的(high performance)、 多线程的 (multithreaded) 和动态的 (dynamic)。
Java平台和开发环境
Java平台有三大版本,分别代表Java 的三个应用领域
- Java标准版 (Java Standard Edition,
Java SE): 用来开发客户端的应用程序,应用程序可以独立运行或作为 Applet在 Web 浏览器中运行 - Java企业版 (Java Enterprise Edition,
Java EE): 用来开发服务器端的应用程序。例如,Java Servlet和JSP(JavaServer Pages), 以及 JSF(JavaServer Faces)。 - Java 微型版 (Java Micro Edition,
Java ME): 用来开发移动设备(如手机)上运行的应用程序。
JDK/JRE/JVM
JVM Java Virtual Machine,JVM, 一种运行字节码的应用程序.
两个发行包:
JRE Java Runtime Environment, 包括 JVM 和核心类库,最适合用来运行字节码。如果只需运行 Java 程序,就只需安装JRE。
JDK Java Development Toolkit, 它包括 JRE, 外加一个编译器和其他工具。它是编译和运行 Java程序的必备软件
字节码与平台独立
在Java编程中,源代码被编译成字节码 (bytecode)。字节码不是本地机代码,所以它不能直接运行。字节码只能在 Java 虚拟机上运行。 JVM 是一种解释字节码的本机应用程序。JVM 在众多平台上都可用,从而使 Java 成为一种跨平台的语言,进而实现“编写一次,到处运行”。

CMD编译运行
1 | javac <filename.java> |
Java标识符和关键字
Java标识符定义
- 包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。
- 标识符可以由字母、数字、下划线_ 和 美元符号 $ 组成
- 标识符不能以数字开头,不能是java中的关键字。
- 首字符之后可以是字母(AZ 或者 az)、下划线_ 、美元符号 $ 或数字的任何字符。
- Java 区分大小写.
- 不可以使用关键字和保留字作为标识符,但标识符中能包含关键字和保留字。
- 标识符不能包含空格。
这里的字母指的是 Unicode 编码字符集, 可以表示世界各国的语言符号.
Java标识符规则
- 包名所有字母必须小写。例如:cn.com.test
- 类名和接口名每个单词的首字母都要大写。例如:ArrayList
- 常量名所有的字母都大写,单词之间用下划线连接。例如:DAY_OF_MONTH 变量名和方法名的第一个单词首字母小写,从第二个单词开始,每个单词首字母大写。例如:lineName、getLingNumber
- 在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。
关键字
| 数据类型 | boolean、int、long、short、byte、float、double、char、class、interface、enum、void |
| 流程控制 | if、else、do、while、for、switch、case、default、break、continue、return |
| 异常处理 | try、catch、finally、throw、throws |
| 修饰符 | public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native |
| 类与类之间关系 | extends、implements |
| 建立实例及引用实例 | this、supper、instanceof、new |
| 导包 | package、import |
保留字
Java版本尚未使用,但以后版本可能会作为关键字使用。
goto、const、byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var
注意:java中true、false、friendly和null不属于关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符。
java关键字和保留字都是小写。即null是关键字,NULL不是关键字;TRUE、FALSE也不是关键字。
sizeof 是 C/C++ 中的方法,Java 中并没有这个方法,也没有该关键字 或 保留字
数据类型

java中没有无符号数
字面值和常量
字面值/字面量(literals)是某种类型值的表示形式.
常量(constant)是在程序运行过程中,其值不能被改变的量。常量实际上是一个由 final 关键字修饰的变量,一旦为其赋值,其值在程序运行中就不能被改变.
1 | public class iterals { |
运算符优先级

字符串拼接
1 | public static void main(String[] args) { |
知识点
-
与 C/C++语言不同, Java的布尔型数据不能与其他任何数据类型相互转换,即 false 和 true不对应于0和非0的整数值。
-
java的源文件名要和类名一样
-
逻辑运算符的操作数只能是boolean, && 与 & 的区别, 前者属于短路运算符.
-
>>>无符号右移. -
println()输出结果后自动换行
print()输出结果不换行
printf()和C一样, 按照格式字符串输出
next()遇到回车才停止 -
自动类型提升
1
2
3
4
5
6
7public static void main(String[] args) {
byte b1 = 20;
byte b2 = 30;
byte bs = (byte)(b1 + b2);
// byte short char 在使用的时候会被先转换为int 使用(type)(statement)完成强制转换
System.out.println(bs);
} -
java中的switch
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
27public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input the order of game you wanna play/n");
System.out.println("1. DOTA, 2. LOL, 3. DNF, 4.AC/n");
byte game;
game = sc.nextByte();
switch (game) {
// 这里Switch括号内的待匹配值为byte short int char
// JDK5 以后可以是枚举, JDK7 以后可以是String
// case值不能重复 只能是字面量
case 1:
System.out.println("DOTA running");
break;
case 2:
System.out.println("LOL launching");
break;
case 3:
System.out.println("DNF loading");
break;
case 4:
System.out.println("AC is nice");
break;
default:
System.out.println("game is boring");
break;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14public static void main(String[] args) {
// JDK 12 switch case 新写法 -> {} 省略:和break
int num = 1;
switch (num) {
case 1,2 -> System.out.println(1);
// 多个case可以逗号分隔写在一起
case 3 -> {
System.out.println(33);
}
default -> {
System.out.println("default");
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public static char NumToRome(char n){
// Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
n = switch (n){ // JDK 12 后的新特性, 可以用变量接受switch的值
case '1' -> 'Ⅰ';
case '2' -> 'Ⅱ';
case '3' -> 'Ⅲ';
case '4' -> 'Ⅳ';
case '5' -> 'Ⅴ';
case '6' -> 'Ⅵ';
case '7' -> 'Ⅶ';
case '8' -> 'Ⅷ';
case '9' -> 'Ⅸ';
default -> ' ';
};
return n;
} -
Java中的break和continue可以加一个标签以调出多层循环, 像C中goto那样. 但不能跳转到不相关的标签块.
1
2
3
4
5
6
7
8
9
10
11
12public static void main(String[] args) {
int[][] arr = new int[10][10];
there:
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if((i*10 + j) == 50) continue there;
arr[i][j] = i*10 + j;
System.out.printf("%d\t", arr[i][j]);
}
System.out.println();
}
} -
java中没有sizeof运算符, C/C++中 sizeof 最初设计来是为了兼容不同设备的, 但java因为有JVM解决了这个问题, 所以不需要sizeof运算符.
-
java中浮点运算结果可能溢出, 但不会溢出导致异常, 下溢结果为0, 上溢结果为Infinity 或 -Infinity, 出现没有意义的结果显示NaN
-
main方法中的参数
String[] args原先是用来接收键盘参数的, 现在已经不用, 可以在IDE中配置configuration -
指定环境变量时需要指定到程序所在目录; windows在指定文件夹打开cmd可以直接在路径栏输入cmd回车.
参考
- 《Java程序设计(第3版)》 IBSN 9787302485520
- Java API 文档
- Java标识符和关键字(超详细)
- JAVA合法标识符