一些需要注意的Java基础

来源:互联网 发布:cuda 8.0 linux 编辑:程序博客网 时间:2024/06/06 03:36

1.序列化: Serializble是自动序列化的,可以使用transient来修饰字段是否需要序列化,另外还有一种是Externalizable是非自动化的.需要在writeExternal()方法中来指定哪个字段是需要序列化的,还有就是static修饰的是无法进行序列化的.

2.创建对象的4种方式:1)new  2)使用反射 newInstance()  3)使用clone( )    4)使用ObjecInputStream进行反序列化

3.Java中的参数传递是值传递,在调用方法并传参数时,虚拟机会自动开辟一个新的栈用来指向同一个对象,这样可以理解为什么可以在方法中修改对象,而不能指向另一个新的对象,因为Java的基础类(string,包装类)的变量都是final的,是不能更改的,只能重新开辟新的对象.

4.关于string,new string的时候会产生2个对象,一个是在堆中,一个是在常量池中,而常量池是在class文件中的,我觉得string就是char的包装类,哈哈

5. 1)关于hashMap.hashMap的核心是让记录的关键字和存储的值建立映射关系,而这种映射关系是通过哈希函数实现,   2)当我们put元素时,HashMap会先根据key的hashcode值找到散列桶的具体位置,一般来讲,每个key对应的hashcode是不一样的,但是如果万一是一样的,就形成链表,当链表数超过8个,就会改变数据结构,变成红黑数(Java8),  3)新的在链表头,旧的在链表尾,    4)HashMap的初始数组数为16(ArrayList的初始数量为10),当put值的数量超过75%,就会自动扩大一倍,   5)尽量使用final的类做为key,以保持key值得稳定性, 并且重写hashcode和equals方法.

6.Object类中11个方法,除了tostring,equals,wait(final),finalize(protected) 其余的都是本地方法,native.

7,以前认为只要只要哦是成员变量就一定是在堆中的,原来不是只要的,基本类型就是在栈中的,他的引用就是他的栈.

8.i--比i++性能好,因为jvm在与0做比较的时候速度更快,

以上可能有错误,希望大神能够详细指出.



0 0
原创粉丝点击