编程思想读书笔记小结

        第三章操作符
1.String和equals()区别
(1)如果是基本类型== 比较值,是没有equals()
(2)复合类和包装类如果没有重写equals(),比较的都是引用(继承Object类,Object类中equals()是比较引用)
(3)String,Integer等包装类源码重写了equals(),比较内容,但是包装类在自己的取值范围内是和基本类型一样,==就是比较内容。为了保险起见,省得超过范围比较内容还是用equals()

(4)如果自己创建类要特别注意,是没有重写equals(),调用的是Object类的equals()方法,此时就需要根据自己的需求了,想比较内容自己重写equals()方法。

2.&&短路
因为有一个为false表达式就为false,A&&B&&C,没必要A,B,C都运算,资源浪费。
3.移位操作符
<<  低位补0 相当于乘以2     >>(有符号右移)符号为正高位插0相当于除以2,符号为负高位插1   >>>(无符号右移)无论正负都高位插0
4.提升
小转大自然提升,大转小强制转换(但信息会缺失);表达式数据类型由大类型决定。
5.java没有sizeof()方法
第四章控制执行流程
1.java不支持goto语句
2.while和do-while
while比do-while会多执行一次,do-while先做之后再判断是否为true
3.return 
作用:返回值;结束方法
return不是一定存在的,如果方法返回void,隐式存在return。有返回值必须有return。
4.break和continue
break:是直接跳出循环
continue:是跳出当前此次循环,到下一次循环开始的地方。
5.无穷循环
for(;;)    while(true)
6.多层循环想跳出可以使用标签,指定从哪里跳出。
7.switch
选择因子必须像是int或者char那样的整数,但是想用其他的,可以借助ENUM枚举类。
注意break的添加,防止穿透。
第五章初始化与清理
1.初始化时,没有构造器时编译器会自动帮你添加一个无参构造器,但为了保险起见,最好是添加无参构造器。如果是有参,编译器不会自动帮你添加。
2.方法重载(例如构造器)两同三不同
方法名和返回参数相同    参数列表个数,顺序,类型不同。
传入小类型会被自动升。
传入大类型会被强制转换。
3.this(暂不细究)
4.static
static方法内部不能调用非静态放方法,反过来是可以的。类可以直接调用静态方法。很像全局方法,但是java中是禁止全局方法的。
5.堆和栈内存释放问题
栈:是放一些变量的,一般都是方法结束,或者是变量不在自己的作用域,自己会出栈,和压栈相反先进后出,腾出内存空间。
堆:一般创建对象开辟内存空间就是在堆里进行的,但是本来是不可以自己进行释放内存的,会造成内存泄露(永久保存区域是内存溢出不要混淆GC不主动去清理),但是java有垃圾回收机制,去判断哪些对象在一段时间内不在使用,进行回收,释放内存。
6.垃圾回收机制(不一定百分百被触发,对象可能不被垃圾回收,垃圾回收不等于析构,垃圾回收只与内存有关)
GC只是去清理new出来的对象,不是new出来的对象可以调用finalize()方法。
对象不一定就被垃圾回收机制处理。
finalize()区别于C++中的析构函数(销毁对象必须调用的方法)。java不提供析构函数。如果想确切清理要自己要在finalize()里面明确写清理方法,如果垃圾回收机制被触发,就可以清理了。
7.finalize()方法
finalize()不该被当作通用的清理方法
8.垃圾回收机制怎么工作的
停止-复制
标记-清扫
自适应上面两种技术根据情况相互切换
9.初始化顺序
1> 父类中静态成员变量和静态代码块
2> 子类中静态成员变量和静态代码块
3> 父类中普通成员变量和代码块,父类的构造函数
4> 子类中普通成员变量和代码块,子类的构造函数

猜你喜欢

转载自blog.csdn.net/answerforwang/article/details/78958709