java.lang.Error
和java.lang.Exception
(异常处理)两个子类try{ ... }catch(IOEeception | InterruptedException | ClassCastException e) { e.printStackTrace(); }
FileInputStream
能够指定档名来开启与读取文档内容,可是在建立时会FileNotFoundException
错误。抛出受检异常表示客户端有能力且应处理异常,必须在方法上使用throws声明。java.util.Iterator
接口的操做对象,这个对象包括了Collection收集的全部对象;加强式for循环还能够运用在操做Iterable接口的对象上。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; } }
Request request=()->out.printf("处理数据 %f",Math.random());
Lambda表达式的语法省略了接口类型和方法名称。—>左边是参数列,右边是方法本体。编译程序能够由Request request的声明中得知语法上被省略的信息。import java.util.*; interface Request2 { void execute(); } public class RequestQueue2 { public static void main (String[] args) { Queue<Request2>requests = new LinkedList<>(); offerRequestTo(requests); process(requests); } static void offerRequestTo(Queue<Request2>requests) { for (int i = 1; i < 6;i++) { requests.offer (() -> System.out.printf("处理数据%f%n",Math.random())); } } static void process(Queue<Request2>requests) { while(requests.peek() != null) { Request2 request = requests.poll(); request.execute(); } } }
解决方案:须要注意若是父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块永远不会被执行。总结为:子类不能比父类抛出更大的异常。这个问题经过看了狄唯佳同窗的博客得以解决。html
- 子类覆盖父类方法是,父类方法抛出异常:子类的覆盖方法能够不抛出异常,或者抛出父类方法的异常。2. 父类方法抛出了多个异常,子类覆盖方法时,只能抛出父类异常的子集。3. 父类没有抛出异常,则子类不可抛出异常。若子类发生非运行时异常,须要进行try-catch处理,不能抛出。4. 子类不能比父类抛出更大的异常。
public class TestFinally { public static void main(String[] args) { try{ System.out.printf("nomal"); }catch (Exception ex){ System.out.printf("Exception"); }finally { System.out.printf("Finally"); } } }
执行结果:
java
在try或是catch块中使用了return语句,将代码稍做修改:git
public static void main(String[] args) { try{ System.out.printf("nomal"); }catch (Exception ex){ System.out.printf("Exception"); return; }finally { System.out.printf("Finally"); } }
执行结果:finally中的代码仍是执行了
设计模式
再次简单修改代码:数组
public static void main(String[] args) { try{ System.out.printf("nomal"); System.exit(0); }catch (Exception ex){ System.out.printf("Exception"); System.exit(0); }finally { System.out.printf("Finally"); } }
运行代码,结果为:System.exit()终止了JVM,finally不执行。
架构
Cannot resolve symbol 'set'
解决:参考这个图可知除被本类或者派生类(子类)的成员函数访问外,还能够被本包内全部类访问
dom
本周由于准备二级的缘由,代码敲得有些少,从周日才开始学习Java,下周仍是会利用平时的时间学习。慢慢找到了平时测试的套路,可是动手实践仍是不多,独自编写一个新学的程序仍是有必定困难。ide
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/100 | 1/1 | 24/24 | 安装学习Java的一系列软件 |
第二周 | 250/300 | 1/2 | 30/54 | 了解Java的基本语法 |
第三周 | 552/852 | 1/3 | 16/60 | 了解Java是面向对象的语言 |
第四周 | 717/1569 | 1/4 | 10/70 | 了解Java继承与接口 |
第五周 | 495/2064 | 1/5 | 6/76 | 了解异常处理,学会使用Collection收集对象 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进本身的计划能力。这个工做学习中很重要,也颇有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。函数
参考:软件工程软件的估计为何这么难,软件工程 估计方法学习
计划学习时间:10小时
实际学习时间:6小时