数据类型
整形:用于表示没有小数部分的数值,允许负数。
有4种整形
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648~214783647(超过20亿) |
short | 2字节 | -32769~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 1字节 | -128~127 |
浮点类型:用于表示有小数部分的数值。
溢出和出错情况的三个特殊的浮点数值(一个正整数除以0结果为正无穷大,0/0或负数的平方根结果为NaN):
- 正无穷大
- 负无穷大
- NaN
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | ±3.40282347E+38F(有效位数是6~7位) |
double | 8字节 | ±1.79769313486231570E+308(有效位数为15位) |
char类型:单独的char类型应该只用于字符值的存储和使用;有符号和无符号的“char”型变量只能用于数值的存储和使用。
boolean类型:有两个值true和false,用来判定逻辑条件。
数值类型的转换:
数值类型之间的合法转换如下(实心箭头表示无信息丢失的转换,虚箭头表示可能有精度损失的转换)
必要的时候int类型的值会自动转换为double类型,但有时需要将double转换成int,就会用到强制类型转换,可能会丢失一些信息。
强制类型转换:在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名(如果强制后超出目标类型的范围就会截断成完全不同的值)
例:
double x = 9.997;
int nx = (int)x;
对浮点数进行舍入运算
double x = 9.997;
int nx = (int) Math.round(x);
变量与常量
变量:每个变量都有一个类型,变量名必须以字母开头并由字母或者数字构成的序列。
声明变量:声明变量之后必须用赋值语句对变量进行初始化。
int vacationDays;
vacationDays = 12;
double salary = 1.5;
boolean done;
常量:用final指示常量,只能被赋值一次,赋值后不能再改,习惯常量名全部用大写(类常量的定义位于main方法的外部,可以在同一个类的其他方法中使用这个常量)。
类常量实例:
public static final double CM_PER_INCH = 2.54;
运算符
算术运算符:+,-,*,/表示加、减、乘、除运算。参与/运算的两个操作数都是整数时,表示整数除法,否则表示浮点除法。整数的求余操作(取模操作)%。
运算符的使用:
x += 4; 等价于 x = x + 4;
自增自减 n++; n–;++n; --n;
检测等或不等 3 == 7或 3 != 7
有>、<、<=、>= 运算符
逻辑”与” && 和 逻辑”或” ||
x < y ? x : y\
位运算符:&(“and”) |(“or”) ^(“xor”) ~(“not”) 这些运算符按位模式处理,>>和<<将位模式左移或者右移,>>>会用0填充高位,没有<<<
运算符优先级
运算符 | 结合性 |
---|---|
[].() (方法调用) | 从左向右 |
! ~ ++ – + (一元运算)-(一元运算) ()(强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
l | 从左向右 |
&& | 从左向右 |
ll | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= l= ^= <<= >>= >>>= | 从右向左 |
字符串
从概念上来讲,java字符串就是Unicode字符序列。每个用双引号括起来的字符串都市String类的一个实例。(String类对象也称为不可变字符串,不能修改任何一个字符)
String e = “”’ //一个空串
String greeting = “Hello”; //定义字符串
String s = greeting.substring(0,3); //提取子串Hel
String e = “123”;
String message = greeting + e; //拼接字符串,结果为Hello123
String all = String.join("/" , “S” , “M” , “L” ,“XL”); //结果为S/M/L/XL
greeting = greeting.substring(0,3) + “p!”; //把greeting的值修改为"Help!"
s.equals(e); //检测两字符串是否相等
“Hel”.equals(s);
“Hello”.equalsIgnoreCase(“hello”); //不区分大小写检测是否相等
if(str != null && str.length() != 0) //检查一个字符串既不是null也不是空串
控制流程
条件语句:当条件为真时执行语句
if(condition) statement
if(condition) statement1 else statement2
if(condition){
statement1
}else if{
statement2
}else{
statement3
}
while循环:当条件为真时,循环执行语句,直到条件为假后才退出循环
while(condition) statement
先一次执行语句,再检测循环条件
do statement while(condition);
for循环:时支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。
for(初始化计数器;循环前要检测的循环条件;更新计数器){
statement
}
for each循环:以此处理数组(其他类型的元素集合)中的每个元素
for(variable : collection) statement
switch语句:处理多个选项时,选择if/else会很笨拙。可以用switch语句,其中case可以为char、byte、short、int的常量表达式、枚举常量、字符串字面量。
switch(choice){
case 1:
…
break;
case 2:
…
break;
default:
//bad input
…
break;
}
中断控制流程语句:在循环中的break可以推出当前循环,在嵌套循环中使用break也只是退出一个循环。使用break read_data; 可跳到循环外的read_data位置。continue语句中断正常的控制流程,将控制转移到最内层循环的首部。在for循环中则调到”更新”部分。
数组
数组是一种数据结构,用来存储同一类型值的集合。通过一个整形下标可以访问数组中的每一个值。
在声明数组变量时,要指出数组类型(数组元素类型紧跟[])和数组变量的名字。允许数组长度为0,数组长度为0和null不同,未初始化前不能使用。
int[] a = new int[100];
int[] a = {1,2,3,4,5};
int b[];
a.length(); //可以获取数组中的元素个数
Array.soft(a); //整形数组的排序,是快速排序算法
创建了数组后可以用循环赋值,创建数字数组时,所有元素都初始化为0,boolean数组的元素都会初始化为false,对象数组的元素会初始化为null。
初始化匿名数组
new int[] {1,2,3,4,5};
数组的拷贝:
将一个数组的所有值拷贝到新的数组中去
int n = Arrays.copyOf(a,a.length); //第一个参数是要拷贝的数组,第二个参数是新数组的长度
多维数组:使用多个下标访问数组元素,适用于表格或更加复杂的排列形式。
声明:int[][] magicSquare;
int[][] magicSquare = {{16,3,2,13},{5,10,11,8},{9,6,7,12},{4,15,14,1}}
快速打印二维数组的数据元素列表:System.out.println(Arrays.deepToString(a));
此文章内容来自java核心技术卷1