变量
赋值
int a, b, c = 10;
此时 a 和 b 是没有赋值的。
否则需要单独赋值:
int a = 10, b = 10, c = 10;
分类
全局变量:类体外的变量,通常全大写。
成员变量:类的属性,类体内,类的方法外。
局部变量:方法中声明的变量。
作用域即声明位置所在代码块({})内,且如果作用域重叠,则采用就近原则。
数据类型
基本数据类型
第一类 整数型
byte short int
第二类 浮点型
float double
第三类 布尔型
boolean
第四类 字符型
char
引用数据类型
例如:
字符串型String
java.math.BigDecimal
类型转换
int a = 10; //10
int b = 010; //8
int c = 0x10; //16
int d = 0b10; //2
int e = 100L; //将会转换为 long 型变量
long f = 100; //与上一条语句相同,自动类型转换
long g = 300L; //此处不存在类型转换
long h = 2147483648; //会报错,因为 2147483648 默认为 int 型,在赋值之前,输入内存时就会报错
1、字面量进入内存后默认是 int 或 daouble。小容量可以直接赋值大容量,即自动类型转换;大容量一般不能直接赋值小容量,需要强制类型转换,但会损失精度。
long x = 100L;
int y = (int)x;
float m = 3.14F;
double n = m;
2、但是,对于 byte、short、char 型来说,当值没有超过容量时,还是可以自动类型转换。但前提是右值是字面量,如果是变量名则仍然会报错,因为具体的赋值和运算是运行时的内容,编译过程中编译器并不知道变量里的值。
3、另外,和 C/C++ 一样,char 赋整数时会按 ASCII 码自动转换为字符。
4、byte、char、short 做混合运算时,会各自转成 int 型再做运算。而如果有 long 或者 float(更高精度的数据类型)参与运算时,则会自动向上转换。
5、 boolean 类型不能转换。
转义
char x = \u4e2d; //将十六进制数按 Unicode 解码为字符“中”
运算
&、| 和 &&、|| 的区别:
前者为逻辑运算符,后者为短路运算符,结果是一致的,但后者在左表达式结果就足以判断整个式子的结果时,右表达式会被跳过。相比而言,后者运行效率更高。
a = a + 1 和 a += 1 的区别
使用扩展赋值运算符时,变量不会改变运算类型,或者说在运算结束后会默认强制类型转换 。所以可能意外的精度损失。
+号是求和还是拼接?
System.out.println(110 + 120) //230
System.out.println(110 + "120") //110120
System.out println(1 + 2 +"3") //33
System.out.println(1 + (2 + "3")) //123
特例
int a = 10;
a = a++;
在 java 中,该段语句的结果是 10;但在 C++ 中结果是 11。
控制语句
switch
1、注意 switch 和 C/C++ 同样存在 case 穿透,所以需要注意使用 break 结尾
2、另外,分支条件只能是 String 和 int ,char、byte、short 会自动类型转换为 int,long 则会编译报错。
3、case 合并:
switch (x) {
case 1: case 2: case3:
...
break;
}
case 合并本质上和 case 穿透是一样的。
do…while
记得 while() 之后要加分号,因为编译器需要一个代码块结束的标志。
break
break 指定循环。
a: for (int i = 0; i < 10; i++){
b: for (int j = 0; j < 5; j ++){
if (j >=3) {
break a;
}
}
}
同理 continue 也有类似的使用方法
Tips
输入语句:
java.util.Scanner s = java.util.Scanner(System.in);
int i = s.nextInt();
或者
import java.util.Scanner
Scanner s = Scanner(System.in);
String str = s.next();