zoukankan      html  css  js  c++  java
  • 20145124《Java程序设计》第5周学习总结

    20145124《Java程序设计》第5周学习总结

    学习内容总结

    8.1语法与继承结构

    8.1.1Try、catch
    java中所有的错误都会打包为对象,可以try catch代表错误的对象后做一些处理(可以显示错误,也可以恢复正常流程)。

    8.1.2异常继承架构
    错误包装为对象是可以抛出的,所有的设计错误对象都是继承java.lang.Throwable类(java.lang.Error、java.lang.Exception为其两个子类)。一般的,error错误抛出时,基本上不用处理。 如果某个方法声明会throw throwable或子类实例,不是error和runtimeexception及其子类,即必须用try catch进行处理。
    exception及其子对象,不少于runtimeexception或其子对象,称为受检异常(受编译程序检查),程序认为你有能力处理错误,你就需要去处理。同时要注意错误发生的时机,是否可以及时处理。
    如果父类异常对象在子类异常对象前catch,那么catch子类异常对象的区块将永远不会被执行,所以要注意捕捉的顺序。
    可以使用多重捕捉简化程序(注意不得有继承关系)。

    8.1.3Throw or Catch
    如果方法设计流程中发生异常,而你没有充足的信息来知道如何处理,可以抛出异常,让调用方法的客户端来处理。 处理完部分错误后,可以使用throw将异常再抛出,但必须在方法上使用throws声明(受检异常)

    8.1.4
    处理完部分异常后,你可以重新抛出异常,为了更精确地显示错误,可以通过自定义异常

    8.1.5Stacktrace
    可以使用printstacktrace来进行错误的追踪,要善用stacktrace。用fillinstacktrace()方法可以重新装填异常堆栈,将起点设为重抛异常的地方,并返回throwable对象。

    8.1.6assert
    用来判断程序执行的某个time point或是否处于某个特定的state,不是的话可以停止程序进行修改。
    Assertion常用的几种情况:
    1、前置条件的准备(private方法之中) 2、调用方法后承诺效果 3、assert对象某个time point下的状态 4、取代批注 5、assert不会执行到的那部分 6、不能有default的状况

    8.2异常与资源管理

    8.2.1finally
    无论try区块中有误发生异常,若有finally区块,则finally区块一定会被执行。另外注意如果程序流程中先return了,同时有finally区块,那会先执行finally区块再返回值。

    8.2.2Try-With-Resources
    自动尝试关闭资源是协助你关闭资源,而不是用于异常处理,使用该语法时,不要试图自行撰写程序代码关闭资源。

    8.2.3java.lang.AutoCloseable
    try with resources 语法所操作的一个接口。

    使用Collection收集对象

    认识Collection

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

    具有索引的List
    List是一种Collection ,作用是收集对象,并以索引方式保留收集的对象顺序,其操作类之一是java.util.ArrayList。
    List定义了许多索引操作的方法。
    ArrayList特性: 有个可指定容量的构造函数,在大致知道将收集的对象范围,可事先建立足够长度的内部数组。
    LinkedList特性: LinkedList在操作List接口时,采用了链接结构。若收集对象经常会有变动索引的情况,考虑链接方式操作的List比较好,像是随时会有客户登录或注销的客户端List,使用LinkedList会有比较的好的效率。

    内容不重复的Set
    同样是收集对象,在收集过程中若有相同对象,则不再重复收集,此时可以使用Set接口的操作对象。
    判断对象是否重复时,都会调用hashCode()与equals()方法,建议两个方法同时使用。

    支持队列操作的Queue
    使用ArrayDeque来操作容量有限的堆栈。

    import java.util.*;
    import static java.lang.System.out;
    
    public class Stack
    {
    private Deque elems = new ArrayDeque();
    private int capacity ;
    
    public Stack(int capacity)
    {
        this.capacity = capacity;
    }
    
    public boolean push(Object elem)
    {
        if(isFull())
        {
            return false;
        }
        return elems.offerLast(elem);
    }
    
    private boolean ifFull()
    {
        return elems.size() + 1 > capacity;
    }
    
    public Object pop()
    {
        return elems.pollLast();
    }
    
    public Object peek()
    {
        return elems.size();
    }
    
    public static  void main (String[] agrs)
    {
        Stack stack = new Stack(5);
        stack.push("Justin");
        stack.push("Monica");
        stack.push("Irene");
        out.println(stack.pop());
        out.println(stack.pop());
        out.println(stack.pop());
    }
    }
    

    键值对应的Map

    常用Map操作类
    常用的Map操作类为java.util.HashMap与java.util.TreeMap,其继承自抽象类java.util.AbstractMap。
    使用HashMap:在HashMap中建立键值对应之后,键是无序的。
    使用TreeMap:如果使用TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Comparable接口,或者是创建TreeMap时指定操作Comparator接口的对象。
    使用Properties:Properties类继承自HashTable,HashTable操作了Map接口,Properties自然也有Map行为。Properties的=左边设定属性名称,右边设定属性值。可以使用Properties的load()方法指定InputStream实例。load()方法结束后会自动关闭InputStream实例。

    访问Map键值
    若想取得Map中所有的键,可以调用Map的keySet()返回Set对象。
    若想同时取得Map的键与值,可以使用entrySet()方法,这会返回一个Set对象,每个元素都是Map.Entry实例,可以调用getKey()取得键,调用getValue()取得值。
    Map没有继承Iterable,有个forEach()方法是定义在Map接口上,可使用这个方法结合Lambda表达式,在迭代键与值时获得不错的可读性。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 2000行 16篇 400小时
    第一周 200/200 2/2 20/20
    第二周 200/400 1/3 20/40
    第三周 200/600 1/4 20/60
    第四周 200/800 1/5 20/80
    第五周 200/1000 1/6 20/100
  • 相关阅读:
    如何将javaweb项目部署到阿里云服务器上
    解决ueditor配置文件第一行报错及乱码问题
    解决web.xml中<async-supported>true</async-supported>报错问题
    解决建完Maven项目没有main文件夹问题
    CentOS常用命令之搜索文件
    CentOS常用命令之创建删除剪切链接
    Jupyter notebook: TypeError: __init__() got an unexpected keyword argument 'io_loop 问题
    编译分布式并行版caffe(Open MPI)教程
    树状数组
    马拉车算法
  • 原文地址:https://www.cnblogs.com/20145124cwm/p/5351114.html
Copyright © 2011-2022 走看看