-----android培训、java培训、期待与您交流------
内部接口
接口中,定义另一个接口。内部接口是外部接口的一个成员。
一个实现类,实现外部接口,有没有必要实现内部接口
实现了内部接口,能直接实现吗
实现类可以直接实现外部接口,不需要单独实现内部接口
实现类想实现内部接口,则需要使用外部接口调用内部接口
Map集合的第二种取出方法entrySet方式
利用的就是键值对的映射关系(夫妻关系结婚证)
Map接口中,有一个内部接口Entry,描述键值对关系的对象
每一个集合子类都用一个方法 entrySet 获取到键值对关系对象Entry的实现类的对象。
将这个Entry接口实现类对象,存储到了Set集合
Entry接口方法: getKey getValues
HashMap
底层数据结构,基于哈希表的映射键值对,线程不安全,运行速度快
这个集合允许使用null值,null键
用作键的对象,必须实现hashCode equals方法,保证唯一性
Hashtable
线程安全集合,运行速度慢,不允许null值,null键
出现在JDK1.0版本
Properties类
Hashtable的子类Properties,自己的特性是:集合可以和IO结合使用,实现数据的永久性存储
线程安全的集合,底层结构也是哈希表,泛型已经固定为String类型
特有方法
setProperty(String key,String value)将键值对存储到集合等同于put
String getProperty(String key)根据键获取值,等同于get
LinkedHashMap集合
底层结构是哈希表的链表实现,保证了迭代顺序
线程不安全集合,运行速度快,开始版本JDK1.4
TreeMap集合
TreeMap可以对存储的键进行排序,依靠对象自己的自然顺序,可以提供比较器
线程不安全集合,运行速度快
底层结构红黑树(Red-Black Tree)自然平衡算法二叉树
如果使用比较器,将比较器对象传递到TreeMap构造方法
在一个字符串中,统计每个字符出现次数
提供一个字符串 nextLine()
myjava
结果 e 出现1次 f出现1次 g出现3次
TreeMap可以实现字典顺序效果,Map集合存储的是键值对,输出结果就是一组键值对 e=1 f=1 g=3
单个字符,看成集合中的键,出现次数就是值
实现思想:
字符串中的单个字符操作,必须转成char数组 toCharArray()
有一个集合TreeMap集合<Character,Integer>
遍历数组
遍历的过程中,取出数组中的一个字符,字符当作键,到集合中获取值
集合方法get(字符),集合中没有这个键,get返回null,这个字符在集合中没有,将字符和1 存储到集合中
get(字符),返回值不是null,字符在集合中存在,将值++后,存储回集合
Collections集合工具类
Collection和Collections的区别
工具类的方法(全静态)
sort(List list)对List集合进行升序排列
sort(List list,Comparator c)对List集合排序,依照传递的比较器
Comparator reverseOrder()返回一个比较器,作用逆转对象的自然顺序(Comparable),需要和sort一起使用
Comparator reverseOrder(Comparator c)传递比较器,返回一个新的比较器,逆转了传递的比较器的顺序,需要和sort一起使用
int binarySearch(List list, Object key)集合的折半查找
swap(List list,int i,int j)对List集合,指定的下标交换位置
reverse(List list)对List集合进行反转
shuffle(List list)对List集合进行随机排列
fill(List list,Object obj)对List集合进行填充
工具类中有一组方法,全部采用synchronized开头,将线程不安全的集合,变成线程安全的集合。
数组集合的互转
数组转成集合,Arrays工具类的方法 asList(数组)返回List集合,不能修改集合长度
集合转成数组,Collection接口中,方法 toArray()
JDK1.5新特性
静态导入,简化形式,import 导入到类的静态成员
可变参数:方法参数的个数是可变的,保证类型不能变
修饰符返回值类型方法名(数据类型...变量名){
}
可变参数,可传,可不传,如果不传,数组的长度=0
可变参数定义上的注意事项
一个方法的参数中,只能写一个可变参数,不能写多个
如果方法定义可变参数,必须写在参数列表的最后
异常概述
什么是异常:就是程序运行中,出现的不正常现象,称为异常
当一个方法在运行中,出现了异常,进行抛给调用者,如果一直没有异常的处理代码,最终导致程序停下
异常的继承体系
Throwable
Error
Exception
Error : 错误,程序出现了严重问题,不修改代码,不能运行,非典,艾滋,埃博拉
Exception:异常,程序中出现了比较轻的问题,处理后继续运行,阑尾炎,感冒
Throwable类的方法
构造方法,带有String类型的参数,接收异常信息 by zero
String toString() 返回带有异常信息的简短描述?
String getMessage()返回带有异常信息的详细描述?
void printStackTrace()将异常信息输出到标准输出流(输出到控制台)
异常类:Exception自己,所有子类,Java中任何事物都是对象,将异常这个事物也进行了对象的封装,提供大量的异常类
异常的第一种处理方法
try catch处理
标准格式
try{
被检查的代码
有可能出现异常的代码
}catch(异常类变量){
异常的处理方式
}
处理方式很多种,调用方法,写循环,判断,只要有catch就可以称为异常被处理了
throw和throws
throw 用于在方法的内部,手动抛出异常
throws 用于在方法上暴露异常,我这个方法有异常,请你调用者处理 ExceptionDemo2.java:18: 错误: 未报告的异常错误Exception; 必须对其进行捕获或声明
以便抛出
方法中有异常抛出,请你处理,如果不处理,编译失败
编译的过程中,异常是最后报告的
可以采用try catch处理后,编译成功
我想将异常对外暴露出去,谁调用我,谁处理异常
throw 关键字,写在方法中,后面写的是异常对象 new
throws 关键字,写在方法的声明上,后面写的是异常类
try catch finally代码块
try 检查代码
catch 处理异常
finally 一定要指定的代码,无论有没有异常方法,finally中的代码,必须要执行,作用一般用于关闭资源使用。