代码改变世界

JAVA每日一旅2

2016-10-20 20:27  叶思维  阅读(183)  评论(0编辑  收藏  举报

1.关于类型转换

两个数值进行二元操作时,会有如下的转换操作:
如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
否则,如果其中一个操作数是long类型,另一个会转换为long类型。
否则,两个操作数都转换为int类型。
2.关于重写和重载
重载(overload):只要方法名一致,其他(参数列表、返回值)随意。
重写(overriding):只有实现的功能代码不一致 ,其他的(函数名、参数列表、返回值类型)必须都一致。
方法的重写(override)两同两小一大原则
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
 
3.string类和stringbuffer类
 StringBuffer类调用toString()方法后将转换为String类型。
 String类型中没有append()方法。
 可以直接将字符串复制给声明的Stirng类的变量,而StringBuffer类的不行。
string类不可改变,但可以共享,stringbuffer类可以改变。
4.toUpperCase()
toUpperCase()会对当前对象进行检查 如果不需要转换直接返回当前对象,否则new一个新对象返回。
5.关于JVM堆内存溢出
简单的来说 java的堆内存分为两块:permantspace(持久带) 和 heap space。
持久带中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。
而heapspace分为年轻带和年老带 
年轻代的垃圾回收叫 Young GC, 年老代的垃圾回收叫 Full GC。
在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。
年老代溢出原因有循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存。
持久代溢出原因是动态加载了大量Java类而导致溢出。