基础语法
约 7316 字大约 24 分钟
2026-03-19
1、关键字与保留字
| 关键字(keyword) | ||||||
|---|---|---|---|---|---|---|
| 数据类型 | class | interface | enum | byte | short | boolean |
| int | long | float | double | char | void | |
| 数据类型值 | true | false | null | |||
| 流程控制 | if | else | switch | case | default | while |
| do | for | break | continue | return | ||
| 访问权限修饰符 | private | protected | public | |||
| 类,函数,变量修饰符 | abstract | final | static | synchronized | ||
| 类与类之间关系 | extends | implements | ||||
| 建立实例及引用实例,判断实例 | new | this | super | instanceof | ||
| 异常处理 | try | catch | finally | throw | throws | |
| 包 | package | import | ||||
| 其他 | native | strictfp | transient | volatile | assert |
| 保留字 | ||||
|---|---|---|---|---|
| goto | const |
官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html
2、代码注释
| 注释 | 说明 |
|---|---|
| // | 单行注释标记,从符号“//”开始直到换行为止的所有内容均作为注释 |
| /* */ | 多行注释标记,符号“/*”与“*/”之间的所有内容均为注释内容。 |
| /** */ | 文档注释标记。符号“/**”与“*/”之间的内容均为文档注释内容。当文档注释出现在任何声明(如类的声明、类的成员变量的声明、类的成员方法声明等)之前时,会被JavaDoc文档工具读取,作为Javadoc文档内容。 |
// 这是一个单行注释
/*
* public void create() { System.out.println("hello"); }
*/
/**
* @author DingTao
* @created time 2021
* @param
* @return
* */3、命名规范
| 说明 | 示例 | |
|---|---|---|
| 包名 | 多个单词组成时,所有字母都小写。为了避免包名重复,原则上把网站的域名倒过来写作为包名 | com.dingtao.controller |
| 类名、接口名 | 多单词组成时,所有单词的首字母大写 | AcountDao |
| 变量名、方法名 | 多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写 | abcUser |
| 常量名 | 所有字母都大写。多单词时每个单词用下划线连接 | MAX_SIZE |
4、基本数据类型
4.1 整型数据类型
| 数据类型 | 内存空间(8位等于1字节) | 取值范围 |
|---|---|---|
| byte | 8位(1字节) | -27 ~ 27-1 |
| short | 16位(2字节) | -215 ~ 215-1 |
| int | 32位(4字节) | -231 ~ 231-1 |
| long | 64位(8字节) | -263 ~ 263-1 |
4.2 浮点型数据类型
| 数据类型 | 内存空间(8位等于1字节) | 取值范围 |
|---|---|---|
| float | 32位(4字节) | 1.4×10−45~3.40282353×108 |
| double | 64位(8字节) | 4.9×10−324~1.7976931348623157×10308 |
4.3 字符类型(char)
(1) 转义字符表
| 转义字符 | 含义 |
|---|---|
| \ddd | 1到3位8进制数据所表示的字符,如:\456 |
| \dxxxx | 4位16进制所表示的字符,如:\0052 |
| ' | 单引号字符 |
| \ | 反斜杠字符 |
| \t | 垂直制表符,将光标移到下一个制表符的位置 |
| \r | 回车 |
| \n | 换行 |
| \b | 退格 |
| \f | 换页 |
(2) ASCII码表
ASCII控制字符(不可显示)
| 二进制 | 十进制 | 十六进制 | 英文缩写 | 可以显示的表示法 | 字符名称/代表意义 |
|---|---|---|---|---|---|
| 0000 0000 | 0 | 00 | NUL | ␀ | 空字符(Null) |
| 0000 0001 | 1 | 01 | SOH | ␁ | 标题开始 |
| 0000 0010 | 2 | 02 | STX | ␂ | 本文开始 |
| 0000 0011 | 3 | 03 | ETX | ␃ | 本文结束 |
| 0000 0100 | 4 | 04 | EOT | ␄ | 传输结束 |
| 0000 0101 | 5 | 05 | ENQ | ␅ | 请求 |
| 0000 0110 | 6 | 06 | ACK | ␆ | 确认回应 |
| 0000 0111 | 7 | 07 | BEL | ␇ | 响铃 |
| 0000 1000 | 8 | 08 | BS | ␈ | 退格 |
| 0000 1001 | 9 | 09 | HT | ␉ | 水平定位符号 |
| 0000 1010 | 10 | 0A | LF | ␊ | 换行键 |
| 0000 1011 | 11 | 0B | VT | ␋ | 垂直定位符号 |
| 0000 1100 | 12 | 0C | FF | ␌ | 换页键 |
| 0000 1101 | 13 | 0D | CR | ␍ | 归位键 |
| 0000 1110 | 14 | 0E | SO | ␎ | 取消变换(Shift out) |
| 0000 1111 | 15 | 0F | SI | ␏ | 启用变换(Shift in) |
| 0001 0000 | 16 | 10 | DLE | ␐ | 跳出数据通讯 |
| 0001 0001 | 17 | 11 | DC1 | ␑ | 设备控制一(XON 启用软件速度控制) |
| 0001 0010 | 18 | 12 | DC2 | ␒ | 设备控制二 |
| 0001 0011 | 19 | 13 | DC3 | ␓ | 设备控制三(XOFF 停用软件速度控制) |
| 0001 0100 | 20 | 14 | DC4 | ␔ | 设备控制四 |
| 0001 0101 | 21 | 15 | NAK | ␕ | 确认失败回应 |
| 0001 0110 | 22 | 16 | SYN | ␖ | 同步用暂停 |
| 0001 0111 | 23 | 17 | ETB | ␗ | 区块传输结束 |
| 0001 1000 | 24 | 18 | CAN | ␘ | 取消 |
| 0001 1001 | 25 | 19 | EM | ␙ | 连接介质中断 |
| 0001 1010 | 26 | 1A | SUB | ␚ | 替换 |
| 0001 1011 | 27 | 1B | ESC | ␛ | 跳出 |
| 0001 1100 | 28 | 1C | FS | ␜ | 文件分割符 |
| 0001 1101 | 29 | 1D | GS | ␝ | 组群分隔符 |
| 0001 1110 | 30 | 1E | RS | ␞ | 记录分隔符 |
| 0001 1111 | 31 | 1F | US | ␟ | 单元分隔符 |
| 0111 1111 | 127 | 7F | DEL | ␡ | 删除 |
ASCII可显示字符
| 二进制 | 十进制 | 十六进制 | 字符 |
|---|---|---|---|
| 0010 0000 | 32 | 20 | (空格)(␠) |
| 0010 0001 | 33 | 21 | ! |
| 0010 0010 | 34 | 22 | " |
| 0010 0011 | 35 | 23 | # |
| 0010 0100 | 36 | 24 | $ |
| 0010 0101 | 37 | 25 | % |
| 0010 0110 | 38 | 26 | & |
| 0010 0111 | 39 | 27 | ' |
| 0010 1000 | 40 | 28 | ( |
| 0010 1001 | 41 | 29 | ) |
| 0010 1010 | 42 | 2A | * |
| 0010 1011 | 43 | 2B | + |
| 0010 1100 | 44 | 2C | , |
| 0010 1101 | 45 | 2D | - |
| 0010 1110 | 46 | 2E | . |
| 0010 1111 | 47 | 2F | / |
| 0011 0000 | 48 | 30 | 0 |
| 0011 0001 | 49 | 31 | 1 |
| 0011 0010 | 50 | 32 | 2 |
| 0011 0011 | 51 | 33 | 3 |
| 0011 0100 | 52 | 34 | 4 |
| 0011 0101 | 53 | 35 | 5 |
| 0011 0110 | 54 | 36 | 6 |
| 0011 0111 | 55 | 37 | 7 |
| 0011 1000 | 56 | 38 | 8 |
| 0011 1001 | 57 | 39 | 9 |
| 0011 1010 | 58 | 3A | : |
| 0011 1011 | 59 | 3B | ; |
| 0011 1100 | 60 | 3C | < |
| 0011 1101 | 61 | 3D | = |
| 0011 1110 | 62 | 3E | > |
| 0011 1111 | 63 | 3F | ? |
| 0100 0000 | 64 | 40 | @ |
| 0100 0001 | 65 | 41 | A |
| 0100 0010 | 66 | 42 | B |
| 0100 0011 | 67 | 43 | C |
| 0100 0100 | 68 | 44 | D |
| 0100 0101 | 69 | 45 | E |
| 0100 0110 | 70 | 46 | F |
| 0100 0111 | 71 | 47 | G |
| 0100 1000 | 72 | 48 | H |
| 0100 1001 | 73 | 49 | I |
| 0100 1010 | 74 | 4A | J |
| 0100 1011 | 75 | 4B | K |
| 0100 1100 | 76 | 4C | L |
| 0100 1101 | 77 | 4D | M |
| 0100 1110 | 78 | 4E | N |
| 0100 1111 | 79 | 4F | O |
| 0101 0000 | 80 | 50 | P |
| 0101 0001 | 81 | 51 | Q |
| 0101 0010 | 82 | 52 | R |
| 0101 0011 | 83 | 53 | S |
| 0101 0100 | 84 | 54 | T |
| 0101 0101 | 85 | 55 | U |
| 0101 0110 | 86 | 56 | V |
| 0101 0111 | 87 | 57 | W |
| 0101 1000 | 88 | 58 | X |
| 0101 1001 | 89 | 59 | Y |
| 0101 1010 | 90 | 5A | Z |
| 0101 1011 | 91 | 5B | [ |
| 0101 1100 | 92 | 5C | \ |
| 0101 1101 | 93 | 5D | ] |
| 0101 1110 | 94 | 5E | ^ |
| 0101 1111 | 95 | 5F | _ |
| 0110 0000 | 96 | 60 | ` |
| 0110 0001 | 97 | 61 | a |
| 0110 0010 | 98 | 62 | b |
| 0110 0011 | 99 | 63 | c |
| 0110 0100 | 100 | 64 | d |
| 0110 0101 | 101 | 65 | e |
| 0110 0110 | 102 | 66 | f |
| 0110 0111 | 103 | 67 | g |
| 0110 1000 | 104 | 68 | h |
| 0110 1001 | 105 | 69 | i |
| 0110 1010 | 106 | 6A | j |
| 0110 1011 | 107 | 6B | k |
| 0110 1100 | 108 | 6C | l |
| 0110 1101 | 109 | 6D | m |
| 0110 1110 | 110 | 6E | n |
| 0110 1111 | 111 | 6F | o |
| 0111 0000 | 112 | 70 | p |
| 0111 0001 | 113 | 71 | q |
| 0111 0010 | 114 | 72 | r |
| 0111 0011 | 115 | 73 | s |
| 0111 0100 | 116 | 74 | t |
| 0111 0101 | 117 | 75 | u |
| 0111 0110 | 118 | 76 | v |
| 0111 0111 | 119 | 77 | w |
| 0111 1000 | 120 | 78 | x |
| 0111 1001 | 121 | 79 | y |
| 0111 1010 | 122 | 7A | z |
| 0111 1011 | 123 | 7B | { |
| 0111 1100 | 124 | 7C | | |
| 0111 1101 | 125 | 7D | } |
| 0111 1110 | 126 | 7E | ~ |
4.4 布尔类型(boolean )
布尔类型又称逻辑类型,只有两个值true和false,分别代表布尔逻辑中的“真”和“假”,布尔值不能与整数类型进行转换。布尔类型通常被用在流程控制中作为判断条件。
5 、运算符
5.1 赋值运算符
赋值运算符是以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是将右方操作数所含的值赋值给左方的操作数。
5.2 算术运算符
| 运算符 | 说明 | 实例 | 结果 |
|---|---|---|---|
| + | 加 | 12.45f+15 | 27.45 |
| - | 减 | 4.56-0.16 | 4.4 |
| * | 乘 | 5*12 | 60 |
| / | 除 | 7/2 | 3 |
| % | 取余数 | 12%10 | 2 |
5.3 自增和自减运算符
自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值增1或减1。
- 放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。
- 放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。
5.4 比较运算符
| 运算符 | 作用 | 举例 | 操作数据 | 结果 |
|---|---|---|---|---|
| > | 比较左方是否大于右方 | 'a'>'b' | 整型、浮点型、字符型 | false |
| < | 比较左方是否小于右方 | 156 < 456 | 整型、浮点型、字符型 | false |
| == | 比较左方是否等于右方 | 'c'=='c' | 基本数据类型、引用型 | true |
| >= | 比较左方是否大于等于右方 | 479>=426 | 整型、浮点型、字符型 | True |
| <= | 比较左方是否小于等于右方 | 12.45<=45.5 | 整型、浮点型、字符型 | true |
| != | 比较左方是否不等于右方 | 'y'!='t' | 基本数据类型、引用型 | true |
说明:比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,但两个对象的内存地址是不同的。使用比较运算符仍然会返回false。
5.5 逻辑运算符
| 运算符 | 含义 | 用法 | 结合方向 |
|---|---|---|---|
| &&、& | 逻辑与 | op1&&op2 | 左到右 |
| || | 逻辑或 | op1||op2 | 左到右 |
| ! | 逻辑非 | !op | 右到左 |
5.6 位运算符
| 运算符 | 用法 | 含义 | 运算分类 |
|---|---|---|---|
| ~ 非 | ~op1 | 对op1操作数按位取反 | 按位运算 |
| & 与 | op1 & op2 | op1和op2按位相与 | 按位运算 |
| | 或 | op1 | op2 | op1和op2按位相或 | 按位运算 |
| ^ 异或 | op1 ^ op2 | op1和op2按位异或 | 按位运算 |
| << 左移位 | op1 << op2 | op1按位左移op2次 | 移位运算符 |
| >> 右移位 | op1 >> op2 | op2按位右移op2次 | 移位运算符 |
| >>> 无符号右移位 | op1 >>> op2 | op2不带符号按位右移op2次 | 移位运算符 |
应用:。
5.7 三元运算符
三元运算符使用格式为:条件式?值1:值2
三元运算符的运算规则为:若条件式的值为true,则整个表达式取值1,否则取值2。
int a = 5;
int b = 6;
int c = a > b ? a-b : b-a; // 结果为15.8 运算符优先级
通常优先级由高到低的顺序依次是:
增量和减量运算
算术运算
比较运算
逻辑运算
赋值运算
如果两个运算有相同的优先级,那么在左边的表达式要比在右边的表达式先被处理。
| 描述(优先级从高到低) | 运算符 |
|---|---|
| 括号 | ( ) |
| 正负号 | + - |
| 一元运算符 | ++ -- ! |
| 乘除 | * / % |
| 加减 | + - |
| 移位运算 | << >> >>> |
| 比较大小 | < > >= <= |
| 比较是否相等 | == != |
| 按位与运算 | & |
| 按位异或运算 | ^ |
| 按位或运算 | | |
| 逻辑与运算 | && |
| 逻辑或运算 | || |
| 三元运算符 | ?: |
| 赋值运算符 | = += -= *= /= %= |
6、数据类型转换
6.1 自动类型转换
Java的8个基本数据类型可以进行混合运算。不同类型的数据在运算过程中,首先会自动转换为同一类型,然后才进行运算。数据类型可以根据占用存储空间大小分为高低级别,占用空间越小,级别越低,占用空间越大,级别越高。自动类型转换遵循低级到高级转换的规则。如图1所示。从左到右的数据类型不断升高,箭头指明了自动类型转换的规则。

6.2 强制类型转换
当把高级别(即占用存储空间较大)的数据类型赋值给低级别(即占用存储空间较小)的数据类型时,必须进行的强制类型转换。其语法格式如下:
(类型)(表达式)
double a = 1.20d;
int b = (int) a; // 结果为1 基本数据类型的强制类型转换需要注意数据完整性的问题,当把高级的数据类型强制转换为低级的数据类型时,如果数值超出低级数据类型的取值范围,数值将被截取,导致数据丢失、不完整。
7、流程控制
7.1 条件语句
(1)if条件语句
/** 条件表达式为布尔表达式
* 结果为true则运行语句序列1,为false则进行下一个判断
* 直到某个判断成功,或所有判断结束。
*/
if(条件表达式1) {
语句序列1;
}
else if(条件表达式2){
语句序列2;
}
...
else if(表达式n){
语句序列n;
}(2)switch多分支语句
switch(表达式) { // 表达式==常量k,就跳转到哪个分支。
case 常量1: // 常量仅为整数或字符
语句1;
[break;]
case 常量2:
语句2;
[break;]
...
case 常量n:
语句n;
[break;]
default:
默认处理语句;
[break;]
}7.2 循环语句
(1)while循环语句
// 条件表达式结果为true,运行执行语句后,继续判定,直到为false为止。
while(条件表达式){
执行语句;
}(2)do…while循环语句
// 先运行一遍执行语句后,再对条件表达式判别,条件表达式结果为true,继续运行执行语句后,继续判定,直到为false为止。
do {
执行语句;
}
while(条件表达式);(3)for循环语句
// 先运行表达式1,然后运行条件表达式2,结果为true,运行语句序列后,运行表达式3,然后再运行条件表达式2,结果为true继续,结果为false结束循环。
for(表达式1 ; 条件表达式2 ; 表达式3) {
语句序列;
}7.3 循环跳转
(1)break语句
说明:使用break语句可以跳出指定的循环。
语法:
break 标号; // 标号可不加,表示对当前循环做操作// 以for循环为例
loop: for () {
for () {
break loop; // 跳出loop指定的循环。
{
// 后面的代码块全都不会执行。
}
}
}(2)continue语句
说明:使用continue语句可以直接跳过指定循环的当次循环。
语法:
continue 标号; // 标号可不加,表示对当前循环做操作// 以for循环为例
boolean flag = true;
outer: for (int i = 0 ; i < 5 ; i++) {
for (int j = 0 ; j < 5 ; j++) {
if (j >= 4) {
continue outer; // continue后面的代码块都不会执行。
}
flag = !flag; // 总共执行20次,结果为true
}
}8、字符串
8.1 创建字符串
(1)不可变字符串
在Java语言中,字符串是一个对象,因此它可以像创建其他类对象一样,使用new关键字来创建字符串对象。创建对象要使用String类的构造方法,其常用构造方法有:
new String()
该方法产生一个空字符串(不为null)。
new String(char[] value)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有元素连接的结果。
// 例1:
char[] a = {'a', 'b', 'c', 'd'};
String s = new String(a);
// 等价于
String s = new String(“abcd”);new String(char a[], int offset, int length)
提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。
// 例2:
char[] a = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
String s = new String(a, 2, 4);
// 等价于
String s = new String("cdef");- 字符串常量的引用赋值给一个字符串变量。
// 例3:
String s = "hello,";
s = s + "world";(2)可变字符串
- 用法
/**
* Type value可为空
* Type可为CharSequence、int、String
**/
StringBuffer str1 = new StringBuffer(Type value);
StringBuilder str2 = new StringBuilder(Type value);| 方法 | 功能 | 说明 |
|---|---|---|
| str.append(Type value) | 尾部追加 | |
| str.delete(int start, int end) | 删除 | |
| str.insert(int value1, Type value2) | 插入 | 在索引位添加 |
区别
- 线程安全
StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。
StringBuffer 代码片段:
@Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; }- 缓冲区
StringBuffer 代码片段:
private transient char[] toStringCache; @Override public synchronized String toString() { if (toStringCache == null) { toStringCache = Arrays.copyOfRange(value, 0, count); } return new String(toStringCache, true); }StringBuilder 代码片段:
@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。
- 性能
既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。大部分情况下。
8.2 字符串操作
| 方法 | 功能 | 说明 |
|---|---|---|
| str.length() | 获取字符串长度 | 获取字符串长度 |
| str.indexOf(String s) | 字符串查找 | 返回指定字符串(字符)s在字符串str中首次出现的索引位置。如果没有检索到字符串s,返回-1。 |
| str.lastIndexOf(String s) | 字符串查找 | 返回指定字符串(字符)s在字符串str中最后一次出现的索引位置。如果没有检索到字符串s,返回-1。如果s = "";则返回值与length()相同。 |
| str.charAt(int index) | 获取指定索引位置的字符 | 将指定索引处的字符返回。 |
| str.substring(int beginIndex) | 获取子字符串 | 从指定的索引位置开始截取直到该字符串的结尾的子串。 |
| str.substring(int beginIndex, int endIndex) | 获取子字符串 | 从字符串某一索引位置开始截取至某一索引位置结束的子串。 |
| str.trim() | 去除空格 | 返回字符串的副本,忽略前导空白和尾部空格。 |
| str.replace(char oldChar, char newChar); | 字符串替换 | 将指定的字符或字符串(oldChar)替换成新的字符或字符串(newChar)。 |
| str.startsWith(String prefix) | 判断字符串的开始 | 判断字符串是否以prefix开始。返回值为boolean类型。 |
| str.endsWith(String suffix) | 判断字符串的结尾 | 判断字符串是否以suffix结束。返回值为boolean类型。 |
| str.equals(String others) | 判断字符串是否相等 | 如果两个字符串具有相同的字符和长度,使用equals()方法进行比较时,相等则返回true,否则返回false。 |
| str.equalsIgnoreCase(String otherstr) | 判断字符串是否相等 | 使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等。返回结果仍为boolean类型。 |
| str.compareTo(String otherstr) | 按字典顺序比较两个字符串 | 按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值。如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;之前,为负数,相等为0。 |
| str.toLowerCase() | 字母大小写转换 | 将字符串内的所有字符从大写字母改写为小写字母 |
| str.toUpperCase() | 字母大小写转换 | 将字符串内的所有字符从小写字母改写为大写字母 |
| str.split(String sign) | 字符串分割 | 根据给定的分隔符sign对字符串进行拆分。 |
| str.split(String sign, int limit) | 字符串分割 | 根据给定的分割符sign对字符串进行拆分,并限定拆分的次数limit。 |
8.3 格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。
(1)format(String format, Object …args)
该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。
语法:
str.format(String format, Object …args)
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。
(2)format(Local local,String format,Object…args)
使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
语法:
str.format(Local local, String format, Object …args)
- local:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。
- format:格式字符串。
- args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为0。
(1)常规类型的字符串格式化
| 转 换 符 | 说 明 | 示 例 |
|---|---|---|
| %s | 字符串类型 | "mingrisoft" |
| %c | 字符类型 | 'm' |
| %b | 布尔类型 | true |
| %d | 整数类型(十进制) | 99 |
| %x | 整数类型(十六进制) | FF |
| %o | 整数类型(八进制) | 77 |
| %f | 浮点类型 | 99.99 |
| %a | 十六进制浮点类型 | FF.35AE |
| %e | 指数类型 | 9.38e+5 |
| %g | 通用浮点类型(f和e类型中较短的) | |
| %h | 散列码 | |
| %% | 百分比类型 | % |
| %n | 换行符 | |
| %tx | 日期与时间类型(x代表不同的日期与时间转换符 |
| 标 志 | 说 明 | 示 例 | 结 果 |
|---|---|---|---|
| + | 为正数或者负数添加符号 | ("%+d",15) | +15 |
| − | 左对齐 | ("%-5d",15) | |15 | |
| 0 | 数字前面补0 | ("%04d", 99) | 0099 |
| 空格 | 在整数之前添加指定数量的空格 | ("% 4d", 99) | | 99| |
| , | 以“,”对数字分组 | ("%,f", 9999.99) | 9,999.990000 |
| ( | 使用括号包含负数 | ("%(f", -99.99) | (99.990000) |
| # | 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 | ("%#x", 99)("%#o", 99) | 0x630143 |
| < | 格式化前一个转换符所描述的参数 | ("%f和%❤️.2f", 99.45) | 99.450000和99.45 |
| $ | 被格式化的参数索引 | ("%1d,s", 99,"abc") | 99,abc |
(2)日期和时间字符串格式化
表1 常见的日期时间转换符
| 转换符 | 说明 | 示例 |
|---|---|---|
| %te | 一个月中的某一天(1-31) | 2 |
| %tb | 指定语言环境的月份简称 | Feb(英文)、二月(中文) |
| %tB | 指定语言环境的月份全称 | February(英文)、二月(中文) |
| %tA | 指定语言环境的星期几全称 | Monday(英文)、星期一(中文) |
| %ta | 指定语言环境的星期几简称 | Mon(英文)、星期一(中文) |
| %tc | 包括全部日期和时间信息 | 星期二 三月 25 13:37:22 CST 2008 |
| %tY | 4位年份 | 2008 |
| %tj | 一年中的第几天(001-366) | 085 |
| %tm | 月份 | 03 |
| %td | 一个月中的第几天(01-31) | 02 |
| %ty | 二位年份 | 08 |
表2 时间格式化转化符
| 转换符 | 说明 | 示例 |
|---|---|---|
| %tH | 2位数字的24时制的小时(00-23) | 14 |
| %tI | 2位数字的12时制的小时(01-12) | 05 |
| %tk | 2位数字的24时制的小时(0-23) | 5 |
| %tl | 2位数字的12时制的小时(1-12) | 10 |
| %tM | 2位数字的分钟(00-59) | 05 |
| %tS | 2位数字的秒数(00-60) | 12 |
| %tL | 3位数字的毫秒数(000-999) | 920 |
| %tN | 9位数字的微秒数(000000000-999999999) | 062000000 |
| %tp | 指定语言环境下上午或下午标记 | 下午(中文)、pm(英文) |
| %tz | 相对于GMT RFC 82 格式的数字时区偏移量 | +0800 |
| %tZ | 时区缩写形式的字符串 | CST |
| %ts | 1970-01-01 00:00:00至现在经过的秒数 | 1206426646 |
| %tQ | 1970-01-01 00:00:00至现在经过的毫秒数 | 1206426737453 |
表3 常见的日期和时间组合的格式
| 转换符 | 说明 | 示例 |
|---|---|---|
| %tF | “年-月-日”格式(四位年份) | 2008-03-25 |
| %tD | “月/日/年”格式(二位年份) | 03/25/08 |
| %tc | 全部日期和时间信息 | 星期二 三月 25 15:20:00 CST 2008 |
| %tr | “时:分:秒 PM(AM)”格式(12时制) | 03:22:06 下午 |
| %tT | “时:分:秒”格式(24时制) | 15:23:50 |
| %tR | “时:分”格式(24时制) | 15:25 |
8.4 使用正则表达式
表1 正则表达式中的元字符
| 元字符 | 正则表达式中写法 | 意义 |
|---|---|---|
| . | . | 代表任意一个字符 |
| \d | \\d | 代表0~9的任何一个数字 |
| \D | \\D | 代表任何一个非数字字符 |
| \s | \\s | 代表空白字符。如‘\t’、‘\n’ |
| \S | \\S | 代表非空白字符 |
| \w | \\w | 代表可用做标识符的字符,但不包括“$”符 |
| \W | \\W | 代表不可用于标识符的字符 |
| \p | \\p | 代表小写字母 |
| \p | \\p | 代表大写字母 |
| \p | \\p | ASCII字符 |
| \p | \\p | 字母字符 |
| \p | \\p | 十进制数字。即[0~9] |
| \p | \\p | 数字或字母字符 |
| \p | \\p | 标点符号:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~ |
| \p | \\p | 可见字符:[\p\p{Punct}] |
| \p | \\p | 可打印字符:[\p\x20] |
| \p | \\p | 空格或制表符:[\t] |
| \p | \\p | 控制字符:[\x00-\x1F\x7F] |
说明:在正则表达式中“.”代表任何一个字符,因此在正则表达式中如果向使用普通意义的点字符“.”,必须使用转义字符“\”。
在正则表达式中可以使用方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如reg =“[abc]4”。这样字符串“a4”、“b4”、“c4”都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如:
[ABC]:代表A、B、C之中任何一个。
[^456]:代表4、5、6之外的任何字符。
[a-r]:代表a~r的任何一个。
[a-zA-Z]:可表示任意一个英文字母。
[a-e[g-z]]:代表a-e,或g-z中的任何一个字母。(并运算)
[a-o&&[def]]:代表字母d、e、f。(交运算)
[a-d&&[^bc]]:代表字母a、d。(差运算)
表2 特殊字符
| 特别字符 | 描述 |
|---|---|
| $ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用\$。 |
| ( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
| * | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
| + | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
| . | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
| [ | 标记一个中括号表达式的开始。要匹配 [,请使用 [。 |
| ? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 |
| \ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\' 匹配 "",而 '(' 则匹配 "("。 |
| ^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。 |
| { | 标记限定符表达式的开始。要匹配 {,请使用 {。 |
| | | 指明两项之间的一个选择。要匹配 |,请使用 |。 |
表3 非打印字符
| 字符 | 描述 |
|---|---|
| \cx | 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 |
| \f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
| \n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
| \r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 |
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
| \t | 匹配一个制表符。等价于 \x09 和 \cI。 |
| \v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
表4 限定符
| 限定修饰符 | 意义 | 示例 |
|---|---|---|
| ? | 0次或1次 | A? |
| * | 0次或多次 | A* |
| + | 一次或多次 | A+ |
| {n} | 正好出现n次 | A{2} |
| {n,} | 至少出现n次 | A{3,} |
| {n,m} | 出现n次至m次 | A{2,6} |
9、数组
9.1 一维数组的创建和使用
定义:数组是具有相同数据类型的一组数据的集合。
语法:
// 声明
数组类型 数组名[]; // 或 数组类型[] 数组名;
// 内存分配
// 数组长度:数组中成员的个数,即数组的大小
数组名字 = new 数组类型[数组长度]; // 可以声明的时候直接分配内存
// 初始化
Type arrayName[] = new Type[]{a,b,c,...}; // 相当于:arrayName[0] = a, arrayName[1] = b, arrayName[2] = c遍历:
可采用循环进行遍历数组。
ForEach循环遍历
/**
* 类型:是定义变量的类型。
* var:是定义的遍历集合的变量。
* 集合:是被遍历的集合对象或数组。
* */
for(类型 var : 集合) {
循环体
}9.2 多维数组(以二维数组为例)
定义:如果一维数组中的每个元素保存的都是一个数组对象,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。
语法
// 声明
数组类型 数组名[][]; // 或 数组类型[][] 数组名;
// 内存分配
// 数组长度:数组中成员的个数,即数组的大小
数组名字 = new 数组类型[数组长度][数组长度]; // 可以声明的时候直接分配内存
// 初始化
Type arrayname[][] = new Type[][]{
{value1,value2…valuen},
{value1,value2…valuen},
...
};遍历
采用双层循环进行遍历
用法
常用于
动态创建二维数组
int row = 5, col = 10;
// 先创建一维数组
int[][] a = new int[row][];
for (int i = 0 ; i < row ; i++) {
a[i] = new int[col];
}