基本数据类型
1.数值型
* 整形(保存范围从小到大) byte,short,int,long 默认值0
* 浮点型 float,double 默认值0.0
* 布尔型 boolean 默认值false
* 字符型 char 默认值’\u0000′
2.引用数据类型,与内存有关
包括数组,类,接口 默认值null
3.默认值问题
基本数据类型的默认值只有作为数组、成员变量(实例变量), 和 静态变量(类变量) 时未初始化才取默认值,其中char数据类型默认值为空格
其他情况如 局部变量需要声明后初始化
final关键字修饰的变量必须初始化
整型数据
数字常量默认存储为int类型,强转 (long)变量 或 变量L
浮点型数据
1.小数默认存储为double类型,强转 (float)变量 或 变量F
2.整形除法运算时会向0取整,若保留小数将任一运算数转换为double
字符型数据
1.int和char可以相互转换
2.常用ASCII码
大写字母 65-90
小写字母 97-122
大小写之间差32
字符’0′ 48
字符’9′ 57
3.char可以保存中文汉字字符
4.多个字符构成的转义字符也是字符
char a = '\101'; // 8进制数字101表示的ASCII码65对应字符'A' char b = '\u0025'; // 4位16进制数字表示的UNICODE编码对应字符'%'
5.java字符为Unicode编码,每个编码占用2bit
字符串
1.+号实现字符串的连接
2.+运算中如果有字符串,后续所有类型均转为字符串类型,加括号提升运算优先级
int a = 10;
int b = 20;
System.out.println("结果为"+ (a+b));
System.out.println(1+"10"+3+"2"); // 11032
System.out.println(1+2+"10"+3+"2"); // 31032
System.out.println(1+"10"+3+1+"2"); // 110312
3.字符串中的转义字符
\0 空字符
\n 换行
\t tab
\” 双引号
\’ 单引号
\ 反斜杠
数据类型转换
1.数据溢出问题 最大值 + 1 = 最小值 最小值 – 1 = 最大值
2.自动转型均为向上转型,数字运算所有数统一转为范围大的数据类型运算,运算结果同为范围大的数据类型,操作数为:byte、short、int 、char,两个数都会被转换成int类型,并且结果也是int类型,所有的浮点数参与运算均转为double型
3.范围大的数据类型转范围小的数据类型必须强制转换,由于数据溢出问题不推荐
4.直接输出计算结果时,由于println()方法的重载无需转型
byte a = 5;
byte b = 3;
final byte c = 5;
// 无需转换
a += b;
// 必须转换
int d = (int) 10.0 / 5; // 大范围转小范围
byte e = (byte) (a + b); // 向上转型后大范围转小范围
final byte e = (byte)(b + c);// b向上转型后计算结果为大范围转小范围
// 方法重载
System.out.println(10.0 / 5);
int a = 5;
int b = 3;
// double c = a / b; // 计算后向上转型,结果为1.0
double c = (double) a / b;
System.out.println(c); // 计算中转型,结果为1.6666666666666667
short a = 128;
byte b = (byte) a; // 高位截断,计算结果10000000
System.out.println(b); // -128,-0指定-128
运算符
优先级
括号优先级最高
&& 优先级高于 ||
++ 优先级高于 =
== 优先级高于 三目运算符
赋值、三目运算符、单目运算符 从右向左 运算
%取余
0%任何数都为0
++自增
变量++,使用时为变量值,使用后+1
++变量,使用时已+1,使用后仍为使用时值
a = b++ 先赋值再自增
a = a++ a值始终为初始值,原理为下述代码
temp = a; a = a + 1; a = temp;
a = ++a a正常自增
i = ++(i++) 编译错误,++符号应修饰变量
int i=5;
int s= (i++) // 5
+ (++i) // 7
+ (i--) // 7
+ (--i); // 5
a---b a-- - b (a--) - b a - --b a - (--b)
关系运算
关系运算返回的都是 boolean 类型的值
进行关系运算时数据类型应相同,有些类型之间可以进行自动转型
三目(赋值)运算符
关系运算 ? 关系满足内容 : 关系不满足内容;
三目运算符嵌套 int max = x > y ? (x > z ? x : z) : (y > z ? y : z);
位运算
& 与
| 或
^ 异或
~ 取反
<< 左移
>> 右移
>>> 无符号右移
& 和 | 位运算的时候相当于二进制的与或计算
& 和 | 逻辑运算的时候要执行所有的判断条件
&& 和 || 逻辑运算的时候,与只要有false,或只要有true,不再执行后续条件
逻辑控制语句
if、switch分支语句
if分支语句仅进入第一个满足条件分支
switch可以判断int,char,String,枚举类型,不可使用逻辑判断 和 浮点型
注意冒号位置 case 数据:
break语句,在第一个匹配的case开始执行,一直到遇到break或者执行完所有代码
for、while循环语句
for语句可不指定其中的条件,初始语句只要可执行即可
for执行顺序,初始化语句 -> ( 判断 -> 循环体 -> 增加操作 )
while在循环体中修改循环条件以达到出口判断
do{}while();提前执行一遍才判断
break退出当前循环结构,多层嵌套循环退出最内层循环
continue结束当前循环且不执行continue之下代码而继续下次循环
正序递减情况循环可使用 n-循环数据形式
for和while
明确循环次数推荐for
明确结束条件但未知次数推荐while
static boolean foo(char c) {
System.out.print(c);
return true;
}
public static void main(String[] args) throws InterruptedException {
int i = 0;
for (foo('A'); foo('B') && (i < 2); foo('C')) {
i++;
foo('D');
}
}
ABDCBDCB
方法
return返回
返回值可以直接输出
void用return停止整个方法调用
重载
方法名相同,参数类型、个数或顺序不同,与返回值类型和访问控制权限无关,推荐各重载函数的返回值类型相同
递归
三要素:递推式,结束条件,调用时修改传递参数
递归的内存开销很大,处理不当会导致内存溢出
【例】递归实现1!+2!+…+90!
public class Factorial {
public static void main(String[] args) {
System.out.println(sum(90));
}
// long无法容纳,需要用double
public static double sum(int n) {
if (n == 1)
return 1;
return fac(n) + sum(n - 1);
}
public static double fac(int n) {
if (n == 1)
return 1;
return n * fac(n - 1);
}
}