JAVA 私塾第八、九章笔记整理
JAVA 私塾第八、九章笔记整理第八章 异常和断言
一. 异常的分类
java.lang.Throwable类充当所有对象的父类,可以使用异常处理机制将这些对象超出并捕获。有Error和Exception两个基本子类。
错误(Error):JVM 系统内部错误、资源耗尽等严重情况,程序员不可控制
例外(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,程序可以控制
当发生Error时,比如说内存益处,不可能指望程序能处理这样的情况,只能让程序终止。而对于Exception,有补救或控制的可能,程序员也可以预先防范。
【此处有图,需要的可以到JAVA 私塾官网下载完整笔记:w ww.javass.cn】
RuntimeExceptioni是因设计或实现方式不当导致的问题。也可以说是因为程序员的原因导致的,本来可以避免发生的情况。
包括IOException在内的其他Exception,则可以认为是描述运行时遇到的困难,他通常由环境而并非程序员的原因引起的,可以进行处理。
Java程序处理异常的原则为:
(1) 对于Error和RuntimeException,可以在程序中进行捕获或处理,但不是必须的。
(2) 对于IOException及其他异常,必须在程序中进行捕获或处理。
二.异常的处理
try块:在try语句中包含可能会产生异常的语句。
catch块:用来捕获并处理try中抛出的异常的代码块。
当多个catch块存在的时候,从上往下catch块的范围应该从小到大,否则会产生一个编译异常。
finally块:无论是否出现异常都运行的块。
try,catch,finally块的关系
(1) try块不能单独存在,后边必须跟catch块或finallly块。
(2) 三者之间的组合为:try—catch,try—catch—finally,try—finally
(3) 一个try块可以有多个catch块,从上到下多个catch块的范围从小到大。
Throws用来在方法定义时声明异常。就是向外抛异常不做处理。
三.自定义异常
写一个类继承Exception
用户自定义异常通常属Exception范畴,依据惯例,应以Exception结尾,应该由人工 创建并抛出。
四.断言和断言的使用:
断言用于证明和测试程序的假设。
断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。
断言有两种方法:
一种是 assert<<布尔表达式>>
另一种是 assert<<布尔表达式>>:<<细节描述>>。
如果布尔逻辑表达式的值为false,将抛出AssertError异常:细节描述是AssertError异常的描述文本。
使用javac-source 1.4MyClass.java的方式进行编译。
运行时要屏蔽断言:java –disableassertions 或java -da
运行时要允许断言:java –enableassertions 或 java –ea
五. Throw和Throws的功能和使用方法:
throw 指编程人员主动抛出一个异常
throw new NullPointerExeption();
throws指程序遇到异常情况自动的被动抛出一个异常
public void test() throws Exeption{}
第九章 集合框架
集合框架基本概念
【此处有图,需要的可以到JAVA 私塾官网下载完整笔记:ww w.javass.cn】
Set接口继承自Collection接口,无顺序,不能重复。
List接口继承自Colleciton接口,有顺序,可重复。
Map接口不继承自Collection接口,定义了键”(key)—值(value)”映射对的方法,键不可重复。
Collection接口:用于表示任何对象和元素组。
Set接口:接口继承自Collection接口,集合中元素无顺序,且不允许集合中出现重复项。依靠添加的对象的equals()方法来检查等同性。
HashSet类和TreeSet类
HashSet用来存储重复自由的集合。添加到HashSet的对象需要采用恰当的散列码的方式来实现hashCode()方法。
添加到TreeSet的元素必须是可排序的。
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class SetExample {
public static void main(String [] args){
Set set = new HashSet();
set.add("Bernadine");
set.add("Elizabeth");
set.add("Gene");
set.add("Elizabeth");
set.add("Clara");
System.out.println(set);
Set sortedSet = new TreeSet(set);
System.out.println(sortedSet);
}
}输出结果:
List接口:继承了Collection接口以定义一个允许重复项的有序集合。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可根据序号存取容器中的元素
ArrayList类和LinkedList类
ArrayList读快改慢,LinkedList改快读慢。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ListExample {
public static void main(String [] args){
List list = new ArrayList();
list.add("Bernadine");
list.add("Elizabeth");
list.add("Gene");
list.add("Elizabeth");
list.add("Clara");
System.out.println(list);
System.out.println("2:" + list.get(2));
System.out.println("0:" + list.get(0));
LinkedList queue = new LinkedList();
queue.addFirst("Bernadine");
queue.addFirst("Elizabeth");
queue.addFirst("Gene");
queue.addFirst("Elizabeth");
queue.addFirst("Clara");
System.out.println(queue);
queue.removeLast();
queue.removeLast();
System.out.println(queue);
}
}输出结果:
2:Gene
0:Bernadine
Map接口:不是从Collection接口继承,用来存储键值对。Map中存储的键值对通过键来标识,所以键是不能重复的。键和值都可以为null。
Map的两个实现类:HashMap和TreeMap
HashMap:在Map中插入,删除和定位元素。
TreeMap:按键的顺序遍历。
import java.util.*;
public class MapExample {
public static void main(String [] args){
HashMap map = new HashMap();
Integer ONE = new Integer(1);
for(int i=0, n=args.length;i<n; i++){
String key = args;
Integer frequency = (Integer)map.get(key);
if(frequency == null){
frequency = ONE;
}else{
int value = frequency.intValue();
frequency = new Integer(value+1);
}
map.put(key, frequency);
}
System.out.println(map);
TreeMap sortedMap = new TreeMap(map);
System.out.println(sortedMap);
}
}输出结果:
<one=2, world=1, dream=1>
<dream=1, one=2, world=1>
Comparable接口:容器中可以排序的类都实现了java.lang.Comparable接口
Comparable接口中只有一个方法:
Public int compareTo(Object obj)
返回 0 表示 this == object;
返回正数表示 this>object;
返回负数表示 this<object.
public class Student implements java.io.Serializable,Comparable {
∵ String name;
∵ String result;
public int compareTo(Object o) {
Student s = (Student) o;
return Integer.valueOf(result) > Integer.valueOf(s.result) ? -1
: (Integer.valueOf(result) == Integer.valueOf(s.result) ? 0 : 1);
}
}Iterator接口:所有实现Collection的类都有一个Iterator方法以返回一个实现了Iterator 接口的对象。
Iterator对象称作迭代器,用以方便的实现对容器元素的遍历操作。
Iterator接口定义了如下方法:
hasNext():Boolean;
next():Object;
remove():void;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;
public class TestIterator {
public static void main(String [] args){
Collection collection = new HashSet();
collection.add("1");
collection.add("2");
collection.add("3");
collection.add("4");
collection.add("5");
collection.add("6");
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
Object element = iterator.next();
System.out.println(element);
}
}
}输出结果:352461 断言用在黑盒测试;似乎在业务中没使用‘;抛异常以一张积极的方式处理流程; 不要压制异常:可以使用如下格式: try { //代码 } catch (Exception e) { //空 }
页:
[1]