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接口