20145127《java程序设计》第五周学习总结
教材学习内容总结
第八章 异常处理
1.try catch
java中所有错误会被打包成对象,可以进行尝试捕捉代表错误的对象进行处理。
Import java.until.Scanner;
Public class Average{
Public static void main(String[] args){
Scanner console = new Scanner(System.in);
double sum = 0;
int count = 0;
while(true)
{
int number = console.nextInt();
if(number == 0)
{
break;
}
sum += number;
count++;
}
System.out.printf(“平均 %.2f%n”, sun / count);
}
}
执行结果:
(输入正确)
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){
try{
Scanner console = new Scanner(System.in);
double sum = 0;
int count = 0;
while(true)
{
int number = console.nextInt();
if(number == 0)
{
break;
}
sum += number;
count++;
}
System.out.printf(“平均 %.2f%n”, sun / count);
}catch (InputMismatchException ex) {
System.out.printIn(“必须输入整数”);
}
}
}
执行结果:
(输入正确)
10 20 30 40 0
平均:25.00
(输入错误)
10 20 3o 40 0
逆序输入整数
Import java.until.*;
Public class Average3{
Public static void main(String[] args){
Scanner console = new Scanner(System.in);
Double sum = 0;
Int count = 0;
While(true)
{
try{
int number = console.nextInt();
if(number == 0)
{
break;
}
Sum += number;
Count++;
} catch (InputMismatchException ex) {
System.out.printf(“略过非整数输入:%s%n”, console.next());
}
}
System.out.printf(“平均 %.2f%n”, sun / count);
}
}
执行结果:
(输入错误)
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 {
public static void main(String[] args) {
try{
c();
}catch(NullPointerException ex) {
ex.printStackTrace();
}
}
static void c() {
try{
b();
}catch(NullPointerException ex) {
ex.printStackTrace();
throw ex;
}
}
static void b() {
a();
}
static String a() {
String text = null;
return text.toUpperCase();
}
}
执行结果:
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) {
try{
c();
}catch(NullPointerException ex) {
ex.printStackTrace();
}
}
static void c() {
try{
b();
}catch(NullPointerException ex) {
ex.printStackTrace();
Throwable t = ex.fillInStackTrace();
throw (NullPointerException) t;
}
}
static void b() {
a();
}
static String a() {
String text = null;
return text.toUpperCase();
}
}
执行结果:
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) {
try(Reource res = new Reource()) {
res.doSome()
}catch(Excepion ex) {
ex.pintSackTrace();
}
}
}
class Resource implements AutoCloseable {
void doSome() {
System.out.printIn(“做一些事”);
}
@Override
public void close() throws Exception {
System.out.prinIn(“资源被关闭”);
}
}
执行结果:
做一些事
资源被关闭
尝试关闭资源语法也可以同时关闭两个以上的对象资源。
import static java.lang.System.out;
public class AutoClosableDemo {
public static void main(String[] args) {
try(ResourceSome some = new ResourceSome();
ResourceOther other = new ResourceOther()) {
some.doSome();
other.doOther();
}catch(Exception ex) {
ex.printStackTrace();
}
}
}
class ResourceSome implements AutoCloseable {
void doSome() {
out.printIn(“做一些事”);
}
@Override
public void close() throws Exception {
out.prinIn(“资源Some被关闭”);
}
}
class ResourceOther implements AutoCloseable {
void doOther () {
out.printIn(“做其他事”);
}
@Override
public void close() throws Exception {
out.prinIn(“资源Other被关闭”);
}
}
执行结果:
做一些事
做其他事
资源Some被关闭
资源Other被关闭
第九章 Collection与Map
1.认识Collection构架
针对手机对象的需求,Java提供了Collection API。
2.具有索引的List
ArrayList特性:排序
LinkedList特性:链式结构
3.Set
使用Set接口操作对象,可以在收集过程中的相同对象不再重复收集。
import java.util.*;
class Student {
private String name;
private String number;
Student(String name, String number) {
this.name = name;
this.number = number;
}
@Override
public String toString() {
return String.format(“(%s,%s)”, name, number);
}
}
public class Students {
public static void main(String[] args) {
Set students = new HashSet();
students.add(new Student(“Justin”, “B835031”));
students.add(new Student(“Monica”, “B835032”));
students.add(new Student(“Justin”, “B835031”));
System.out.printIn(set);
}
}
执行结果:
[(Monica,B835032),(Justin,B835031),( Justin,B835031)]
重复的student不被收集
import java.util.*;
class Student {
private String name;
private String number;
Student(String name, String number) {
this.name = name;
this.number = number;
}
@Override
public int hashCode() {
int hash = 7;
hash = 47 * hash + Objects.hashCode(this.name);
hash = 47 * hash + Objects.hashCode(this.number);
return hash;
}
@Override
public Boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (grtClass() != obj.getClass()) {
return false;
}
final Student other = (student) obj;
if (!Objects.equals(this.name, other.name)) {
return false;
}
if (!Objects.equals(this.number, other.number)) {
return false;
}
return true;
}
@Override
public String toString() {
return String.format(“(%s,%s)”, name, number);
}
}
public class Students {
public static void main(String[] args) {
Set students = new HashSet();
students.add(new Student(“Justin”, “B835031”));
students.add(new Student(“Monica”, “B835032”));
students.add(new Student(“Justin”, “B835031”));
System.out.printIn(set);
}
}
执行结果:
[(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 {
private Deque elems = new ArrayDeque();
prive int capacity;
public Stack(int capacity) {
this.capacity = capacity;
}
public Boolean push(Object elem) {
if(isFull()) {
return false;
}
return elems.offerLast(elem);
}
private Boolean isFull() {
return elems.size() + 1 > capacity;
}
public Object pop() {
return elems.pollLast();
}
public Object peek() {
return elems.peekLast();
}
public int size() {
return elems.size();
}
public static void main(String[] args) {
Stack stack = new Stack(5);
stack.push(“Justin”);
stack.push(“Monica”);
stack.push(“Irene”);
out.printIn(stack.pop());
out.printIn(stack.pop());
out.printIn(stack.pop());
}
}
执行结果:
Irene
Monica
Justin
5.Comparable与Comparator
必须有索引才能进行排序。
使用Collections的sort()方法接受List的操作。
import java.util.*;
public class Sort {
public static void main(String[] args) {
List numbers = Arrays.asList(10, 2, 3, 1, 9, 15, 4);
Collections.sort(numbers);
Sysem.out.printIn(numbers);
}
}
执行结果:
[1, 2, 3, 4, 9, 10, 15]
操作Comparable
import java.util.*;
class Account implements Comparable {
private String name;
private String number;
private int balance;
Account(String name, String number, int balance) {
this.name = name;
this.number = number;
this.balance = balance;
}
@Override
public int compareTo(Account other) {
return this.balance – other.balance;
}
}
public class Sort {
public static void main(String[] args) {
List account = Arrays.asList(
new Account(“Justin”,”X1234”,1000),
new Account(“Monica”,”X5678”,500),
new Account(“Irene”,”X2468”,200)
};
Collections.sort(accounts);
System.out.printIn(accounts);
}
}
执行结果:
[Account(Irene, X2468, 200), Account(Monica, X5678, 500), Account(Justin, X1234, 1000)]
操作Comparator
import java.util.*;
public class Sort {
public static void main(String[] args) {
List words = Arrays.asList(“B”,”X”,”A”,”M”,”F”,”W”,”O”);
Collections.sort(words);
System.out.printIn(words);
}
}
执行结果:
[A, B, F, M, O, W, X]
另一方法:排序方式根据Comparator的compare()定义来决定
import java.util.*;
class StringComparator implements Comparator {
@Override
public int compare(String s1, String s2) {
return –s1.compareTo(s2);
}
}
public class Sort {
public static void main(String[] args) {
List words = Arrays.asList(“B”,”X”,”A”,”M”,”F”,”W”,”O”);
Collections.sort(words, new StringComparator());
System.out.printIn(words);
}
}
执行结果:
[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程序设计》第五周学习总结的更多相关文章
- 201521123025<java程序设计>第五周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175313 张黎仙《Java程序设计》第九周学习总结
目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...
随机推荐
- codeforces 14A - Letter & codeforces 859B - Lazy Security Guard - [周赛水题]
就像title说的,是昨天(2017/9/17)周赛的两道水题…… 题目链接:http://codeforces.com/problemset/problem/14/A time limit per ...
- Oracle卸载之Linux下卸载oracle11g的方法
1.使用SQL*PLUS停止数据库 如果不能通过sysdba登陆可以用nolog用户登陆后切换至sysdba [oracle@OracleTest oracle]$ sqlplus /nolog S ...
- Python爬虫框架Scrapy实例(四)下载中间件设置
还是豆瓣top250爬虫的例子,添加下载中间件,主要是设置动态Uesr-Agent和代理IP Scrapy代理IP.Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控 ...
- 洛谷P2577 [ZJOI2005]午餐 dp
正解:序列dp 解题报告: 传送门! 这题首先要想到一个显然的贪心:每个窗口的排队顺序都是按照吃饭时间从大到小排序的 证明如下: 这种贪心通常都是用微扰法,这题也不例外 现在假如已经确定了每个窗口有哪 ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- 使用GIT SUBTREE集成项目到子目录(转)
原文:http://aoxuis.me/post/2013-08-06-git-subtree 使用场景 例如,在项目Game中有一个子目录AI.Game和AI分别是一个独立的git项目,可以分开维护 ...
- 15款Django开发常用软件包(转)
原文:http://www.iteye.com/news/28697 Django是一款高级的Python Web框架,可以帮助开发者快速创建web应用.我们这里整理了15款Django开发中常用的软 ...
- ChinaTest测试感悟
这次去北京参加ChinaTest大会,听了各位大师和同行的心得和感悟,收获颇多.很喜欢这样的大会,可以听到测试的各种声音各种观点.当没有对错时,需要思考的就是怎样采取最适合当前环境的策略.言归正传,谈 ...
- sql执行顺序与性能优化小技巧(一)
关于sql条件匹配对执行效率影响测试 首先,创建一个标量函数create function ff_test() returns int as begin declare @i int=0 while( ...
- 【Python练习】文件引用用户名密码登录系统
一.通过txt文件引入用户名密码 1 #coding=utf-8 from selenium import webdriver #from selenium.common.exceptions imp ...