hello world
public class Hello {
public static void main(String[] args) {
System.out.println("hello world");
}
}
复制代码
- public: 是关键字;表示公开的
- class: 是关键字;用来定义类
- Hello: 是类名;大小写敏感;命名一般为大驼峰格式
- static: 是关键字;表示静态的
- void: 是关键字;表示方法的返回类型为 void
- main 方法: Java 程序的入口方法;是可执行的代码块
- 分号: Java 的每一行语句必须必须以分号结尾
注意:一个 Java 源码只能定义一个
public
类型的 class,并且 class 名称和文件名保持一致
注释
// 单行注释
复制代码
/*
多行注释
多行注释
*/
复制代码
/**
* 可以用来自动创建文档的多行注释, 需要写在类和方法的定义处
*
* @auther pany
*/
复制代码
变量
- Java 变量分为两种:基本类型的变量和引用类型的变量
- 必须先定义后使用
- 不能重复定义
- 如果不写初始值,就相当于给它指定了默认值
基本类型
- 整数类型:byte,short,int,long
- 浮点数类型:float,double
- 字符类型:char
- 布尔类型:boolean
不同基础类型占用字节数:
语法:
int i = 100;
long l = 100L; // long 型的结尾需要加 L
float f = 3.14f; // float 型的结尾需要加 f
double d = 3.14;
boolean b = true;
char c = '中';
复制代码
引用类型
除了上述基本类型,其他的都是引用类型,比如字符串
String s = "hello";
复制代码
常量
加上 final 修饰符,这个变量就变成了常量:
final double PI = 3.14; // PI 是一个常量
复制代码
var 关键字
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder sb = new StringBuilder();
复制代码
这个时候,如果想省略变量类型,可以使用 var 关键字:
var sb = new StringBuilder(); // 编译器会自动推断类型
复制代码
整数运算
除法 & 溢出
int x = 12345 / 67; // 等于 184,因为只取整数部分
复制代码
int y = 12345 % 67; // 等于 17,因为 12345 ÷ 67 的余数是 17
复制代码
注意:整数的除法对于除数为 0 时运行时将报错,但编译不会报错
溢出:整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果
类型转化
自动转化(如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型)
short s = 10;
int i = 10;
int x = s + i; // s 自动转型为 int
short y = s + i; // 编译错误
复制代码
强制转化(将大范围的整数转型为小范围的整数)
int i = 12345;
short s = (short) i; // 12345
复制代码
浮点数运算
除法 & 溢出
整数运算在除数为 0
时会报错,而浮点数运算在除数为 0
时不会报错,但会返回几个特殊值:
double d1 = 0.0 / 0; // NaN; 表示 Not a Number
double d2 = 1.0 / 0; // Infinity; 表示无穷大
double d3 = -1.0 / 0; // -Infinity; 表示负无穷大
复制代码
类型提升
如果参与运算的两个数其中一个是整型,那么整型可以自动提升到浮点型:
int i = 5;
double d = 1.2 + 24.0 / n; // 6.0
复制代码
注意,在一个复杂的四则运算中,两个整数的运算不会出现自动提升的情况:
double d = 1.2 + 24 / 5; // 5.2
复制代码
原因是编译器计算 24 / 5 这个子表达式时,按两个整数进行运算
强制转化
可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉 如果转型后超过了整型能表示的最大范围,将返回整型的最大值
int n1 = (int) 12.7; // 12
int n2 = (int) -12.7; // -12
int n3 = (int) (12.7 + 0.5); // 13; 如果要四舍五入就可以采用该 +0.5 的方式
int n3 = (int) 1.2e20; // 2147483647; 最大值
复制代码
字符 & 字符串
字符
一个 char
保存一个 Unicode 字符
char c = 'A';
复制代码
要显示一个字符的Unicode编码,只需将 char
类型直接赋值给 int
类型即可:
int i = 'A'; // 字母 'A' 的 Unicodde 编码是 65
复制代码
还可以直接用转义字符 \u
+ Unicode 编码来表示一个字符:
// 注意是十六进制
char c = '\u0041'; // 'A'; 因为十六进制 0041 = 十进制 65
复制代码
字符串
和 char
基本类型不同,字符串类型 String
是引用类型,并且是双引号来表示
String s = "abc\"xyz"; // 包含 7 个字符: a, b, c, ", x, y, z
复制代码
其中 \
是转义字符
连接字符串
如果用 + 连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接
int age = 24;
String s = "age is " + age; // age is 24
复制代码
多行字符串
如果我们要表示多行字符串,使用 + 号连接会非常不方便
String s = "第一行 \n"
+ "第二行 \n"
+ "第三行";
复制代码
所以用 """xxx"""
表示多行字符串
String s = """
第一行
第二行
第三行
""";
复制代码
注意:多行字符串前面共同的空格会被去掉。将上面每行代码前端的共同空格去掉后相当于:
"""
第一行
第二行
第三行
"""
复制代码
空值 null
引用类型的变量可以指向一个空值 null
,它表示不存在,即该变量不指向任何对象
String s1 = null; // s1 是 null
String s2; // 没有赋初值值,s2 默认值也是 null
复制代码
转义字符
常见的转义字符包括:
\"
表示字符"
\'
表示字符'
\\
表示字符 ``\n
表示换行符\r
表示回车符\t
表示 Tab\u####
表示一个 Unicode 编码的字符
数组
特点
- 数组所有元素初始化为默认值,整型都是
0
,浮点型是0.0
,布尔型是false
- 数组一旦创建后,大小就不可改变
- 是引用类型
一维
语法: 类型[]
// 定义
int[] ar1 = new int[2];
// 赋值
ar1[0] = 0;
ar1[1] = 1;
// 也可以定义时指定初始值
int[] ar2 = new int[] { 0, 1 };
// 简化
int[] ar3 = { 0, 1 };
复制代码
二维
int[][] as = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
}
复制代码
打印数组
Arrays.deepToString(as) // 当然也可以用 for 循环
复制代码
输出
System.out.print("A"); // 输出,但不换行
复制代码
System.out.println("A"); // 输出并换行
复制代码
double d = 3.1415926;
System.out.printf("%.2f\n", d); // 格式化输出,显示两位小数
复制代码
判断是否相等
Java 中判断值类型的变量是否相等可以使用 ==
运算符。但是,判断引用类型的变量是否相等,==
表示 引用是否相等
,或者说,是否指向同一个对象
要判断引用类型的变量内容是否相等,必须使用 equals()
方法
String s1 = "hello";
String s2 = "HELLO".toLowerCase(); // "hello"
boolean b1 = s1 == s2;
boolean b2 = s1.equals(s2);
System.out.println(b1); // false
System.out.println(b2); // true
复制代码