教材学习内容总结

第八章 异常处理

1.try catch

java中所有错误会被打包成对象,可以进行尝试捕捉代表错误的对象进行处理。

Import java.until.Scanner;

Public class Average{

Public static void main(String[] args){

  1. Scanner console = new Scanner(System.in);
  2. double sum = 0;
  3. int count = 0;
  4. while(true)
  5. {
  6. int number = console.nextInt();
  7. if(number == 0)
  8. {
  9. break;
  10. }
  11. sum += number;
  12. count++;
  13. }
  14. System.out.printf(“平均 %.2f%n”, sun / count);
  15. }

}

执行结果:

(输入正确)

10 20 30 40 0

平均 25.00

(输入错误)

10 20 3O 40 0

Exception in thread “main”

java.until.InputMismatchException

at java.until.Scanner.throwFor(Scanner.java:909)

at java.until.Scanner.next(Scanner.java:1530)

at java.until.Scanner.nextInt(Scanner.java:2160)

at java.until.Scanner.nextInt(Scanner.java:2119)

at cc.openhome.Average.main(Average.java:11)

Java Result: 1

在错误可以捕捉处理后,尝试恢复程序正常执行流程。

Import java.until.*;

Public class Average2{

Public static void main(String[] args){

  1. try{
  2. Scanner console = new Scanner(System.in);
  3. double sum = 0;
  4. int count = 0;
  5. while(true)
  6. {
  7. int number = console.nextInt();
  8. if(number == 0)
  9. {
  10. break;
  11. }
  12. sum += number;
  13. count++;
  14. }
  15. System.out.printf(“平均 %.2f%n”, sun / count);
  16. }catch (InputMismatchException ex) {
  17. System.out.printIn(“必须输入整数”);
  18. }
  19. }

}

执行结果:

(输入正确)

10 20 30 40 0

平均:25.00

(输入错误)

10 20 3o 40 0

逆序输入整数

Import java.until.*;

Public class Average3{

Public static void main(String[] args){

  1. Scanner console = new Scanner(System.in);
  2. Double sum = 0;
  3. Int count = 0;
  4. While(true)
  5. {
  6. try{
  7. int number = console.nextInt();
  8. if(number == 0)
  9. {
  10. break;
  11. }
  12. Sum += number;
  13. Count++;
  14. } catch (InputMismatchException ex) {
  15. System.out.printf(“略过非整数输入:%s%n”, console.next());
  16. }
  17. }
  18. System.out.printf(“平均 %.2f%n”, sun / count);
  19. }

}

执行结果:

(输入错误)

10 20 3o 40 0

略过非整数输入:3o

平均:23.33

2.异常继承构架

解决错误信息的方法:使用try、catch打包System.in.read(),是在main()方法旁边声明throws java.io.IOException。

3.认识堆栈追踪

利用异常对象自动收集的堆栈追踪得知异常发生的根源。

查看堆栈追踪的最简单方法就是直接调用对象的printStackTrace()。

在使用throw重抛异常是,异常的追踪堆栈起点,仍是异常的发生根源,而不是发生异常的地方。

public class StackTraceDemo2 {

  1. public static void main(String[] args) {
  2. try{
  3. c();
  4. }catch(NullPointerException ex) {
  5. ex.printStackTrace();
  6. }
  7. }
  8. static void c() {
  9. try{
  10. b();
  11. }catch(NullPointerException ex) {
  12. ex.printStackTrace();
  13. throw ex;
  14. }
  15. }
  16. static void b() {
  17. a();
  18. }
  19. static String a() {
  20. String text = null;
  21. return text.toUpperCase();
  22. }

}

执行结果:

java.lang.NullPointerException

java.lang.NullPointerException

at cc.openhome.StackTraceDemo2.a(StackTraceDemo2.java:28)

at cc.openhome.StackTraceDemo2.b(StackTraceDemo2.java:23)

at cc.openhome.StackTraceDemo2.c(StackTraceDemo2.java:14)

at cc.openhome.StackTraceDemo2.main(StackTraceDemo2.java:6)

java.lang.NullPointerException

at cc.openhome.StackTraceDemo2.a(StackTraceDemo2.java:28)

at cc.openhome.StackTraceDemo2.b(StackTraceDemo2.java:23)

at cc.openhome.StackTraceDemo2.c(StackTraceDemo2.java:14)

at cc.openhome.StackTraceDemo2.main(StackTraceDemo2.java:6)

如果要异常堆栈起点为重抛异常的地方,可使用fillInStackTrace()方法。

public class StackTraceDemo3 {

public static void main(String[] args) {

  1. try{
  2. c();
  3. }catch(NullPointerException ex) {
  4. ex.printStackTrace();
  5. }
  6. }
  7. static void c() {
  8. try{
  9. b();
  10. }catch(NullPointerException ex) {
  11. ex.printStackTrace();
  12. Throwable t = ex.fillInStackTrace();
  13. throw (NullPointerException) t;
  14. }
  15. }
  16. static void b() {
  17. a();
  18. }
  19. static String a() {
  20. String text = null;
  21. return text.toUpperCase();
  22. }

}

执行结果:

java.lang.NullPointerException

at cc.openhome.StackTraceDemo3.a(StackTraceDemo3.java:28)

at cc.openhome.StackTraceDemo3.b(StackTraceDemo3.java:23)

at cc.openhome.StackTraceDemo3.c(StackTraceDemo3.java:14)

at cc.openhome.StackTraceDemo3.main(StackTraceDemo3.java:6)

java.lang.NullPointerException

at cc.openhome.StackTraceDemo3.c(StackTraceDemo3.java:17)

at cc.openhome.StackTraceDemo3.main(StackTraceDemo3.java:6)

4.java.lang.AutoCloseable接口

操作java.lang.AutoCloseable接口,在JDK7尝试关闭资源语法客套用的对象。

public class AutoClosableDemo {

public static void main(String[] args) {

  1. try(Reource res = new Reource()) {
  2. res.doSome()
  3. }catch(Excepion ex) {
  4. ex.pintSackTrace();
  5. }
  6. }

}

class Resource implements AutoCloseable {

  1. void doSome() {
  2. System.out.printIn(“做一些事”);
  3. }
  4. @Override
  5. public void close() throws Exception {
  6. System.out.prinIn(“资源被关闭”);
  7. }

}

执行结果:

做一些事

资源被关闭

尝试关闭资源语法也可以同时关闭两个以上的对象资源。

import static java.lang.System.out;

public class AutoClosableDemo {

public static void main(String[] args) {

  1. try(ResourceSome some = new ResourceSome();
  2. ResourceOther other = new ResourceOther()) {
  3. some.doSome();
  4. other.doOther();
  5. }catch(Exception ex) {
  6. ex.printStackTrace();
  7. }
  8. }

}

class ResourceSome implements AutoCloseable {

  1. void doSome() {
  2. out.printIn(“做一些事”);
  3. }
  4. @Override
  5. public void close() throws Exception {
  6. out.prinIn(“资源Some被关闭”);
  7. }

}

class ResourceOther implements AutoCloseable {

  1. void doOther () {
  2. out.printIn(“做其他事”);
  3. }
  4. @Override
  5. public void close() throws Exception {
  6. out.prinIn(“资源Other被关闭”);
  7. }

}

执行结果:

做一些事

做其他事

资源Some被关闭

资源Other被关闭

第九章 Collection与Map

1.认识Collection构架

针对手机对象的需求,Java提供了Collection API。

2.具有索引的List

ArrayList特性:排序

LinkedList特性:链式结构

3.Set

使用Set接口操作对象,可以在收集过程中的相同对象不再重复收集。

import java.util.*;

class Student {

  1. private String name;
  2. private String number;
  3. Student(String name, String number) {
  4. this.name = name;
  5. this.number = number;
  6. }
  7. @Override
  8. public String toString() {
  9. return String.format(“(%s,%s)”, name, number);
  10. }

}

public class Students {

public static void main(String[] args) {

  1. Set students = new HashSet();
  2. students.add(new Student(“Justin”, B835031”));
  3. students.add(new Student(“Monica”, B835032”));
  4. students.add(new Student(“Justin”, B835031”));
  5. System.out.printIn(set);
  6. }

}

执行结果:

[(Monica,B835032),(Justin,B835031),( Justin,B835031)]

重复的student不被收集

import java.util.*;

class Student {

  1. private String name;
  2. private String number;
  3. Student(String name, String number) {
  4. this.name = name;
  5. this.number = number;
  6. }
  7. @Override
  8. public int hashCode() {
  9. int hash = 7;
  10. hash = 47 * hash + Objects.hashCode(this.name);
  11. hash = 47 * hash + Objects.hashCode(this.number);
  12. return hash;
  13. }
  14. @Override
  15. public Boolean equals(Object obj) {
  16. if (obj == null) {
  17. return false;
  18. }
  19. if (grtClass() != obj.getClass()) {
  20. return false;
  21. }
  22. final Student other = (student) obj;
  23. if (!Objects.equals(this.name, other.name)) {
  24. return false;
  25. }
  26. if (!Objects.equals(this.number, other.number)) {
  27. return false;
  28. }
  29. return true;
  30. }
  31. @Override
  32. public String toString() {
  33. return String.format(“(%s,%s)”, name, number);
  34. }

}

public class Students {

  1. public static void main(String[] args) {
  2. Set students = new HashSet();
  3. students.add(new Student(“Justin”, B835031”));
  4. students.add(new Student(“Monica”, B835032”));
  5. students.add(new Student(“Justin”, B835031”));
  6. System.out.printIn(set);
  7. }

}

执行结果:

[(Monica,B835032),(Justin,B835031)]

4.Queue

Queue与Deque等义方法

Queue方法 Deque方法

add() addLast()

Offer() offerLast()

remove() removeFirst()

poll() pollFirst()

element() getFirst()

peek() peekFirst()

使用ArrayDeque操作容量有限的堆栈

import java.util.*;

import static java.lang.System.out;

public class Stack {

  1. private Deque elems = new ArrayDeque();
  2. prive int capacity;
  3. public Stack(int capacity) {
  4. this.capacity = capacity;
  5. }
  6. public Boolean push(Object elem) {
  7. if(isFull()) {
  8. return false;
  9. }
  10. return elems.offerLast(elem);
  11. }
  12. private Boolean isFull() {
  13. return elems.size() + 1 > capacity;
  14. }
  15. public Object pop() {
  16. return elems.pollLast();
  17. }
  18. public Object peek() {
  19. return elems.peekLast();
  20. }
  21. public int size() {
  22. return elems.size();
  23. }
  24. public static void main(String[] args) {
  25. Stack stack = new Stack(5);
  26. stack.push(“Justin”);
  27. stack.push(“Monica”);
  28. stack.push(“Irene”);
  29. out.printIn(stack.pop());
  30. out.printIn(stack.pop());
  31. out.printIn(stack.pop());
  32. }

}

执行结果:

Irene

Monica

Justin

5.Comparable与Comparator

必须有索引才能进行排序。

使用Collections的sort()方法接受List的操作。

import java.util.*;

public class Sort {

  1. public static void main(String[] args) {
  2. List numbers = Arrays.asList(10, 2, 3, 1, 9, 15, 4);
  3. Collections.sort(numbers);
  4. Sysem.out.printIn(numbers);
  5. }

}

执行结果:

[1, 2, 3, 4, 9, 10, 15]

操作Comparable

import java.util.*;

class Account implements Comparable {

  1. private String name;
  2. private String number;
  3. private int balance;
  4. Account(String name, String number, int balance) {
  5. this.name = name;
  6. this.number = number;
  7. this.balance = balance;
  8. }
  9. @Override
  10. public int compareTo(Account other) {
  11. return this.balance other.balance;
  12. }

}

public class Sort {

  1. public static void main(String[] args) {
  2. List account = Arrays.asList(
  3. new Account(“Justin”,”X1234”,1000),
  4. new Account(“Monica”,”X5678”,500),
  5. new Account(“Irene”,”X2468”,200)
  6. };
  7. Collections.sort(accounts);
  8. System.out.printIn(accounts);
  9. }

}

执行结果:

[Account(Irene, X2468, 200), Account(Monica, X5678, 500), Account(Justin, X1234, 1000)]

操作Comparator

import java.util.*;

public class Sort {

  1. public static void main(String[] args) {
  2. List words = Arrays.asList(“B”,”X”,”A”,”M”,”F”,”W”,”O”);
  3. Collections.sort(words);
  4. System.out.printIn(words);
  5. }

}

执行结果:

[A, B, F, M, O, W, X]

另一方法:排序方式根据Comparator的compare()定义来决定

import java.util.*;

class StringComparator implements Comparator {

  1. @Override
  2. public int compare(String s1, String s2) {
  3. return s1.compareTo(s2);
  4. }

}

public class Sort {

  1. public static void main(String[] args) {
  2. List words = Arrays.asList(“B”,”X”,”A”,”M”,”F”,”W”,”O”);
  3. Collections.sort(words, new StringComparator());
  4. System.out.printIn(words);
  5. }

}

执行结果:

[X, W, O, M, F, B, A]

6.常用Map操作类

HashMap Map也支持泛型语法

TreeMap 如果使用TreeMap建立键值对应,则键的部分将会排序,条件式作为键的对象必须操作Compatable接口。

使用Properties Properties可以从文档中读取属性。

7.访问Map键值

如果想取得Map中所有键值,可以调用Map的keySet()返回Set对象。

教材学习中的问题和解决过程

本周的学习内容说实话有点多,光是看书并不能都看懂弄会,许多地方都询问了同学。总的来说我还需要多多练习。

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

还是没有搞懂使用comparable到底是如何索引排序的,还有如何使用TreeMap建立键值对应我也不是太理解。

其他(感悟、思考等)

连续几周,需要学习的内容比较多,感觉有点吃紧还有一部分知识点掌握的不好,看来需要再接再厉了。

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导

20145127《java程序设计》第五周学习总结的更多相关文章

  1. 201521123025<java程序设计>第五周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...

  2. Java程序设计第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  8. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  9. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  10. 20175313 张黎仙《Java程序设计》第九周学习总结

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

随机推荐

  1. 各大互联网公司java开发面试常问问题

    本人是做java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些,相信面试会轻松许多. 1. junit用法,be ...

  2. bin/hdfs dfs命令存在WARN util.NativeCodeLoader问题消除方法

    例如:[hadoop@db01 hadoop-2.5.0]$ bin/hdfs dfs -ls17/03/01 21:50:33 WARN util.NativeCodeLoader: Unable ...

  3. Web终端SSH功能

    http://www.laozuo.org/10703.html------ CentOS安装配置GateOne实现Web终端SSH功能

  4. Ubuntu16.04 搜狗输入法输入汉字时候选栏是一串字符数字乱码问题解决方法

    https://blog.csdn.net/liudahanghang/article/details/80494851 1. 如果是刚装完搜狗输入法,则输入命令:sudo apt-get insta ...

  5. 【Pyton】【小甲鱼】异常处理:你不可能总是对的

    Exception 1.assertionerror举例 >>> my_list=['小甲鱼是帅哥'] >>> assert len(my_list)>0 & ...

  6. (3.5)mysql基础深入——mysqld_safe脚本功能及流程

    (3.5)mysql基础深入——mysqld_safe脚本功能及流程 目录 1.mysqld_safe过程总结 2.mysql_safe启动的好处 3.mysqld_safe 参数 4.mysqld_ ...

  7. dedecms文章页调用地址(当前文章URL)如何操作?

    我们在建站时经常会在文末加一个本文地址,那么dedecms文章页如何调用当前文章URL呢?这样做的好处是增加文章的唯一标识,更进一步的做法是在head中加个cannacial标签,告诉搜索引擎url的 ...

  8. python类内部调用自己的成员函数必须加self

    class A: def a(self): print("hello world") def b(self): return self.a() 上面的self.a()中self是不 ...

  9. vue学习五之VueCLi

    概念 通俗的说,Vue CLI是我们创建大型项目时的脚手架,所谓脚手架,就是帮助我们建设好了建造大厦的所需模板,建设者只需往模板里面填入实质内容,即可完成大厦的建设,对于程序开发来说,脚手架使程序员只 ...

  10. storm介绍,核心组件,编程模型

    一.流式计算概念 利用分布式的思想和方法,对海量“流”式数据进行实时处理,源自业务对海量数据,在“时效”的价值上的挖掘诉求,随着大数据场景应用场景的增长,对流式计算的需求愈发增多,流式计算的一般架构图 ...