7. 异常处理
java的异常处理机制
异常的关键字Exception
try,catch,finally,throw,throws关键字
7.1 什么是异常,为什么要引入异常
*java程序运行时出错,java就抛出异常,程序立即终止(也可以说程序崩溃)
*java将错误信息封装在异常对象里抛出
*学会查看异常的信息:异常的名字,异常的信息,程序抛异常的位置
*java引入异常处理机制,是防止程序出错崩溃
7.2 java的异常的分类
*java的抛出的错误用异常类来表示,java拥有一个异常体系(有许多异常类,并且相互之间具有关系)
*java里面的所有异常都是Throwable的子类
*java虚拟机的异常是Error的子类,一般不需进行处理(因为没法进行处理)
*除Error之外还有Exception,Exception分为两类:RuntimeException(运行时异常),被检查异常(除了RuntimeException都是被检查异常)
*RuntimeException(运行时异常,可以不捕获或声明抛出,编译不会报错,一般是控制不当造成的),可检查异常(必须捕获或声明抛出,这类异常通常需要检测并处理,一般使用资源时造成的)
*几个常见的异常:NullPointerException(空指针),IndexOutOfBoundsException(索引越界),SQLException(数据库异常),IOException(文件异常)
7.3 异常的处理方式
*使用try,catch,finally进行处理
*不处理,使用throws,throw交给别人来处理
7.4 try,catch,finally中程序的运行过程
*尝试执行try里面的语句
*一次运行当中最多执行一个catch块,如果没有抛出异常,catch块不执行
*finally总会执行,不管有没有抛出异常
*如果try块里面有return语句,finally也会执行
7.5 区分RuntimeException与被检查异常
*RuntimeException不需要捕获或声明抛出(但是如果你捕获或声明抛出也不会有错)
*被检查异常必须要捕获或者声明抛出
8. 数组
数组是引用类型,有长度length的属性
声明,创建,赋值
*数组声明时要指定数组元素的类型,数组的维度,不需要指定数组的长度,如:int[] a;(a是引用)
*数组的创建必须new关键字,并且必须给出数组的长度;new int[5]
*如果数组的类型是引用类型的数组,数组里面保存的是引用,而不是对象本身
New int[] { 1,3,4,5}
{1,4,5,6}
数组的常用操作类
Arrays提供了数组的常用操作的方法(这些方法都是静态的)
*排序:sort
*返回数组的字符串表示:ToString
二维数组
*二维数组的内存分析
*数组的拷贝使用System.arrayCopy方法
9. 常用类
常用类:lang包不需要导入,其他的包都需要
1.Object:所有类的根类
*对象的标识:hashCode()
*对象的信息:toString(),默认情况下返回 对象类型@地址信息
*对象是否一样:equals,默认情况下根据地址比较相等。==比较的是对象的地址,而equals在语义上提供相等的含义
*重写equals与toString方法,参照Money类
2.String:不可变字符串,类,继承Object
*String重写toString,返回字符串的类容。重写了equals根据字符串的内容进行比较
*字符串常量"1234"与new String("1234")。常量只有一个,new String()每new一次就一个新的对像\
*字符串的不变性,字符串一旦创建,内容不能改变
*字符串的常用操作
*字符串的长度:length
*搜索一个字符串:indexOf()
*字符串的字串:substring(3,8)
*取得指定位置的字符:charAt(8);
*判断字符串以什么开头(结尾):startsWith(),endWith()
*改变字符串的大小写,toUpperCase(),toLowerCase()
*去掉字符串两边的空格:trim()
*替换字符串里面的某些内容:replace("")
*分割字符串:
StringBuffer:字符串缓冲,可变字符串,提供对字符串进行更改的方法(其他的方法基本与String类似)
*从StringBuffer得到String
*追加 append("abc");
*在字符串中间插入insert(3,"插入的字符串')
*删除字符串 delete(3,6);//不包括6
包装类:提供与字符串之间的转换。Integer是int类型的包装类
Math类:提供数学上的常用操作,注意:里面的方法都是静态的
Random:随即类,产生随机数,另外Math.random()也能产生0~1之间的随机数
日期:Date,SimpleDateFormat(日期格式化) ,日历Calendar
获得控制台输入:
*Scanner sc = new Scanner(System.in);
*String str = sc.next();
10. 集合框架
集合框架:概念上分为:Set(数学集合),List(列表),Map(字典)
1.Collection接口,Iterator接口
*Set,List继承Collection,采用Iterator进行迭代(参考testCollection)
2.Set:元素不能重复,没有顺序
*HashSet:根据hashCode判断对象是否重复(重写equals和hashCode)
*TreeSet:里面的元素按顺序排列(元素必须实现Comparable接口)
2.List:元素能够重复,有顺序即索引位置,在Collection的基础上提供了按照索引位置进行操作的方法
*ArrayList:内部使用数组实现list
*LinkedList:在List的基础上提供了对首,尾元素进行操作的方法:入getLast(),addFirst(Object o)
*数组,AarryList,LinkeList有区别
3.map:键值对的集合,key不能重复,value可以重复
*两次put同一键,后面一个会覆盖前面一个
*遍历map的方式:先取得keySet,或者entrySet,再用Set的方式(Iterator)进行遍历
4.泛型:List list = new ArrayList
*存入的元素只能是指定类型,如:
*取出来不需要强制转换,自动是指定类型,如:
5.List的常用操作类Collections,不同于Collection,提供对List的排序,随机排列,倒序的方法
*Arrays使用在数组里面,提供对数组的常用操作,跟Collections有相似之处,
6.Comparable接口
*compareTo()
*如果需要进行排序(Collections.sort()),或者放到排序的集合里面(TreeSet,TreeMap),必须实现Comparable接口