集合框架 异常

内部类
1 定义:在类的内部定义的类,一般是用来体现封装特性的。
2 学习要求:使用的很频繁,灵活,先学习内部类的语法现象
内部类分类
1 静态内部类
使用静态关键字在类体内部声明的类。是属于类的静态成员
使用外部类类名可以访问。类静态成员可以相互访问。
2 成员内部类
不使用static关键字,在类内部声明,必须创建外部类实例
以后才能使用,可以访问任何非静态成员。
3 局部内部类
在方法中声明的内部类。作用域类似于局部变量,离开方法
就无效。在局部内部类中只能访问“final的局部变量”。
*很少使用。
4 匿名内部类, 就是一个特殊的局部内部类。
使用的非常频繁。
语法类似于创建对象实例,并且添加了新的类体,是临时的
继承(实现)并且实例化。
Xoo xoo = new Xoo(){};
匿名类,的语法可以使用方法的“回调(Callback)”式运行。
还可以从接口或者抽象类来继承实现匿名类。

线性表
1 是一种元素之间有先后次序的集合,元素的次序由序号标示。
在软件开发中使用广泛。
2 Java线性表由接口java.util.List描述。List接口定义了
线性表的操作行为(方法)。
3 Java提供了线性表的实现
a ArrayList 数组实现的线性表,非线程安全,Java 1.2
以后提供,数组容量采用50%的方式增长。性能较Vector快
b Vector 数组实现的线性表,线程安全,数组容量采用
成倍的方式增长。
c LinkedList 采用双向循环链表实现的线性表。

线性表 = 数据+操作= 类
日期 = 数据+操作

散列表
1 是一种以空间换时间的高速查找算法。

作业
1 实现MyArrayList
2 实现List版本的54张牌,并且实现洗牌
3 实现原理的散列表


预习
集合框架和集合的迭代。





HashMap 与 Hashtable
1 提供快速的散列查找实现。
2 初始化容量与加载因子。
初始化容量是散列空间大小,加载因子是指散列空间的充满率
如果超过充满率,HashMap会进行扩容并且重新散列。
3 HashMap 新的(1.2),非线程安全的,性能稍好,
可以保存在一个null的Key
Hashtable 旧的(1.1),线程安全,性能稍差,不允许存null。

Comparator 自定义的比较器。
1 实现自定义的比较规则, 可以实现任意的临时比较
2 TreeSet 和TreeMap的构造器支持自定义的比较规则。

自然排序:
1 类实现了Comparable表示这个类实例是可以比较大小的。
可以比较大小的对象List集合,可以利用Collections.sort
进行自然顺序排序。
2 Comparable 的实现,要实现compareTo方法。
这个方法要与equals和hashCode方法的实现一致:
compareTo 返回结果为0时候,equals的结果一定是true
hashCode值一定一样!
3 Java提供的很多类都实现了Comparable, 如:String,
包装类,StringBuilder,Date,等。

集合的迭代(Set / List):
迭代->遍历->将所有元素全部处理一遍。如:发牌。
Iterator 接口
1 是迭代器接口,是一个对集合进行遍历处理的模型。
就是,把集合中的元素从头数一遍。
2 非常适合与while、for组成模式化的迭代处理代码。
3 iterator.remove() 安全的删除正在迭代的元素。
4 迭代一个集合的时候,不能并发操作一个集合(add remove)

Map的迭代
1 迭代 map.entrySet()
2 迭代 map.keySet()
3 迭代 map.values() , 很少使用。

范型
1 可以在使用时候约束类中的数据类型
2 Java集合推荐使用泛型约束集合中的数据类型。

案例:
1 统计字符出现的数量
2 生成一个不重复的字符串
(01 ~ 33) * 6 + (01 ~ 16) * 1
01 03 08 15 23 16 12

作业:
1 实现课堂案例
2 实现统计一个字符串中的”元音“字符数量
3 实现随机生成4位不重复的”验证码“
要求:0~9,a~z, 不包含:0,o,2,z,1,l,i

预习:lan
异常



异常
1 行为的意外结果
2 一个方法如果抛出了异常,这个方法就必须声明异常的抛出.
异常的声明:在方法上声明方法的意外结果,如:
User reg(String name, String pwd, String email)
throws UserExistException;
User login(String name, String pwd)
throws NameOrPwdException;

3 异常类一般继承于Exception
4 调用抛出异常的方法,必须处理异常
4.1 使用try catch finally 捕获
4.2 直接再抛出异常
4.3 捕获 再抛出.
处理方式,依赖于具体业务逻辑,很灵活。
5 如果代码有异常发生,异常以后的代码将不再执行。

6 try catch finally
try 是尝试运程代码块,如果有异常会被随后的catch捕获
异常发生以后代码不执行
catch代码块是异常处理代码。需要提供合理的处理,异常的处理
是与具体业务逻辑有关。可以写多个catch处理一系列异常,但是
要注意:异常的大小关系,大类型的放到后面处理。
有的时候 catch(Exception) 粗粒度处理异常,代码简洁
语义含糊. 根据业务逻辑适当选用。
finally 代码块,不够是否出现异常,总会执行的代码块。
经常用来处理现场的清理,比如:可靠的数据库连接关闭。

7 异常有一个基本原则:能够底层处理的尽量处理,但是
如果不能处理,必须抛出到调用者(方法)。不应该简单的
抛弃。
8 异常捕获再抛出, 是一种把底层异常进行封装,转换为另外
一种异常类型。
9 *建议在捕获到异常时候使用e.printStackTrace(),打印到
控制台,输出内容是:出现异常时候的方法调用堆栈.
一般情况下,凡是捕获异常代码都输出:e.printStackTrace()
10 异常的分类
Throwable
|--Error 是系统不可恢复的错误,由JVM发生
| |--OutOfMemoryError 堆内存溢出
| |--StackOverflowError 栈内存溢出
|--Exception 程序可以检查处理的异常,常见的异常继承根
|--java.text.ParseException format解析对象时候发生
| 如:Date d = dateformat.parse("2010-5-5");
|--RuntimeException 非检查异常,Javac忽略对
| 这类异常的语法检查,如:异常抛出,异常处理等。
|--IllegalArgumentException
|--NullPointerException *
|--ArrayIndexOutOfBoundsException *
|--ClassCastException *
|--NumberFormatException * Integer.parseInt()
11 软件中会大量使用自定义异常,一般从Exception继承。
异常类命名要有实际意义。

帐号管理案例(多层架构的原型):
1 AccountManager 接口,描述了软件的核心功能
2 定义User类,软件的具体实体概念
3 定义异常类: UserExistException, NameOrPwdException
4 实现 AccountManagerImpl
使用内存存储User实例:List<User> users
5 创建界面类:Main,提供了界面表诉和用户交互处理。

表现层:Main
业务层:AccountManager (软件核心)
使用内存临时存储,没有提供持久化层。

搜索商品:List<Product> search(String key)

作业:
1 实现课堂代码
2 实现GobangUI 的show()的方法











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值