Table of Contents generated with DocToc (opens new window)
Java对大小写敏感,如果出现了大小拼写错误,那程序将无法运行。
运行编译程序时,Java虚拟机将从指定类中的main方法开始执行,根据Java语言规范 (opens new window),main方法必须声明为public
# 数据类型
- Java是一种强类型语言,这就意味着必须为每一个变量声明一种类型。在Java中,一共有八种基本类型,其中有4种整型,2种浮点类型,1种字符类型,1种表示真值的boolean类型。
- Java中有一个能够表示任意精度的算术包,通常称之为”大数值“。虽然称之为大数值,但它不是一种新的Java类型,而是一个Java对象。
# 整型
整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型。
1字节 = 8位
类型 | 存储需求 |
---|---|
int | 4字节 |
short | 2字节 |
long | 8字节 |
byte | 1字节 |
# 浮点类型
浮点类型用于表示有小数部分的数值,在Java种有2种
类型 | 存储需求 |
---|---|
float | 4字节 |
double | 8字节 |
double又称双精度数值,float又称单精度数值
float类型的数值有一个后缀F。没有后缀的浮点数值默认为double类型
三个特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN
使用Double.isNaN方法可以检测特定值是否等于Double.NaN
# char类型
char类型用来表示单个字符,通常用来表示字符常量。
特殊字符的转义序列符
转义序列 | 名称 |
---|---|
\b | 退格 |
\t | 制表 |
\n | 换行 |
\r | 回车 |
/" | 双引号 |
/' | 单引号 |
\\ | 反斜杠 |
# boolean类型
boolean类型有两个值:false和true,用来判定逻辑条件。整型值和boolean值不能相互转换
# 变量
在Java中,每一个变量属于一种类型。在声明变量时,变量所属的类型位于变量名之前。
# 变量初始化
声明一个变量之后,必须用赋值语句对变量进行显式初始化,也就是必须给一个变量一个值。
# 常量
在Java中,利用关键字final指示常量。关键词final表示这个变量只能被赋值一次,一旦被赋值之后,就不能在更改了。习惯上,常量名使用全大写。
在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。类常量的定义位于main方法的外部,因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。
# 运算符
整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
# 自增运算符与自减运算符
前缀方式:++n,对变量值加1,先进行+1运算
后缀方式:n++,对变量值加1,使用变量原来的值
# 关系运算符与boolean运算符
符号 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
&& | 与 |
|| | 或 |
? | 三元 |
# 位运算符
符号 | 含义 |
---|---|
& | 与 |
| | 或 |
^ | 异或 |
~ | 非 |
>> | 二进制位右移操作 |
<< | 二进制位左移操作 |
>>> | 用0填充高位 |
# 数学函数与常量
# 数值类型之间的转换
黑色箭头代表无信息丢失的转换,红色箭头代表可能有精度的损失。
# 强制类型转换
举个栗子
double x = 9.99;
int nx = (int) x;
对于(int) Math.round(9.99)这种形式,round方法返回的结果为long类型,由于存在信息丢失的可能,使用强制类型转换,将long类型转换成int类型。
# 括号与运算符级别
http://c.biancheng.net/view/794.html
# 枚举类型
enum Size
{
SMALL, MEDIUM, LARGE, EXTRA_LARGE;
}
public class Test
{
// 执行输出结果
public static void main(String[] args)
{
Size s = Size.SMALL;
System.out.println(s);
}
}
# 字符串
Java没有内置的字符串类型,而是在标准的Java类库中提供了一个预定义类,叫做String。每个用双括号括起来的字符都是String类的一个实例。
# 子串
String的substring方法可以从一个较大的字符串中提取出一个子串。
# 拼接
使用+号拼接两个字符串,字符串与非字符串进行拼接时,会把非字符串自动转为字符串。
# 不可变字符串
String也叫不可变字符串,编译器可以让字符串共享。
# 检测字符串是否相等
可以使用equals方法检测两个字符串是否相等。
不能使用==运算符检测两个字符串是否相等,因为==看的是两个字符串是不是在同一个位置。可能会存在内容相同的多个字符串放置在不同的位置。
# 空串与Null串
空串指”“,是长度为0的字符串,调用以下代码检查
str.length() == 0;
str.equals("");
Null串表示目前没有任何对象与该变量关联。可调用以下代码检查
str == null;
# 字符串API
# 构建字符串
构建字符串时,使用String会每次都构建一个String对象,这个时候,很耗时,也浪费空间。使用StringBuilder可以避免这个问题的发生。
StringBuilder builder = new StringBuilder();
builder.append(ch);
builder.append(str);
String string = builder.toString();
# 输入输出
# 读取输入
Scanner in = new Scanner(System.in);
String name = in.nextLine();
nextLine方法接收可能包含空格的字符串
next方法接收一个单词
nextInt接收整数
nextDouble接收浮点数
# 格式化输出
# 控制流程
# 块作用域
块,也叫复合语句,是指由一对花括号括起来的若干条简单的Java语句。
块确定了变量的作用域。
一个块可以嵌套在另一个块中。
不能在嵌套的两个块中声明同名的变量。
# 条件语句
if
# 循环
- 当条件为true时,while循环执行一条语句。
- 希望循环体至少执行一次,使用do/while循环语句可以实现。
# 确定循环
- for循环语句
# 多重选择:switch语句
处理多个选项使用
case标签可以是:char,byte,short,int,枚举常量,字符串
# 中断控制流程语句
break 退出循环
continue 跳过这一步,走循环的下一步
# 大数值
BigInteger类实现了任意精度的整数运算
BigDecimal类实现了任意精度的浮点数运算
使用静态的valueOf方法可以将普通的数值转换成大数值,+和*需要使用add和multiply方法。
BigInteger a = BigInteger.valueOf(100);
BigInteger c = a.add(b);
BigInteger d = c.multiply(b);
# 数组
在声明数组变量时,需要指出数组类型和数组变量的名字,如:
// 创建了一个可以存储100个整数的数组
int[] a = new int[100];
一旦创建了数组,就不能再改变它的大小。如果经常需要在运行过程中扩展数组的大小,就应该使用另外一种数据结构——ArrayList。
# for each循环
利用Array类的toString方法,可以返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分割。
"[1,2,3,4,5,6]"
# 数组初始化以及匿名数组
// 使用这种语句,不需要调用new
int[] a = {1,2,3,4,5,6};
// 初始化匿名数组
new int[] {1,2,3,4,5,6};
# 数组拷贝
# 命令行参数
Java应用程序有带String args[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行参数。
public static void main(String[] args){
}
# 数组排序
使用Array类中的sort方法
这个方法使用了优化的快速排序算法
# 多维数组
int[][] magicSquare = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
}
要想快速的打印一个二位数组的数据元素列表,可以调用Array.deepToString(a)
# 不规则数组
Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。