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填充高位

# 数学函数与常量

文档地址 (opens new window)

# 数值类型之间的转换

黑色箭头代表无信息丢失的转换,红色箭头代表可能有精度的损失。

image-20220401225854471

# 强制类型转换

举个栗子

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

查询地址 (opens new window)

# 构建字符串

构建字符串时,使用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接收浮点数

# 格式化输出

相关文档 (opens new window)

# 控制流程

# 块作用域

块,也叫复合语句,是指由一对花括号括起来的若干条简单的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);

文档地址 (opens new window)

# 数组

在声明数组变量时,需要指出数组类型和数组变量的名字,如:

// 创建了一个可以存储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};

# 数组拷贝

相关文档 (opens new window)

# 命令行参数

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实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。