java 杂记

记录平时开发过程中的一下零散知识点、开发小技巧以及平时读书做的笔记,已备后续方便查找,查漏补缺

基本准则和通用方法

1、重载:方法名相同,参数类型或数量不同

2、编译器最短路径原则:如果能够在本类中查找到的变量、常量、方法,就不会到其他包或父类、接口中查找,以确保本类中的属性、方法优先

基本类型

 1、int 超过临界最大值为负数,参与运算时为负反向计算

2、基本类型的包装类型参与运算时要做null 值校验

3、创建的 Integer 整型包装对象值如果落在 -128 - 127 之间时,会直接从IntegerCache内部类的一个静态数组直接返回

类、对象及方法

1、代码块是指用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合即为代码块,一般来说代码块是不能单独运行的,必须要有运行主体 

2、this 关键在构造代码块中特殊应用,如果遇到this关键字(也就是构造函数调用自身其他的构造函数时)则不插入构造代码块

 3、静态内部类和普通内部类的区别:

(1)静态内部类不持有外部类的引用

(2)静态内部类不依赖外部类

(3)普通内部类不能声明static的方法和变量,常量可以用 static 关键字修饰

4、匿名内部类的构造函数:匿名函数虽然没有名字,但也是可以有构造函数的,它用构造函数块来代替

5、对象浅拷贝只是Java提供的一种简单拷贝机制,不便于直接使用

6、覆写类的 equals 方法细节,考虑到类有可能以后会被继承的情况,在 equals 方法判断时,使用类的 getClass() 方法进行类型判断, 而不使用 instanceof

7、覆写equals方法必须覆写hashCode方法,可以使用org.apache.commons.lang.builder包下的一个哈希码生成工具

字符串

1、replaceAll传递的第一个参数是正则表达式

2、字符串创建有可能不创建对象而返回自己,那是因为采用str.substring(0)就不会创建新对象,JVM会从字符串池中返回str的引用,也就是自身的引用

3、String 是不可变字符序列,StringBuilder与StringBuffer基本相同,都是可变字符序列,不同点是:StringBuffer是线程安全的, StringBuilder 不是线程安全的

4、UTF是UNICODE的存储和传输格式,它是为了解决UNICODE的高位占用冗余空间而产生的,使用UTF编码就标志着字符集使用的是UNICODE

数组和集合

1、List.toArray方法转换成数组,然后通过Arrays.copyOf拷贝,再转换回集合,简单便捷, 生成的拷贝集合是原集合的浅拷贝, 操作拷贝集合同时把原集合的元素也改变。

2、ArrayList 扩容1.5 倍:原因是一次扩容太大(比如扩容2.5倍),占用的内存也就越大,浪费的内存也就越多(1.5倍扩容,最多浪费33%的数组空间,而2.5倍则最多可能浪费60%的内存);而一次扩容太小(比如每次扩容1.1倍),则需要多次对数组重新分配内存,性能消耗严重。经过测试验证,扩容1.5倍即满足了性能要求,也减少了内存消耗。

3、Vector与ArrayList扩容4、不同的地方是它提供了递增步长(capacityIncrement变量),其值代表的是每次数组拓长时要增加的长度,不设置此值则是容量翻倍(默认是不设置递增步长的,可以通过构造函数来设置递增步长)。其他集合类的扩容方式与此相似,如HashMap是按照倍数增加的,Stack继承自Vector,所采用的也是与其相同的扩容原则等

4、最值计算时使用集合最简单,使用数组性能最优

5、原始类型(即基本类型)数组不能作为asList的输入参数,否则会引起程序逻辑混乱

6、Arrays.asList返回的是一个长度不可变的列表,数组是多长,转换成的列表也就是多长,换句话说此处的列表只是数组的一个外壳,不再保持列表动态变长的特性

7、集合遍历:列表遍历不是那么简单的,其中很有“学问”,适时选择最优的遍历方式,不要固化为一种

8、列表只是一个容器,只要是同一种类型的容器(如List),不用关心容器的细节差别(如ArrayList与LinkedList),只要确定所有的元素数据相等,那这两个列表就是相等的

9、subList产生的列表只是一个视图,所有的修改动作直接作用于原列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值