Java基础回顾

本文链接: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

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值