20145228《Java程序设计》第五周学习总结

教材学习内容总结

异常处理

•使用try、catch: Java中所有错误都会被包装成对象,可以尝试(try)执行程序并捕捉(catch)代表错误的对象后做一些处理。使用了try、catch语法,JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序会跳离错误发生点,然后比对catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是就执行catch中的程序代码。

•异常继承架构:错误会被包装为对象,这些对象均可抛出,因此设计错误对象都继承自java.lang.Throwable类,Throwable定义了取得错误信息、堆栈追踪(Stack Trace)等方法,它有两个子类:java.lang.Error与java.lang.Exception。在此简述一下Error类与Exception类的区别,在Java中对于比较严重的问题,是通过Error类来进行描述的,而对于非严重的问题,则是通过Exception类来进行描述的。

•Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正
•Exception:异常,可以有针对性的处理方式

•throws:自己无法处理,用在方法声明。用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。
•throw:方法中抛出Checked Exception,方法声明中必须有throws。用于抛出异常对象,后面跟的是异常对象;throw用在函数内。

•finally区块:finally代码块定义一定会执行的代码,它通常用于关闭资源。对于异常的部分,如果没有做finally处理,那么这个程序是有缺陷的,每次调用完资源再把资源释放掉是必须的,否则对对方的运行压力会特别大,由此也可以看出finally的重要性。finally经常会与try、catch语法一起用。

如果程序撰写的流程中先return了,也有finally区块,finally区块会先执行完后,再将值返回。


public class FinallyDemo {
public static void main(String[] args) {
    System.out.println(test(true));
}

static int test(boolean flag) {
    try {
        if (flag) {
            return 1;
        }
    } finally {
        System.out.println("finally…");
    }
    return 0;
}
}

它会先显示finally…再显示1。

Collection与Map

·认识Collection架构:

收集对象的共同行为定义在Collection中。既然可以收集对象,也要能逐一取得对象,这就是java.lang.Iterable定义行为,它定义了iterator()方法返回java.util.Iterator操作对象,可以逐一取得对象。

•List接口中常用的类有:ArrayList和LinkedList,ArrayList的特点是线程不安全,但查询速度快,像排序时使用ArrayList便是利用了它速度快这一特点。LinkedList在操作List接口时,采用了链接结构,不会事先耗费内存,它的增删速度比较快。

Scanner scanner = new Scanner(System.in);

ArrayList实例:


        List<String> list = new ArrayList<String>();
                System.out.println("输入名称(使用quit结束)");
        while(true) {
            System.out.print("# ");
            String input = scanner.next();
            if(input.equals("quit"))
                 break;
            list.add(input);
        }
                System.out.print("显示输入: ");
        for(int i = 0; i < list.size(); i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

·Comparable:覆盖compareTo方法;

·Comparator:覆盖compare方法。

•Comparable 定义在 Person类的内部:
public class Persion implements Comparable {..比较Person的大小..},
因为已经实现了比较器,那么我们的Person现在是一个可以比较大小的对象了,它的比较功能和String完全一样,可以随时随地的拿来
比较大小,因为Person现在自身就是有大小之分的。Collections.sort(personList)可以得到正确的结果。

•Comparator
Comparator 是定义在Person的外部的, 此时我们的Person类的结构不需要有任何变化,如
public class Person{ String name; int age }

MAP:

•使用HashMap:在HashMap中建立键值对应之后,键是无序的。

•使用TreeMap:如果使用TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Comparable接口,或者是创建TreeMap时指定操作Comparator接口的对象。

•使用Properties:Properties类继承自HashTable,HashTable操作了Map接口,Properties自然也有Map行为。Properties的=左边设定属性名称,右边设定属性值。可以使用Properties的load()方法指定InputStream实例。load()方法结束后会自动关闭InputStream实例。

代码调试中的问题和解决过程


public class Main{
    public static void main (String [] args){
        try {
            int number = Integer.parseInt(args[0]);
            System.out.println(number++);
        }catch(NumberFormatException ex){
            System.out.println("必须输入数字");
        }
    }
}

最后结果显示 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

显示ArrayIndexOutOfBoundsException堆栈追踪

体会

这周又接触到了过去从没接触过的新知识、新概念,感觉收获不少。经过这几周的学习,JAVA的基础知识也差不多
都触及到了,我们也感受到了JAVA这门科学的博大精深,现在最重要的就是熟练掌握各种基础知识,才能使自己真正的提高。

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 4000行 30篇 300小时
第一周 100/100 1/1 15/15
第二周 300/400 1/2 25/40
第三周 500/900 1/3 35/75
第四周 400/1300 1/4 30/105
第五周 500/1800 1/5 35/140

参考资料

posted @ 2016-04-03 14:44  20145228江苒  阅读(177)  评论(0编辑  收藏  举报