1、任何数据类型用+与字符串相连接都会产生新的字符串
2、Java中的字符char可以存储一个中文汉字
3、整数相除结果只能得到整数。
4 、整数想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升
5、%运算符结果的符号只和左边有关系,与右边无关
6、任何一个正整数%2结果不是0就是1可以当作切换条件。
7、++ --运算符放在变量前面的时候,会先自身加一或者自身减一,然后再将结果赋值。
8、++ --运算符放在变量后面的时候,会先将变量中的值取出做赋值操作,然后再自身加一或者自身减一。
9、按Shift+Tab键向前缩进
10、当byte与int进行混合运算的时候,会提升为int类型,两个int相加的结果还是int,赋值给byte会损失精度。然而++ --会默认加强制类型转换符使结果与左边类型相同。
11、当short与int进行混合运算的时候,会提升为int类型,两个int相加的结果还是int,赋值给short会损失精度。然而+= -= *= /= %=会默认加强制类型转换符使结果与左边类型相同。
12、==不能写成=
13、一个数据对另一个数据位异或两次,该数本身不变。(交换两个数:x=x^y; y=x^y; x=x^y)
14、<<: 左移 左边最高位丢弃,右边补齐0。向左移动几位就是乘以2的几次幂。
15、>>: 右移 最高位是0,左边补齐0; 最高为是1,左边补齐1。向右移动几位就是除以2的几次幂。
16、>>>: 无符号右移 无论最高位是0还是1,左边补齐0。
17、比较表达式无论简单还是复杂,结果必须是boolean类型。
18、int x = 10;是两句话,int x 声明是一句,x = 10赋值是一句。
19、一般来说:有左大括号就没有分号,有分号就没有左大括号 。
20、else后面是没有比较表达式的,只有if后面有。
21、三元运算符实现的,都可以采用if语句实现。反之不成立。当if语句控制的操作是一个输出语句的时候就不能。
22、switch(表达式) 表达式的值可以是byte,short,char,int,枚举,string字符串。
23、 if - else if最后一个else可以省略,但是建议不要省略,可以对范围外的错误值给出提示,switch中的default作用相同。
24、case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
25、default可以在任意位置。但是建议在最后,因为它总是最后被执行。
26、break最后一个可以省略,其他最好不要省略。会出现一个现象:case穿透。
27、switch语句遇到break或执行到switch的右大括号结束。
28、switch建议判断固定值的时候用。
29、if建议判断区间或范围的时候用。
30、for的循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
31、do...while循环至少执行一次循环体。
32、for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
33、如果你想在循环结束后,继续使用控制条件的变量,用while循环,否则用for循环。不知道用谁就用for循环。因为变量及早的从内存中释放掉,可以提高内存的使用效率。
34、一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
35、两种最简单的死循环格式: while(true){...} for(;;){...}
36、'\x' x表示任意,\是转义符号,这种做法叫转移字符。'\t' tab键的位置 '\r' 回车 '\n' 换行 '\"' '\''
37、break只能在switch和循环中使用。
38、continue只能在循环中使用。
39、控制跳转语句标号: 标号:标记某个循环对其控制。标号组成规则:其实就是合法的标识符。
40、return的作用:返回;它的作用不是结束循环的,而是结束方法的。
41、break是跳出循环,continue是终止本次循环继续下次循环。
42、方法调用(有具体返回值):单独调用,一般来说没有意义,不推荐。输出调用,不够好。因为我们可能需要针对结果进行进一步的操作。赋值调用,推荐。
43、方法不调用不执行;方法与方法是平级关系,不能嵌套定义;方法定义的时候参数之间用逗号隔开;方法调用的时候不用在传递数据类型;如果方法有明确的返回值,一定要用return带回一个值 。
44、方法调用:(无返回值,void) :只能单独调用。
45、方法重载: 在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
46、参数列表不同:参数个数不同;参数类型不同;参数的顺序不同(算重载,但是在开发中不用)
47、数组可以看成是一个容器,是存储同一种数据类型多个元素的集合。
48、数组既可以存储基本数据类型,也可以存储引用数据类型。
49、数组定义格式: 数据类型[] 数组名 = new 数据类型[数组的长度];
50、数组的初始化就是为数组开辟连续的内存空间,并为每个数组元素赋予值 。
51、动态初始化只指定长度,由系统给出初始化值:数据类型[] 数组名 = new 数据类型[数组长度];
52、静态初始化给出初始化值,由系统决定长度:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
简化格式:数据类型[] 数组名 = {元素1,元素2,…}; 声明和赋值在同一行。
53、数组的初始化不允许动静结合。
54、 栈存储局部变量,堆存储new出来的数组或对象 。
55、ArrayIndexOutOfBoundsException:数组索引越界异常。原因:你访问了不存在的索引。
56、NullPointerException:空指针异常。原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。(当数组引用赋值为null,再去调用数组中的元素)
57、数组遍历:依次输出数组中的每一个元素;数组的属性:arr.length数组的长度;数组的最大索引:arr.length - 1;
58、 二维数组表示: 1:数据类型 数组名[][] = new 数据类型[m][n]; 2:数据类型[] 数组名[] = new 数据类型[m][n];
59、 二维数组遍历:外循环控制的是二维数组的长度,其实就是一维数组的个数;内循环控制的是一维数组的长度。
60、 基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失。引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问。Java中到底是传值还是传址?Java中只有传值,因为地址值也是值。(Java之父支持)