本文链接:http://note.youdao.com/noteshare?id=4f5dc3ad36d9a84b4367299fe6ee1529
1. java快速入门
1.1. 程序基础
1.1.1. 基本数据类型
1.1.1.1. boolean占用1个字节(虽然理论上只用一个bit)
1.1.1.2. byte占用1个字节
1.1.1.3. char占用2个字节
1.1.1.4. short占用2个字节
1.1.1.5. int占用4个字节
1.1.1.6. long占用8个字节
1.1.1.7. float占用4个字节
存储结构:共4*8=32位,第一位符号位,后8位指数位,后23位时尾数位
1.1.1.8. double占用8个字节
存储结构:共8*8=64位,第一位符号位,后11位指数位,后52位时尾数位
理解反码补码:
正数:反码和补码跟原码一样。
负数:
反码:符号位不变,其余各位取反。
补码:反码+1。
array输出结果,sout不用for循环
一维数组:Arrays.toString(array);
多维数组:Arrays.deepToString(array);
2. 面向对象编程
2.1. 抽象类
可以有构造方法,不可以实例化。(可以通过子类的实例化来调用抽象类的构造方法)
2.2. java核心类
2.2.1. StringJoiner
拼接字符串
String[] names = {"Bob", "Alice", "Grace"};
var sj = new StringJoiner(", ", "Hello ", "!");
for (String name : names) {
sj.add(name);
}
3. 异常处理
3.1. java异常
Throwable有两个体系:Error和Exception,Error表示严重的错误,程序对此一般无能为力,例如:
· OutOfMemoryError:内存耗尽
· NoClassDefFoundError:无法加载某个Class
· StackOverflowError:栈溢出
而Exception则是运行时的错误,它可以被捕获并处理。
某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:
· NumberFormatException:数值类型的格式错误
· FileNotFoundException:未找到文件
· SocketException:读取网络失败
还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:
· NullPointerException:对某个null的对象调用方法或字段
· IndexOutOfBoundsException:数组索引越界
Exception又分为两大类:
RuntimeException以及它的子类;
非RuntimeException(包括IOException、ReflectiveOperationException等等)
Java规定:
必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
7.集合
集合与数据的区别:
a.数组的长度是固定的,不可扩容
b.数据只能按索引的顺序取.
c.增加或减少数据时,需要前、后移元素,操作复杂
d.list封装很多方法,方便
7.1 使用List
List和Array的转换
1.1 List转换为Array的方式:
a. list.toArray();----返回的是一个Objec[]数组,容易丢失信息,很少用。
b. list.toArray(T[]);-----传入一个相同类型的Array,长度和list.size()相同;
c. list.toArray(Function<T[]>());----传入一个相同类型的Array的Function();
1.2 Array转换为List的方式:
a. Arrays.asList()
7.2 编写equals方法
1.1equals正确适用方式
a.先确定实例“相等”的逻辑,即哪些字段相等,就认为实例相等;
b.用instanceof判断传入的待比较的Object是不是当前类型,如果是,继续比较,否则,返回false;
c.对引用类型用Objects.equals()比较,对基本类型直接用==比较。
7.3 使用Map
1.1 遍历map的方式
a. for (String key : map.keySet()) {}
b. for (Map.Entry<String, Integer> entry : map.entrySet()) {}
1.2 map中的equals方法和hashcode方法
a. equals方法主要是用来比较key值得
b. hashcode方法用来根据key计算出value存储的位置的索引的
c. 关系:
实例a和b:
如果a和b相等,a.equals(b)一定是true,a.hashcode()一定等于b.hashcode()
如果a和b不相等,a.equals(b)一定是false,a.hashcode()尽量与b.hashcode()不相等
1.3 map的存储长度问题
a. map 默认初始长度是16,每次扩容为2倍(扩容很占内存,所以要初始化map的长度)
b. map的长度总是2的n次方,所以当默认长度为100的时候,map会初始化为2的5次方为128(128>100)
2.1 enumMap 的使用
内存紧凑,根据enum的key直接定位,不需要hashcode定位:速度快,节省空间
结论:当map的key为enum类型的时候,推荐使用enummap
3.1 treemap的使用
a. treemap实现了sortedmap的接口(实现了comparable的接口)
b. 使用treemap,放入的key必须实现comparable的接口
c. treepmap不使用equals()方法和hashcode()方法
7.4 使用Properties