目录
JAVA程序的基本结构
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("Hello, JAVA!");
}
}
- Java 入口程序规定的方法必须是静态方法
- 方法名必须为 main,括号内的参数必须是String数组
- main 方法退出时,若程序正常退出,则退出代码为 0;若希望返回其他代码,则需使用
System.exit(int status)
方法。
注释方法
// 单行注释
/*
多行注释
*/
/**
* 另一种多行注释
* 这种注释方法可用于自动生成文档
*/
基本数据类型
整型
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648 ~ 2 147 483 647 (正好超过 20 亿) |
short | 2字节 | -32 768 ~ 32 767 |
long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
byte | 1字节 | -128 ~ 127 |
- 整型不存在无符号数
- 数字前加上"0x"或"0X"(如0xCAFE),则表示十六进制数;同理,数字前加上"0b"或"0B",则表示二进制数
- 较长数字之间可用"_"连接,便于阅读(如 1_000_000)
浮点型
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位) |
double | 8字节 | 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位) |
- 当使用十六进制科学计数法表示时,使用 “p” 替代十进制下 “e” 的位置,此时"p"表示指数,基数是 2 (如 0.125 = 2 − 3 0.125 = 2^{-3} 0.125=2−3,十六进制表示为 0x1.0p-3)
- 常量 Double.NaN:Not a Number,使用 Double.isNaN() 判断
- 常量 Double.POSITIVE_INFINITY 和 Double.NEGTIVE_INFINITY:正负无穷大,使用 Double.isInfinite() 判断
字符(char)型和 Unicode
特殊转义字符
转义字符 | 名称 | Unicode 值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
- char 类型用单引号表示,如 ‘A’
- \uxxxx 可以用十六进制表示 Unicode 字符,xxxx 为 4 个十六进制数
- 在 Java 中,char 类型描述了 UTF-16 编码中的一个代码单元
注意:在用"\uxxxx"表示字符时,转义序列会先解析,再运行程序,即使用时不受引号限制。例如:public static void main(String\u005B\ u00SD args)
也是正确的,其中\u005B
和\u005D
分别表示"[""]",转义后为public static void main(String[] args)
。
布尔(boolean)型
- 用于判断逻辑条件
- 取值有
true
和false
变量
- 变量名字母开头,可使用数字,大小写敏感
- 变量名应避免使用 Java 关键字
- 可以先定义变量,然后再初始化;或者在定义时直接初始化变量;不可使用未初始化的变量
- 使用
final
关键字定义常量,且需在定义时初始化
// 变量定义
int days;
double salary;
boolean done;
// 变量初始化
double distance;
distance = 5.1729;
int vacationDays = 12;
// 定义常量
final double pi = 3.14;
运算符
基本运算:加(+)、减(-)、乘(×)、除(/)、取余(%),当除数为 0,得到无穷大或 NaN。
数学函数与常量
Math.sqrt(x)
:开方, x \sqrt x xMath.pow(x, a)
:求幂, x a x^a xaMath.round(x, a)
:四舍五入,保留 a 位小数,返回long
类型Math.sin(x)
:取正弦, s i n ( x ) sin(x) sin(x)Math.cos(x)
:取余弦, c o s ( x ) cos(x) cos(x)Math.tan(x)
:取正切, t a n ( x ) tan(x) tan(x)Math.atan(y/x)
:取反正切, a r c t a n ( y / x ) arctan(y/x) arctan(y/x)Math.atan2(y, x)
:取反正切(可确定象限),值域为 [ − π , π ] [-\pi, \pi] [−π,π]Math.exp(x)
:e 为基数求幂, e x e^x exMath.log(x)
:自然对数, l n ( x ) ln(x) ln(x)Math.log10(x)
:以 10 为底的对数, l o g 10 ( x ) log_{10}(x) log10(x)Math.PI
:圆周率常量, π \pi πMath.E
:自然常数, e e e
类型转换
- 有时也使用强制类型转换,但会丢失一部分精度
- 不可使用
boolean
和其他数值类型强制转换
// 强制类型转换
double x = 7.996;
int nx = (int) x; // nx = 7
赋值与自增减
运算符 | 名称 | 功能 |
---|---|---|
= | 赋值 | 将值赋给变量名 int x = 1; |
+= -= *= /= %= | 结合赋值 | 以 += 为例 a += b; 等价于 a = a + b; |
++ - - | 自增/自减 | 以 ++ 为例 a = i++; 等价于 a = i; i = i + 1; 若是 ++i,则 i 先加 1,后赋值 |
关系和 boolean 运算符
运算符 | 功能 |
---|---|
== != | 判断是否等值 |
> < >= <= | 判断大小 |
&& || ! | 与 或 非 |
条件 ? 表达式1 : 表达式2 | 三元操作符 条件为 true,执行表达式1 条件为 false,执行表达式2 |
- 逻辑运算符按照“短路”求值
位运算
运算符 | 名称 | 功能 |
---|---|---|
& | 与 | 按位与 |
| | 或 | 按位或 |
^ | 异或 | 按位异或 |
~ | 非 | 所有位取反 |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,低位丢弃,高位补符号位 |
>>> | 逻辑右移 | 各二进位全部右移若干位,低位丢弃,高位补0 |
括号与运算符级别
运算符 | 结合性 |
---|---|
[] . () (方法调用) | 从左向右 |
! ~ ++
−
−
--
−− +(一元操作符) -(一元操作符) (强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< > <= >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向左 |
字符串
字符串类型String
是引用类型,String
是 Java 的一个预定义类,可存储 0 个到任意个字符。
不可变性
String
类没有提供用于修改字符串的方法。如果需要修改字符串内容,则需先取出子串,然后拼接上所需内容,如下例所示。
String greeting = "Hello";
greeting = greeting.substring(0, 3) + "p!"; // greeting 变为 Help!
可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量, 原始字符串与复制的字符串共享相同的字符。
空串与 null 串
空串 “” 是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)。String
变量还可以存放一个特殊的值,名为 null,这表示目前没有任何对象与该变量关联。
// 判别空串
if (str.length() == 0)
if (str.equals(""))
// 判别不是 null 串
if (str != null && str.length() != 0)
常用方法
String.length()
:返回字符串长度String.toLowerCase()
或String.toUpperCase()
:返回一个新字符串。 这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。String.trim()
:返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。String.substring(int beginlndex )
或String.substring(int beginlndex, int endlndex )
:返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-1 的所有代码单元。String.join(CharSequence delimiter, CharSequence ... elements)
:返回一个新字符串, 用给定的定界符连接所有元素。String.equals(0bject other)
:如果字符串与 other 相等, 返回 true。String.equalsIgnoreCase((String other)
:如果字符串与 other 相等 ( 忽略大小写,) 返回 true。String.compareTo(String other)
:按照字典顺序,如果字符串位于 other 之前, 返回一个负数;如果字符串位于 other 之后,返回一个正数;如果两个字符串相等,返回 0。String.replace( CharSequence oldString,CharSequence newString)
:返回一个新字符串。这个字符串用 newString 代替原始字符串中所有的 oldString。可以用 String 或 StringBuilder 对象作为 CharSequence 参数。String.startsWith(String prefix)
或String.endsWith(String suffix)
:如果字符串以 suffix 开头或结尾, 则返回 true。String.indexOf(String str)
或String.indexOf(String str, int fromlndex )
或String.indexOf(int cp)
或String.indexOf(int cp, int fromlndex )
:返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或 fromlndex 开始计算。如果在原始串中不存在 str,返回 -1。String.1astIndexOf(String str)
或String1astIndexOf(String str, int fromlndex)
或String.lastindexOf(int cp)
或String.1astindexOf(int cp, int fromlndex)
:返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。这个位置从原始串尾端或 fromlndex 开始计算。String.charAt(n)
:返回位置 n 的字符, n = 1 , 2 , . . . , l e n g t h − 1 n = 1,2,...,length-1 n=1,2,...,length−1String.codePointAt(int Index)
:返回从给定位置开始的码点。String.offsetByCodePoints(int startlndex, int cpCount)
:返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。String.codePoints()
:将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中。new String(int[] codePoints, int offset, int count)
:用数组中从 offset 开始的 count 个码点构造一个字符串。String.codePointCount(int startlndex , int endlndex)
:返回startlndex 和 endludex-l之间的代码点数量。没有配成对的代用字符将计入代码点。
字符串构造器(StringBuilder)
有些时候, 需要由较短的字符串构建字符串, 例如, 按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串, 都会构建一个新的 String 对象,既耗时,又浪费空间。使用 StringBuilder 类就可以避免这个问题的发生。
// 构造对象
StringBuilder builder = new StringBuilderO;
// 在末尾拼接一个字符
builder.append(ch);
// 在末尾拼接一个字符串
bui1der.append(str);
// 生成字符串
String completedString = builder.toStringO;
常用方法:
new StringBuilder()
:构造一个空的字符串构建器。StringBuilder.length()
:返回构建器或缓冲器中的代码单元数量。StringBuilder.append(char c)
或StringBuilder.append(String str)
或StringBuilder.appendCodePoint(int cp)
:追加一个代码单元或字符串或代码点,并将其转换为一个或两个代码单元并返回 this。StringBuilder.setCharAt(int i ,char c)
:将第 i 个代码单元设置为 c。StringBuilder.insert(int offset,String str)
或StringBuilder.insert(int offset,Char c)
:在 offset 位置插入一个字符串或代码单元并返回 this。StringBuilder.delete(1 nt startindex,int endlndex)
:删除偏移量从 startindex 到 -endlndex-1 的代码单元并返回 this。StringBuilder.toString()
:返回一个与构建器或缓冲器内容相同的字符串。
参考资料:
- 《Java核心技术 卷1 基础知识》