Think in Java 笔记【2-4章】
第二章
- java操纵内存中元素:由于一切皆对象,可以单一语法,标识符只是一个引用,并不是对象本身。 ex:String s;
- RAM中的堆栈 存储对象的引用,堆中存放对象本身(存储分配和清理可能笔堆栈需要更多时间)new 出来的
- 基本类型的变量直接存储“值”在堆栈中,因为更高效,基本类型都有对应包装类对象 存在堆中 JDK5中加入自动装拆包
- BigInteger BigDecimal 支持任意精度 以速度换精度
- class 包含:fields(基本类型有默认赋值;基本类型数组也有默认赋值) contractor method 组成
- 方法签名 = 方法名称 + 参数列表(有序) 但不包括返回值 但是子类中从父类中有返回值类型改成void 编译回报错
- https://segmentfault.com/q/1010000004659660 表示:JVM里面的方法签名的确是包括返回值类型的
- java中 参数传递 是:值传递 基本类型 = 实际存储的“值” 引用类型 = 指向堆内存中的引用
- java2开发时遇到问题,所有packageName都是小写字母
- static关键字 被修饰的field 和 method 不和包含它的class的实例关联在一起,static修饰的field只有一份,class所有实例共享
- javadoc命令采用了部分来自Java编译器的技术,查找注释标记,将毗邻注释的类名或方法名提取出来输出HTML 文件
- javadoc只能给public 和 protected成员进行注释
- javadoc便签:
- @since 最早开始使用的版本
- @see 在文档中加入一个超链接的“See Also”
- @version 版本信息
- @deprecated 表示被修饰的对象已经改进,未来可能会被摒弃
第三章
-
操作符接受一个或多个参数,并生成一个新值
-
赋值 基本类型赋值(是直接将一个地方的内容复制到另一个地方) 引用类型(将我的引用复制给你)
-
== 与 equals()方法
-
直接常量 or 字面值 Integer Long 的方法 toBinaryString() 可以看二进制
-
按位操作符 对整数的二进制表示,每一位去做 1和0 的逻辑运算 ex: 6 & 11 = 2 --> 6(0110) & 11(1011) = 2(0010)
- 按位与 a & b
- 按位或 a | b
- 按位异或 a ^ b 相同为false 不同为true
- 按位取反 ~a
- 左移 a << b
- 带符号右移 a >> b
- 无符号右移 a>>> b
-
| 与 || 、& 与 && 的不同:当两个操作数是数字时,|,&是按位操作
-
移位操作符
- 待补充
-
使用操作符常见错误
- while(x = y) {} 在C++中这个代码不会出错(y非零 赋值语句左边返回值为true),但是java中赋值语句返回的是右边的值,编译报错
- 基本类型转换 基本数据类型隐式转换
-
类型转换
-
窄化转换 高转低 可能造成精度丢失,需要强制类型转换
- 浮点型 -> 整型 截尾
double d1 = 2.39f; double d2 = 2.99f; int aInt = 0; int bInt = 0; System.out.println(aInt = (int) d1); System.out.println(bInt = (int) d1); //outPut: 2 2
-
扩展转换 低转高 不会造成丢失,隐式类型转换
- 基本类型算术运算or按位运算(char byte short)会自动转换成int
-
java允许任何基础类型转换成别的基础类型,除布尔型
-
通常,表达式中最大的数据类型决定表达式最后的数据类型
-
如果对两个足够大的int 值执行乘法运算,结果值就会溢出
int big = 0x7fffffff; // max int value prt("big = " + big); int bigger = big * 4; prt("bigger = " + bigger); } static void prt(String s) { System.out.println(s); }
第四章
- for 知道循环次数 while 不知道循环次数
- while 和 do while 后者多执行一次
- JDK5引入foreach
- break退出循环,continue开始下一次迭代
- switch语法 [java5增加的 enum 可以放入条件表达式中使用]
Integer integer = 0; switch (integer) { case 1: System.out.println("false"); break; case 2: System.out.println("true"); break; default: System.out.println("error"); }
- switch条件中能够包含[1.5 enum, 1.7 String(不能为null), byte, short, int, char]
-