教材
《Java核心技术·卷I 开发基础(原书第12版)》 ...... ( P25 - P91 )
思维导图
目录
一、简单程序
public class Example{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
Java区分大小写
1.1 public 访问修饰符
- 用于控制程序的其他部分代码对这段代码的访问级别
1.2 class 类关键字
- Java程序中的所有内容都必须放在类中
- 类名:必须以字母开头; 字母和数字的任意组合; 不能使用Java保留字; 驼峰命名法。
1.3 方法
object.method(parameters)
- Java 中任何方法的代码都必须以 “ { ” 开始 “ } ” 结束
- 每个语句必须使用 “ ; ” 结束
- 一条语句可以跨多行
- 使用 “ . ” 调用对象的方法。
1.4 文件名
- 源代码的文件名必须与公共类的类名相同
- 用 .java 作为扩展名
1.5 运行
- 从指定类中 main 方法的代码开始执行
- 类的源代码中必须包含一个 main 方法
二、注释
2.1 //
从 “ // ” 开始到本行结尾都是注释
public class Example{
public static void main(String[] args){
System.out.println("Hello, World!"); // This is a note.
}
}
2.2 /* */
使用 “ /* ” 和 “ */ ” 将一段长注释括起来
public class Example{
public static void main(String[] args){
/*
This is a long note.
*/
System.out.println("Hello, World!"); // This is a note.
}
}
2.3 /** */
以 “ /** ” 开始 以 “ */ ” 结束 自动生成文档
/**
* This is an example of a simple program.
* @version 1.00 2025-03-20
* @author Oliver Lee
*/
public class Example{
public static void main(String[] args){
/*
This is a long note.
*/
System.out.println("Hello, World!"); // This is a note.
}
}
三、数据类型
Java是一种强类型语言 必须为每一个变量声明一个类型
3.1 整型
类型 | 存储 | 范围 |
---|---|---|
int | 4字节 | -21,4748,3648 ~ 21,4748,3647 |
short | 2字节 | -3,2768 ~ 3,2767 |
long | 8字节 | -922,3372,0368,5477,5808 ~ 922,3372,0368,5477,5807 |
byte | 1字节 | -128 ~ 127 |
3.2 浮点型
类型 | 存储 | 范围 |
---|---|---|
float | 4字节 | ±3.40282347e38(6~7位有效数字) |
double | 8字节 | ±1.79769313486231570e308(15位有效数字) |
3.3 字符型 char
字面量值使用单引号括起来
3.4 布尔型 boolean
- 值为 flase 或 true
- 整型值与布尔型值之间不能相互转换
四、变量与常量
4.1 变量
- 声明:type(数据类型) variable(变量名);(int number;)
每个声明都以 “ ; ” 结束
public class Example{
public static void main(String[] args){
int integer; // declare a integer variable
double number; // declare a double variable
char character; // declare a char variable
boolean logic; // declare a boolean variable
}
}
- 变量名:由 字母 数字 货币符号 标点连接符 组成;第一个字符不能是数字;区分大小写;不能使用java关键字。
- 初始化:variable = value;(number = 1;)
可以将变量的声明和初始化放在同一行中(int number = 1;)
public class Example{
public static void main(String[] args){
int integer; // declare a integer variable
integer = 0; // initialize a variable
double number = 3.14; // declare and initialize a double variable
char character; // declare a char variable
boolean logic; // declare a boolean variable
}
}
4.2 常量
final(final int NUMBER = 1;)
只能被赋值一次 不能更改
常量名使用全大写
public class Example{
public static void main(String[] args){
final int NUMBER = 1;
}
}
- 类常量:static final(public static final int NUMBER = 1;)
声明位于 main 方法之外
被声明为 public 其他方法可调用
public class Example{
public static final int NUMBER = 1
public static void main(String[] args){
System.out.println("Hello, World!")
}
}
4.3 枚举类型
包括有限个命名值
后续详细介绍
五、运算符
5.1 算术运算符
加减乘除余 + - * / %
两个整数(整型值)相除结果是整数(整型值)
否则结果是小数(浮点型值)
public class LearnOne{
public static void main(String[] args){
int x = 9;
int y = 4;
double z = 4.0;
System.out.printf("x = %d\ty = %d\tz = %f\n", x, y, z);
System.out.printf("x + y = %d\n", x + y); // x + y = 13
System.out.printf("x - y = %d\n", x - y); // x - y = 5
System.out.printf("x * y = %d\n", x * y); // x * y = 36
System.out.printf("x / y = %d\n", x / y); // x / y = 2
System.out.printf("x / z = %f\n", x / z); // x / z = 2.250000
/*
在 Java 的 printf 方法中 % 是格式化占位符的起始符号 若要输出 % 这个字符 就得使用 %%
编写 System.out.printf("x % y = %d", x % y); 会报错
*/
System.out.printf("x %% y = %d\n", x % y); // x % y = 1
System.out.printf("x %% z = %f", x % z); // x % z = 1.000000
}
}
5.2 数学函数 Math类
- Math.sqrt(x) 方法 平方根
- Math.pow(x, a) 方法 幂运算
- Math.exp(a) 方法 指数幂
- Math.log(x) 方法 自然对数
- Math.log10(x) 方法 以10为底的对数
- Math.PI 圆周率
- Math.E 自然常数
- 三角函数:Math.sin(x) 方法 正弦;Math.cos(x) 方法 余弦;Math.tan(x) 方法 正切
public class LearnOne{
public static void main(String[] args){
double x = 9.0;
double a = 2.0;
System.out.printf("sqrt(x) = %f\n", Math.sqrt(x)); // sqrt(x) = 3.000000
System.out.printf("pow(x, a) = %f\n", Math.pow(x, a)); // pow(x, a) = 81.000000
System.out.printf("exp(a) = %f\n", Math.exp(a)); // exp(a) = 7.389056
System.out.printf("log(x) = %f\n", Math.log(x)); // log(x) = 2.197225
System.out.printf("log10(x) = %f\n", Math.log10(x)); // log10(x) = 0.954243
System.out.printf("pi = %f\n", Math.PI); // pi = 3.141593
System.out.printf("e = %f\n", Math.E); // e = 2.718282
System.out.printf("sin(x) = %f\n", Math.sin(x)); // sin(x) = 0.412118
System.out.printf("cos(x) = %f\n", Math.cos(x)); // cos(x) = -0.911130
System.out.printf("tan(x) = %f\n", Math.tan(x)); // tan(x) = -0.452316
}
}
5.3 数值类型转换
- 合法转换
实线箭头表示无信息丢失的转换 虚线箭头表示可能有精度丢失的转换
- 强制转换
(type) variable;
在圆括号中指定想要转换的目标类型 后面紧跟待转换的变量名
public class LearnOne{
public static void main(String[] args){
double x = 2.718;
System.out.printf("(int) x = %d\n", (int) x); // (int) x = 2
int y = 3;
System.out.printf("(double) y = %f", (double) y); // (double) y = 3.000000
}
}
5.4 自增自减运算符
- n++ 或 ++n
- n-- 或 --n
- 前缀形式会先完成加1 后缀形式会使用变量原来的值再加1
5.5 关系和逻辑运算符
- 等于 ==
- 小于 <
- 大于 >
- 小于等于 <=
- 大于等于 >=
- 不等于 !=
- 非 !
- 与 &&
- 或 ||
5.6 条件运算符
condition ? expression1 : expression2;
如果条件(condition)为真(true),返回表达式expression1的值,否则返回expression2的值
public class LearnOne{
public static void main(String[] args){
int x = 0;
int y = 1;
int z = x > y ? x : y;
System.out.printf("x > y ? x : y --> %d", z); // x > y ? x : y --> 1
}
}
5.7 位运算符
- & 且
- | 或
- ^ 异或
- ~ 非
- >> 左移
- << 右移
5.8 括号与运算符级别
六、字符串 String类
String variable ( = "value");(String s = "Hello";) 字符串不可变
6.1 子串 substring方法
拼接
使用 “ + ” 拼接两个字符串
当将一个字符串与一个非字符串的值进行拼接时 后者会转化成字符串
public class LearnOne{
public static void main(String[] args){
String s = "Hello";
String t = "World";
System.out.println(s + " " + t + "!"); // Hello World!
System.out.println(1 + "+" + 1 + "=" + 2); // 1+1=2
}
}
6.2 判断相等
s.equals(t)
s.equalsIgnoreCase(t) 忽略大小写
不要使用 “ == ” 运算符判断字符串是否相等’
public class LearnOne{
public static void main(String[] args){
String s = "Hello";
String t = "hello";
System.out.printf("s.equals(t) --> %b\n", s.equals(t)); // s.equals(t) --> false
System.out.printf("s.equalsIgnoreCase(t) --> %b", s.equalsIgnoreCase(t)); // s.equalsIgnoreCase(t) --> true
}
}
6.3 空串
"" 是长度为 0 内容为空的字符串
6.4 Null串
null 表示目前没有任何对象与该变量关联
判断一个字符串是否为 null 可以使用 “ == ”
6.5 码点和代码单元
- 代码单元
存储字符的最小单位
char类型代表一个代码单元
一个字符需要 1 个或 2 个代码单元
- 码点
Unicode 标准中为每个字符分配的唯一编号
- length方法:返回代码单元个数
- codePointCount方法:返回码点个数 即字符串的实际长度
public class LearnOne{
public static void main(String[] args){
String s = "This is a emoji(\uD83D\uDE00)";
System.out.println(s); // This is a emoji(😀)
System.out.printf("length == %d\n", s.length()); // length == 19
System.out.printf("codePointCount == %d", s.codePointCount(0, s.length())); // codePointCount == 18
}
}
6.6 构建字符串 StringBuilder类
6.7 文本块
以 """ 开头 以 """ 结尾
需要对引号转义的情况
文本块以一个引号结尾
文本块中包含三个或更多引号组成的一个序列
七、输入与输出
7.1 读取输入 System.in类
Step 1:构造与 System.in 类关联的 Scanner 对象
Scanner 类在 java.util 包中定义 需要使用 import 导入
Step 2:使用 Scanner 类的方法读取输入
- nextLine 方法 读取一行输入
- next 方法 读取输入空白符前的内容
- nextInt 方法 读取一个整数
- nextDouble 方法 读取一个浮点数
import java.util.Scanner;
public class LearnOne{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String text = in.nextLine(); // Good noon!
System.out.println("This is your input: " + text); // This is your input: Good noon!
int number = in.nextInt(); // 3
System.out.printf("You just input a number %d\n", number); // You just input a number 3
}
}
7.2 格式化输出
- System.out.print(x) 方法 输出x后面没有换行符 “ \n ”
- System.out.println(x) 方法 输出x后面有换行符 “ \n ”
- System.out.printf() 方法 与C语言中的printf()函数一样
用于 printf 的转换字符
用于 printf 的标志
格式化字符串 String.format() 方法
import java.util.Scanner;
public class LearnOne{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("Please tell me how many apples are there?");
int count = in.nextInt();
String s = String.format("OK! There are %d apples.", count); // OK! There are 10 apples.
System.out.print(s);
}
}
7.3 文件输入与输出
输入 Scanner(Path.of(), StandardCharsets.UTF_8)
使用给定字符编码从给定路径读取文件
输出 PrintWriter(Path.of(), StandardCharsets.UTF_8)
使用给定字符编码输出文件到给定路径
八、控制流程
8.1 块(作用域)
由若干条Java语句组成 并用一对大括号括起来
确定了变量的作用域
8.2 条件语句
if (condition) statement
if (condition) statement1 else statement2
if (condition1) statement1 else if (condition2) statement2 else statement3
import java.util.Scanner;
public class LearnOne{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("Please input your age: ");
int age = in.nextInt();
if(age < 0){
System.out.println("Wrong age. Please input your age again!");
age = in.nextInt();
}
if(age < 15){
System.out.println("You are a child.");
}else if(age >= 15 && age <= 24){
System.out.println("You are a youth.");
}else{
System.out.println("Your age is greater than 24.");
}
in.close();
}
}
8.3 循环语句
8.3.1 while循环
while (condition) statement
import java.util.Scanner;
public class LearnOne {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int age;
System.out.println("please input your age:");
age = in.nextInt();
while(age < 0){
System.out.println("wrong age! please input your age again:");
age = in.nextInt();
}
in.close();
if(age < 15){
System.out.println("You are a child.");
}else if(age <= 24){
System.out.println("You are a youth.");
}else{
System.out.println("Your age is greater than 24.");
}
}
}
do statement while(condition)
循环体至少执行一次
import java.util.Scanner;
public class LearnOne {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int age;
do{
System.out.println("please input your age:");
age = in.nextInt();
}while(age < 0);
in.close();
if(age < 15){
System.out.println("You are a child.");
}else if(age <= 24){
System.out.println("You are a youth.");
}else{
System.out.println("Your age is greater than 24.");
}
}
}
8.3.2 for循环
for (counter; condition; update) statement
- counter 初始化计数器(int i = 1)
- condition 执行循环的条件(i <= 10)
- update 更新计数器(i++)
for循环语句内部声明的变量不能在循环体外使用
可以在不同的for循环中定义同名的变量
import java.util.Scanner;
public class LearnOne {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String s;
int rowCount;
System.out.println("please input the character you want to print:");
s = in.next();
System.out.println("please input the number of row:");
rowCount = in.nextInt();
in.close();
for(int i = 0; i < rowCount; i++){
for(int j = 0; j <= i; j++){
System.out.print(s);
}
System.out.print('\n');
}
}
}
8.4 多重选择(switch语句)
switch (choice) case statement
case 可以是
数据类型为 char byte short int 的常量表达式
枚举常量
字符串字面量
用逗号分隔的多个字符串
switch形式
switch表达式优于语句
import java.util.Scanner;
public class LearnOne {
public static void main(String[] args){
String fruit;
Scanner in = new Scanner(System.in);
System.out.println("There are apple, banana and orange.");
System.out.println("Please choose the fruit you want.");
fruit = in.next();
switch(fruit){
case "apple" : System.out.println("You got apple!");break;
case "banana": System.out.println("You got banana!");break;
case "orange": System.out.println("You got orange!");break;
default: System.out.println("There is not the fruit!");break;
}
}
}
8.5 中断流程
break语句
不带标签
跳出当前循环
带标签
跳出多重嵌套的循环
标签必须放在想要跳出的最外层循环之前 紧跟一个 “ : ”
continue语句
不带标签
将流程转移到最内层外围循环的首部
带标签
将流程跳转到由匹配标签的循环的首部
九、大数(java.math包)
声明
BigInteger 类
任意精度的整数
BigDecimal 类
任意精度的浮点数
valueOf 方法
将一个普通的数转化为大数
运算
add 方法
multiply 方法
十、数组
一种数据结构 用来存储同一类型值 通过一个整数索引可以访问数组中的每一个值
10.1 声明
type[] variable;
10.2 创建
type[] variable = new type[n];
n 为数组的长度
一旦创建了数组,就不能改变数组的长度
10.3 初始化
创建时数字数组初始化为 0
创建时布尔数组初始化为 True
创建时对象数组初始化为null
type[] variable = {value1, value2, ..., valuen};
public class LearnOne{
public static void main(String[] args){
int[] numbers;
int[] numbers = new int[10];
numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
}
}
10.4 遍历数组元素
使用for循环
array.length 获得数组中元素的个数
使用for each循环
for (type variable : collection) statement
将给定变量(variable)设置为集合(collection)中的每一个元素 然后执行语句(statement) for each element in collection
import java.util.Scanner;
public class LearnOne{
public static void main(String[] args){
int n;
char[] numbers;
Scanner in = new Scanner(System.in);
System.out.println("please input the count of numbers:");
n = in.nextInt();
numbers = new char[n];
System.out.println("please input your number one by one:");
for(int i = 0; i < n; i++){
numbers[i] = in.next().charAt(0);
}
for(char number: numbers){
System.out.print(number);
System.out.print(' ');
}
in.close();
}
}
10.5 复制数组
array_y = array_x;
两个变量指向同一个数组
type[] array_y = Arrays.copyOf(array_x, length);
通常用来增加数组的大小
import java.util.Arrays;
public class LearnOne {
public static void main(String[] args) {
int[] x = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] y = Arrays.copyOf(x, x.length);
for (int value: y) {
System.out.print(value);
System.out.print(' ');
}
// 0 1 2 3 4 5 6 7 8 9
}
}
10.6 排序数组 Arrays.sort() 方法
import java.util.Arrays;
public class LearnOne {
public static void main(String[] args) {
int[] array = {1, 9, 3, 8, 2, 6, 0};
Arrays.sort(array);
for (int value : array) {
System.out.print(value);
System.out.print(' ');
}
// 0 1 2 3 6 8 9
}
}
10.7 多维数组
type[][] variable;
声明一个二维数组
type[][] variable = new type[m][n]
创建一个m行n列的二维数组
type[][] variable = {{}, {}, ..., {}}
初始化一个二维数组
public class LearnOne {
public static void main(String[] args) {
int[][] matrix;
int[][] matrix = new int[2][2];
matrix = {{1, 0}, {0, 1}};
int[][] matrix = {{1, 0}, {0, 1}};
}
}
10.8 不规则数组
多维数组可以理解为 数组的数组