日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结

發布時間:2024/8/26 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗九?異常、斷言與日志

實驗時間?2018-10-25

1、實驗目的與要求

(1)?掌握java異常處理技術;

(2)?了解斷言的用法;

(3)?了解日志的用途;

(4)?掌握程序基礎調試技巧;

2、實驗內容和步驟

實驗1:用命令行與IDE兩種環境下編輯調試運行源程序ExceptionDemo1、ExceptionDemo2,結合程序運行結果理解程序,掌握未檢查異常和已檢查異常的區別。

//異常示例1

public?class?ExceptionDemo1?{

public?static?void?main(String?args[])?{

int?a?=?0;

System.out.println(5?/?a);

}

}

//異常示例2

import?java.io.*;

?

public?class?ExceptionDemo2?{

public?static?void?main(String?args[])?

?????{

??????????FileInputStream?fis=new?FileInputStream("text.txt");//JVM自動生成異常對象

??????????int?b;

??????????while((b=fis.read())!=-1)

??????????{

??????????????System.out.print(b);

??????????}

??????????fis.close();

??????}

}

1 public class ExceptionDemo1 { 2 3 public static void main(String[] args) { 4 5 int a = 0; 6 if (a==0) { 7 System.out.println("除數為零"); 8 } else { 9 System.out.println(5 / a); 10 } 11 } 12 } //消極處理方式 import java.io.*;public class ExceptionDemo2 {public static void main(String args[]) throws Exception { //以字節流打開未正常打開,字符流打開是可以正常打開。FileInputStream fis=new FileInputStream("text.txt");//JVM自動生成異常對象int b;while((b=fis.read())!=-1){System.out.print(b);}fis.close();} } //積極的異常處理 import java.io.*;public class ExceptionDemo {public static void main(String args[]) {FileInputStream fis;try {fis = new FileInputStream("text.txt");//JVM自動生成異常對象int b;while((b=fis.read())!=-1){System.out.print(b);}fis.close();} catch (Exception e) {//e.printStackTrace();// System.out.println("Hello."); }} }

?

實驗2:?導入以下示例程序,測試程序并進行代碼注釋。

測試程序1:

l?在elipse?IDE中編輯、編譯、調試運行教材281頁7-1,結合程序運行結果理解程序;

l?在程序中相關代碼處添加新知識的注釋;

l?掌握Throwable類的堆棧跟蹤方法

package stackTrace;import java.util.*;/*** 一種顯示遞歸方法調用的跟蹤特征的程序。* A program that displays a trace feature of a recursive method call.* @version 1.01 2004-05-10* @author Cay Horstmann*/ public class StackTraceTest {/*** Computes the factorial of a number 計算一個數的階乘 * @param n a non-negative integer 非負整數的PARAM * @return n! = 1 * 2 * . . . * n*/public static int factorial(int n){System.out.println("factorial(" + n + "):");Throwable t = new Throwable();StackTraceElement[] frames = t.getStackTrace();for (StackTraceElement f : frames)System.out.println(f);int r;if (n <= 1) r = 1;else r = n * factorial(n - 1);System.out.println("return " + r);return r;}public static void main(String[] args){Scanner in = new Scanner(System.in);System.out.print("Enter n: ");int n = in.nextInt();factorial(n);} }

?

測試程序2:

l?Java語言的異常處理有積極處理方法和消極處理兩種方式;

l?下列兩個簡答程序范例給出了兩種異常處理的代碼格式。在elipse?IDE中編輯、調試運行源程序ExceptionalTest.java,將程序中的text文件更換為身份證號.txt,要求將文件內容讀入內容,并在控制臺顯示;

l?掌握兩種異常處理技術的特點。

//積極處理方式  

import?java.io.*;

?

class?ExceptionTest?{

public?static?void?main?(string?args[])

???{

???????try{

???????FileInputStream?fis=new?FileInputStream("text.txt");

???????}

???????catch(FileNotFoundExcption?e

???? {???……??}

……

????}

}

//消極處理方式

?

import?java.io.*;

class?ExceptionTest?{

public?static?void?main?(string?args[])?throws??FileNotFoundExcption

?????{

? ????FileInputStream?fis=new?FileInputStream("text.txt");

?????}

}

import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader;public class ExceptionTest {public static void main(String[] args) throws IOException {try {FileInputStream fis = new FileInputStream("身份證號.txt");BufferedReader in = new BufferedReader(new InputStreamReader(fis));String m, n = new String();while ((m = in.readLine()) != null) {n += m + "\n ";}in.close();System.out.println(n);} catch (FileNotFoundException e) {System.out.println("學生信息文件找不到");e.printStackTrace();} catch (IOException e) {System.out.println("學生信息文件讀取錯誤");e.printStackTrace();}} }

//消極處理方式import java.io.*;public class ExceptionTest {public static void main (String args[]) throws IOException{File fis=new File("身份證號.txt");FileReader fr = new FileReader(fis);BufferedReader br = new BufferedReader(fr);String s, s2 = new String();while ((s = br.readLine()) != null) {s2 += s + "\n ";}br.close();System.out.println(s2);}}

實驗3:?編程練習

練習1

l?編制一個程序,將身份證號.txt?中的信息讀入到內存中;

l?按姓名字典序輸出人員信息;

l?查詢最大年齡的人員信息;

l?查詢最小年齡人員信息;

l?輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

l?查詢人員中是否有你的同鄉;

l?在以上程序適當位置加入異常捕獲代碼。

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Scanner;public class Test {private static ArrayList<Student> studentlist;public static void main(String[] args) {studentlist = new ArrayList<>();Scanner scanner = new Scanner(System.in);File file = new File("F:\\java\\身份證號.txt");try {FileInputStream fis = new FileInputStream(file);BufferedReader in = new BufferedReader(new InputStreamReader(fis));String temp = null;while ((temp = in.readLine()) != null) {Scanner linescanner = new Scanner(temp);linescanner.useDelimiter(" "); String name = linescanner.next();String number = linescanner.next();String sex = linescanner.next();String age = linescanner.next();String province =linescanner.nextLine();Student student = new Student();student.setName(name);student.setnumber(number);student.setsex(sex);int a = Integer.parseInt(age);student.setage(a);student.setprovince(province);studentlist.add(student);}} catch (FileNotFoundException e) {System.out.println("找不到學生的信息文件");e.printStackTrace();} catch (IOException e) {System.out.println("學生信息文件讀取錯誤");e.printStackTrace();}boolean isTrue = true;while (isTrue) {System.out.println("選擇你的操作, ");System.out.println("1.字典排序 ");System.out.println("2.輸出年齡最大和年齡最小的人 ");System.out.println("3.尋找同鄉 ");System.out.println("4.尋找年齡相近的人 ");System.out.println("5.退出 ");String m = scanner.next();switch (m) {case "1":Collections.sort(studentlist); System.out.println(studentlist.toString());break;case "2":int max=0,min=100;int j,k1 = 0,k2=0;for(int i=1;i<studentlist.size();i++){j=studentlist.get(i).getage();if(j>max){max=j; k1=i;}if(j<min){min=j; k2=i;}} System.out.println("年齡最大:"+studentlist.get(k1));System.out.println("年齡最小:"+studentlist.get(k2));break;case "3":System.out.println("地址?");String find = scanner.next(); String place=find.substring(0,3);for (int i = 0; i <studentlist.size(); i++) {if(studentlist.get(i).getprovince().substring(1,4).equals(place)) System.out.println("同鄉"+studentlist.get(i));} break;case "4":System.out.println("年齡:");int yourage = scanner.nextInt();int near=agenear(yourage);int value=yourage-studentlist.get(near).getage();System.out.println(""+studentlist.get(near));break;case "5 ":isTrue = false;System.out.println("退出程序!");break;default:System.out.println("輸入有誤");}}}public static int agenear(int age) { int j=0,min=53,value=0,ok=0;for (int i = 0; i < studentlist.size(); i++){value=studentlist.get(i).getage()-age;if(value<0) value=-value; if (value<min) {min=value;ok=i;} } return ok; }} public class Student implements Comparable<Student> {private String name;private String number ;private String sex ;private int age;private String province;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getnumber() {return number;}public void setnumber(String number) {this.number = number;}public String getsex() {return sex ;}public void setsex(String sex ) {this.sex =sex ;}public int getage() {return age;}public void setage(int age) {// int a = Integer.parseInt(age);this.age= age;}public String getprovince() {return province;}public void setprovince(String province) {this.province=province ;}public int compareTo(Student o) {return this.name.compareTo(o.getName());}public String toString() {return name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n";} }

注:以下實驗課后完成

練習2

l?編寫一個計算器類,可以完成加、減、乘、除的操作;

l?利用計算機類,設計一個小學生100以內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束后給出測試總分;

l?將程序中測試練習題及學生答題結果輸出到文件,文件名為test.txt

l?在以上程序適當位置加入異常捕獲代碼。

package 異常;import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner;public class Demo {public static void main(String[] args, Object jf) {@SuppressWarnings("resource")Scanner in = new Scanner(System.in);jf counter=new jf();PrintWriter out = null;try {out = new PrintWriter("text.txt");} catch (FileNotFoundException e) {// TODO Auto-generated catch block e.printStackTrace();}int sum = 0;for (int i = 1; i <=10; i++) {int a = (int) Math.round(Math.random() * 100);int b = (int) Math.round(Math.random() * 100);int m= (int) Math.round(Math.random() * 3);switch(m){case 0:System.out.println(i+": "+a+"/"+b+"=");while(b==0){ b = (int) Math.round(Math.random() * 100); }int c0 = in.nextInt();out.println(a+"/"+b+"="+c0);if (c0 == ((異常.jf) jf).division(a, b)) {sum += 10;System.out.println("恭喜答案正確");}else {System.out.println("抱歉,答案錯誤");}break;case 1:System.out.println(i+": "+a+"*"+b+"=");int c = in.nextInt();out.println(a+"*"+b+"="+c);if (c == counter.multiplication(a, b)) {sum += 10;System.out.println("恭喜答案正確");}else {System.out.println("抱歉,答案錯誤");}break;case 2:System.out.println(i+": "+a+"+"+b+"=");int c1 = in.nextInt();out.println(a+"+"+b+"="+c1);if (c1 == counter.add(a, b)) {sum += 10;System.out.println("恭喜答案正確");}else {System.out.println("抱歉,答案錯誤");}break ;case 3:System.out.println(i+": "+a+"-"+b+"=");int c2 = in.nextInt();out.println(a+"-"+b+"="+c2);if (c2 == counter.reduce(a, b)) {sum += 10;System.out.println("恭喜答案正確");}else {System.out.println("抱歉,答案錯誤");}break ;} }System.out.println("成績"+sum);out.println("成績:"+sum);out.close();}} package 異常;public class jf {private int a;private int b;public int add(int a,int b){return a+b;}public int reduce(int a,int b){return a-b;}public int multiplication(int a,int b){return a*b;}public int division(int a,int b){if(b!=0)return a/b;else return 0;} }

?

實驗4:斷言、日志、程序調試技巧驗證實驗。

實驗程序1

//斷言程序示例

public?class?AssertDemo?{

????public?static?void?main(String[]?args)?{????????

????????test1(-5);

????????test2(-3);

????}

????

????private?static?void?test1(int?a){

????????assert?a?>?0;

????????System.out.println(a);

????}

????private?static?void?test2(int?a){

???????assert?a?>?0?:?"something?goes?wrong?here,?a?cannot?be?less?than?0";

????????System.out.println(a);

????}

}

在elipse下調試程序AssertDemo,結合程序運行結果理解程序;

l?注釋語句test1(-5);后重新運行程序,結合程序運行結果理解程序;

l?掌握斷言的使用特點及用法。

//斷言程序示例 public class AssertDemo {public static void main(String[] args) { test1(-5);test2(-3);}private static void test1(int a){assert a > 0;System.out.println(a);}private static void test2(int a){assert a > 0 : "something goes wrong here, a cannot be less than 0";System.out.println(a);} }

實驗程序2:

l?用JDK命令調試運行教材298-300頁程序7-2,結合程序運行結果理解程序;

l?并掌握Java日志系統的用途及用法。

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger;import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem;/*** The frame that shows the image.*/ class ImageViewerFrame extends JFrame {private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 400; private JLabel label;private static Logger logger = Logger.getLogger("com.horstmann.corejava");public ImageViewerFrame(){logger.entering("ImageViewerFrame", "<init>"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);// set up menu barJMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);JMenu menu = new JMenu("File");menuBar.add(menu);JMenuItem openItem = new JMenuItem("Open");menu.add(openItem);openItem.addActionListener(new FileOpenListener());JMenuItem exitItem = new JMenuItem("Exit");menu.add(exitItem);exitItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){logger.fine("Exiting.");System.exit(0);}});// use a label to display the imageslabel = new JLabel();add(label);logger.exiting("ImageViewerFrame", "<init>");}private class FileOpenListener implements ActionListener{public void actionPerformed(ActionEvent event){logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event);// set up file chooserJFileChooser chooser = new JFileChooser();chooser.setCurrentDirectory(new File("."));// accept all files ending with .gifchooser.setFileFilter(new javax.swing.filechooser.FileFilter(){public boolean accept(File f){return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory();}public String getDescription(){return "GIF Images";}});// show file chooser dialogint r = chooser.showOpenDialog(ImageViewerFrame.this);// if image file accepted, set it as icon of the labelif (r == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();logger.log(Level.FINE, "Reading file {0}", name);label.setIcon(new ImageIcon(name));}else logger.fine("File open dialog canceled.");logger.exiting("ImageViewerFrame.FileOpenListener", "actionPerformed");}} } import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.logging.*; import javax.swing.*;/*** A modification of the image viewer program that logs various events.* @version 1.03 2015-08-20* @author Cay Horstmann*/ public class LoggingImageViewer {public static void main(String[] args){if (System.getProperty("java.util.logging.config.class") == null&& System.getProperty("java.util.logging.config.file") == null){try{Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);final int LOG_ROTATION_COUNT = 10;Handler handler = new FileHandler("%h/LoggingImageViewer.log", 0, LOG_ROTATION_COUNT);Logger.getLogger("com.horstmann.corejava").addHandler(handler);}catch (IOException e){Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,"Can't create log file handler", e);}}EventQueue.invokeLater(() ->{Handler windowHandler = new WindowHandler();windowHandler.setLevel(Level.ALL);Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);JFrame frame = new ImageViewerFrame();frame.setTitle("LoggingImageViewer");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Logger.getLogger("com.horstmann.corejava").fine("Showing frame");frame.setVisible(true);});} } import java.util.logging.LogRecord; import java.util.logging.StreamHandler;import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea;import org.omg.CORBA.Any; import org.omg.CORBA.Object; import org.omg.CORBA.TypeCode; import org.omg.CORBA.portable.InputStream; import org.omg.CORBA_2_3.portable.OutputStream;/*** A handler for displaying log records in a window.*/ class WindowHandler extends StreamHandler {private JFrame frame;public WindowHandler(){frame = new JFrame();final JTextArea output = new JTextArea();output.setEditable(false);frame.setSize(200, 200);frame.add(new JScrollPane(output));frame.setFocusableWindowState(false);frame.setVisible(true);setOutputStream(new OutputStream(){public void write(int b){} // not calledpublic void write(byte[] b, int off, int len){output.append(new String(b, off, len));}@Overridepublic InputStream create_input_stream() {// TODO Auto-generated method stubreturn null;}@Overridepublic void write_Object(Object arg0) {// TODO Auto-generated method stub }@Overridepublic void write_TypeCode(TypeCode arg0) {// TODO Auto-generated method stub }@Overridepublic void write_any(Any arg0) {// TODO Auto-generated method stub }@Overridepublic void write_boolean(boolean arg0) {// TODO Auto-generated method stub }@Overridepublic void write_boolean_array(boolean[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_char(char arg0) {// TODO Auto-generated method stub }@Overridepublic void write_char_array(char[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_double(double arg0) {// TODO Auto-generated method stub }@Overridepublic void write_double_array(double[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_float(float arg0) {// TODO Auto-generated method stub }@Overridepublic void write_float_array(float[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_long(int arg0) {// TODO Auto-generated method stub }@Overridepublic void write_long_array(int[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_longlong(long arg0) {// TODO Auto-generated method stub }@Overridepublic void write_longlong_array(long[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_octet(byte arg0) {// TODO Auto-generated method stub }@Overridepublic void write_octet_array(byte[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_short(short arg0) {// TODO Auto-generated method stub }@Overridepublic void write_short_array(short[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_string(String arg0) {// TODO Auto-generated method stub }@Overridepublic void write_ulong(int arg0) {// TODO Auto-generated method stub }@Overridepublic void write_ulong_array(int[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_ulonglong(long arg0) {// TODO Auto-generated method stub }@Overridepublic void write_ulonglong_array(long[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_ushort(short arg0) {// TODO Auto-generated method stub }@Overridepublic void write_ushort_array(short[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_wchar(char arg0) {// TODO Auto-generated method stub }@Overridepublic void write_wchar_array(char[] arg0, int arg1, int arg2) {// TODO Auto-generated method stub }@Overridepublic void write_wstring(String arg0) {// TODO Auto-generated method stub }});}public void publish(LogRecord record){if (!frame.isVisible()) return;super.publish(record);flush();}}

? ? ?

實驗總結:

第7章? 異常、日志、斷言和調試:
?概念:異常、異常類型、異常聲明、異常拋出、 異常捕獲
?異常處理技術
?斷言的概念及使用
?基本的調試技巧

一、異常的概念:

Java的異常處理機制可以控制程序從錯誤產生的 位置轉移到能夠進行錯誤處理的位置。 ?

程序中出現的常見的錯誤和問題有:

用戶輸入錯誤

設備錯誤

物理限制

代碼錯誤

二、異常分類:
?Java把程序運行時可能遇到的錯誤分為兩類:

1、非致命異常:通過某種修正后程序還能繼續執行。 這類錯誤叫作異常。如:文件不存在、無效的數組 下標、空引用、網絡斷開、打印機脫機、磁盤滿等。 Java中提供了一種獨特的處理異常的機制,通過異 常來處理程序設計中出現的錯誤。

2、致命異常:程序遇到了非常嚴重的不正常狀態,不 能簡單恢復執行,是致命性錯誤。如:內存耗盡、 系統內部錯誤等。這種錯誤程序本身無法解決。

?Java中所有的異常類都直接或間接地繼承于 Throwable類。除內置異常類外,程序員可自定義異 常類。 ?

3、Java中的異常類可分為兩大類:

-Error Error類層次結構描述了Java運行時系統的內部錯誤 和資源耗盡錯誤。應用程序不應該捕獲這類異常,也 不會拋出這種異常。

-Exception Exception類:重點掌握的異常類。Exception層次結 構又分解為兩個分支:一個分支派生于 RuntimeException;另一個分支包含其他異常。

4、RuntimeException為運行時異常類,一般是程序錯誤 產生。 ?

派生于RuntimeException的異常包含下面幾種情況:

–錯誤的類型轉換 –數組訪問越界

–訪問空指針

–Java將派生于Error類或RuntimeException類的所有異 常稱為未檢查異常,編譯器允許不對它們做出異常處 理。

注意:“如果出現RuntimeException異常,就一定是程序員 的問題!!!”

5、非運行時異常,程序本身沒有問題,但由于某種情 況的變化,程序不能正常運行,導致異常出現。 ?除了運行時異常之外的其它繼承自Exception類的 異常類包括:

–試圖在文件尾部后面讀取數據 –試圖打開一個錯誤格式的URL

–編譯器要求程序必須對這類異常進行處理 (checked),稱為已檢查異常。

RuntimeException: 運行時異常類

–ArithmeticException: 算術異常類

–ArrayStoreException: 數組存儲異常類

–ClassCastException: 類型強制轉換異常類

–IndexOutOfBoundsException: 下標越界異常類

–NullPointerException: 空指針異常類

–SecurityException: 違背安全原則異常類

IOException:輸入輸出異常類

–IOException:申請I/O操作沒有正常完成。

–EOFException:在輸入操作正常結束前遇見了 文件結束符。

–FileNotFountException:在文件系統中,沒有找到由文件名字符串指定的文件。

小結:異常類型:

? ? 1>.Error 很難恢復的嚴重錯誤,一般不由程序處理。
?2>.RuntimeException 程序設計或實現上的問題,如數組越界等。
?3>.其它異常 通常是由環境因素引起的,并且可以被處理。 如文件不存在,無效URL等。

轉載于:https://www.cnblogs.com/hongyanohongyan/p/9851808.html

總結

以上是生活随笔為你收集整理的201771010102 常惠琢 《2018面向对象程序设计(Java)》第9周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。