項目html |
內容java |
這個做業屬於哪一個課程程序員 |
https://www.cnblogs.com/nwnu-daizh/編程 |
這個做業的要求在哪裏數組 |
https://www.cnblogs.com/nwnu-daizh/p/11435127.htmlapp |
做業學習目標less |
1.掌握java異常處理技術;dom 2.瞭解斷言的用法;編程語言 3.瞭解日誌的用途;ide 4.掌握程序基礎調試技巧。
|
第一部分:總結第七章關於異常處理相關理論知識
1.1 異常概念
異常,就是不正常的意思。在生活中:醫生說,你的身體某個部位有異常,該部位和正常相比有點不一樣,該部位的功能將受影響.在程序中的意思就是:
異常 :指的是程序在執行過程當中,出現的非正常的狀況,最終會致使JVM的非正常中止。
在Java等面向對象的編程語言中,異常自己是一個類,產生異常就是建立異常對象並拋出了一個異常對象。Java處理異常的方式是中斷處理。
異常指的並非語法錯誤,語法錯了,編譯不經過,不會產生字節碼文件,根本不能運行.
1.2 異常體系
異常機制實際上是幫助咱們找到程序中的問題,異常的根類是 java.lang.Throwable ,其下有兩個子類:java.lang.Error 與 java.lang.Exception ,日常所說的異常指 java.lang.Exception 。
Throwable體系:
Error:嚴重錯誤Error,沒法經過處理的錯誤,只能事先避免,比如絕症。
Exception:表示異常,異常產生後程序員能夠經過代碼的方式糾正,使程序繼續運行,是必需要處理的。比如感冒、闌尾炎。
Throwable中的經常使用方法:
public void printStackTrace() :打印異常的詳細信息。
包含了異常的類型,異常的緣由,還包括異常出現的位置,在開發和調試階段,都得使用printStackTrace。
public String getMessage() :獲取發生異常的緣由。
提示給用戶的時候,就提示錯誤緣由。
public String toString() :獲取異常的類型和異常描述信息(不用)。
出現異常,沒關係張,把異常的簡單類名,拷貝到API中去查。
1.3 異常分類
咱們日常說的異常就是指Exception,由於這類異常一旦出現,咱們就要對代碼進行更正,修復程序。
異常(Exception)的分類:根據在編譯時期仍是運行時期去檢查異常?
編譯時期異常:checked異常。在編譯時期,就會檢查,若是沒有處理異常,則編譯失敗。(如日期格式化異常)
運行時期異常:runtime異常。在運行時期,檢查異常.在編譯時期,運行異常不會編譯器檢測(不報錯)。(如數學異常)
1.4 異常的產生過程解析
先運行下面的程序,程序會產生一個數組索引越界異常ArrayIndexOfBoundsException。咱們經過圖解來解析下異常產生的過程。
public class ArrayTools { // 對給定的數組經過給定的角標獲取元素。 public static int getElement(int[] arr, int index) { int element = arr[index]; return element; } }
工具類
ublic class ExceptionDemo { public static void main(String[] args) { int[] arr = { 34, 12, 67 }; intnum = ArrayTools.getElement(arr, 4) System.out.println("num=" + num); System.out.println("over"); } }
上述程序執行過程圖解:
第二章 異常的處理
Java異常處理的五個關鍵字:try、catch、finally、throw、throws
2.1 拋出異常throw
在編寫程序時,咱們必需要考慮程序出現問題的狀況。好比,在定義方法時,方法須要接受參數。那麼,當調用方法使用接受到的參數時,首先須要先對參數數據進行合法的判斷,數據若不合法,就應該告訴調用者,傳遞合法的數據進來。這時須要使用拋出異常的方式來告訴調用者。
在java中,提供了一個throw關鍵字,它用來拋出一個指定的異常對象。那麼,拋出一個異常具體如何操做呢?
1.建立一個異常對象。封裝一些提示信息(信息能夠本身編寫)。
2.須要將這個異常對象告知給調用者。怎麼告知呢?怎麼將這個異常對象傳遞到調用者處呢?經過關鍵字throw就能夠完成。throw 異常對象。throw用在方法內,用來拋出一個異常對象,將這個異常對象傳遞到調用者處,
並結束當前方法的執行。
使用格式:
throw new 異常類名(參數);
例如:
throw new NullPointerException("要訪問的arr數組不存在"); throw new ArrayIndexOutOfBoundsException("該索引在數組中不存在,已超出範圍");
咱們經過下面程序演示下throw的使用。
public class ThrowDemo { public static void main(String[] args) { //建立一個數組 int[] arr = {2,4,52,2}; //根據索引找對應的元素 int index = 4; int element = getElement(arr, index); System.out.println(element); System.out.println("over"); } /* * 根據 索引找到數組中對應的元素 */ public static int getElement(int[] arr,int index){ //判斷 索引是否越界 if(index<0 || index>arr.length‐1){ /* 判斷條件若是知足,當執行完throw拋出異常對象後,方法已經沒法繼續運算。 這時就會結束當前方法的執行,並將異常告知給調用者。這時就須要經過異常來解決。 */ throw new ArrayIndexOutOfBoundsException("哥們,角標越界了~~~"); } int element = arr[index]; return element; } }
2.3 聲明異常throws
聲明異常:將問題標識出來,報告給調用者。若是方法內經過throw拋出了編譯時異常,而沒有捕獲處理(稍後講解該方式),那麼必須經過throws進行聲明,讓調用者去處理。
關鍵字throws運用於方法聲明之上,用於表示當前方法不處理異常,而是提醒該方法的調用者來處理異常(拋出異常).
聲明異常格式:
修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2…{ }
聲明異常的代碼演示:
public class ThrowsDemo { public static void main(String[] args) throws FileNotFoundException { read("a.txt"); } // 若是定義功能時有問題發生須要報告給調用者。能夠經過在方法上使用throws關鍵字進行聲明 public static void read(String path) throws FileNotFoundException { if (!path.equals("a.txt")) {//若是不是 a.txt這個文件 // 我假設 若是不是 a.txt 認爲 該文件不存在 是一個錯誤 也就是異常 throw throw new FileNotFoundException("文件不存在"); } } }
throws用於進行異常類的聲明,若該方法可能有多種異常狀況產生,那麼在throws後面能夠寫多個異常類,用逗號隔開。
public class ThrowsDemo2 { public static void main(String[] args) throws IOException { read("a.txt"); } public static void read(String path)throws FileNotFoundException, IOException { if (!path.equals("a.txt")) {//若是不是 a.txt這個文件 // 我假設 若是不是 a.txt 認爲 該文件不存在 是一個錯誤 也就是異常 throw throw new FileNotFoundException("文件不存在"); } if (!path.equals("b.txt")) { throw new IOException(); } } }
2.4 捕獲異常try…catch
若是異常出現的話,會馬上終止程序,因此咱們得處理異常:
1. 該方法不處理,而是聲明拋出,由該方法的調用者來處理(throws)。
2. 在方法中使用try-catch的語句塊來處理異常。
try-catch的方式就是捕獲異常。
捕獲異常:Java中對異常有針對性的語句進行捕獲,能夠對出現的異常進行指定方式的處理。
捕獲異常語法以下:
try{ 編寫可能會出現異常的代碼 }catch(異常類型 e){ 處理異常的代碼 //記錄日誌/打印異常信息/繼續拋出異常 }
try:該代碼塊中編寫可能產生異常的代碼。
catch:用來進行某種異常的捕獲,實現對捕獲到的異常進行處理。
注意:try和catch都不能單獨使用,必須連用。
演示以下:
public class TryCatchDemo { public static void main(String[] args) { try {// 當產生異常時,必須有處理方式。要麼捕獲,要麼聲明。 read("b.txt"); } catch (FileNotFoundException e) {// 括號中須要定義什麼呢? //try中拋出的是什麼異常,在括號中就定義什麼異常類型 System.out.println(e); } System.out.println("over"); } /* * * 咱們 當前的這個方法中 有異常 有編譯期異常 */ public static void read(String path) throws FileNotFoundException { if (!path.equals("a.txt")) {//若是不是 a.txt這個文件 // 我假設 若是不是 a.txt 認爲 該文件不存在 是一個錯誤 也就是異常 throw throw new FileNotFoundException("文件不存在"); } } }
1、實驗目的與要求
(1) 掌握java異常處理技術;
(2) 瞭解斷言的用法;
(3) 瞭解日誌的用途;
(4) 掌握程序基礎調試技巧;
;
2、實驗內容和步驟
實驗1:用命令行與IDE兩種環境下編輯調試運行源程序ExceptionDemo一、ExceptionDemo2,結合程序運行結果理解程序,掌握未檢查異常和已檢查異常的區別
package week11.test; public class ExceptionDemo1 { public static void main(String args[]) { int a = 0; System.out.println(5 / a); } }
運行結果:
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(); } }
運行結果:
實驗2: 導入如下示例程序,測試程序並進行代碼註釋。
測試程序1:
l 在elipse IDE中編輯、編譯、調試運行教材281頁7-1,結合程序運行結果理解程序;
l 在程序中相關代碼處添加新知識的註釋;
l 掌握Throwable類的堆棧跟蹤方法;
package week11.test; import java.util.*; /** * A program that displays a trace feature of a recursive method call. * @version 1.10 2017-12-14 * @author Cay Horstmann */ public class StackTraceTest { /** * Computes the factorial of a number * @param n a non-negative integer * @return n! = 1 * 2 * . . . * n */ public static int factorial(int n) {
//調用Throwable類的getStackTrace方法訪問棧堆軌跡的文本描述信息
System.out.println("factorial("+n+"):");
Throwable t=new Throwable();
StackTraceElement[] frames=t.getStackTrace(); for(StackTraceElement f:frames)//遍歷fames數組 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中編輯、調試運行源程序ExceptionTest.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.*;
class ExceptionDemo1 {
public static void main (String args[])
{
File fis=new File("身份證號.txt");
try{
FileReader fr = new FileReader(fis);
BufferedReader br = new BufferedReader(fr);
try {
String s, s2 = new String();
while ((s = br.readLine()) != null) {
s2 += s + "\n ";
}
br.close();
System.out.println(s2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//消極處理方式 import java.io.*; class ExceptionDemo1 { 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: 編程練習
l 編寫一個計算器類,能夠完成加、減、乘、除的操做;
l 利用計算機類,設計一個小學生100之內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;
l 將程序中測試練習題及學生答題結果輸出到文件,文件名爲test.txt;
l 在以上程序適當位置加入異常捕獲代碼。
注:如下實驗課後完成
package week11.test; public class Calculation { 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 mutli(int a,int b) { return a*b; } public int division(int a,int b) { if(b!=0) { return a/b; } return 0; } }
package week11.test; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Random; import java.util.Scanner; public class CaclusionTest { public static void main(String[] args) { Scanner in=new Scanner(System.in); Calculation result=new Calculation(); PrintWriter out=null; try { out=new PrintWriter("test.txt"); }catch(FileNotFoundException e) { 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); Random n=new Random(); switch(m) { case 0: System.out.println(i+":"+a+"/"+b+"="); while(b==0) { b=(int)Math.round(Math.random()*100); } int c=in.nextInt(); out.println(a+"/"+b+"="+c); if(c==result.division(a,b)) { sum+=10; System.out.println("答案正確"); }else { System.out.println("答案錯誤"); } break; case 1: System.out.println(i+":"+a+"*"+b+"="); int c1=in.nextInt(); out.println(a+"*"+b+"="+c1); if(c1==result.mutli(a,b)) { sum+=10; System.out.println("回答正確"); }else { System.out.println("回答錯誤"); } break; case 2: System.out.println(i+":"+a+"+"+b+"="); int c2=in.nextInt(); out.println(a+"+"+b+"="+c2); if(c2==result.add(a,b)) { sum+=10; System.out.println("回答正確"); }else { System.out.println("回答錯誤"); } break; case 3: System.out.println(i+":"+a+"-"+b+"="); int c3=in.nextInt(); out.println(a+"+"+b+"="+c3); if(c3==result.reduce(a,b)) { sum+=10; System.out.println("回答正確"); }else { System.out.println("回答錯誤"); } break; } } System.out.println("你的總分是:"+sum); out.println("成績:"+sum); out.close(); } }
運行結果:
實驗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); } } |
l 在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;//assert宏的原型定義在<assert.h>中,做用是若是它的條件返回錯誤,則終止程序執行 System.out.println(a); } private static void test2(int a){ assert a > 0 : "這裏出錯了,a不能小於0"; System.out.println(a); } }
註釋前結果:
註釋後斷言開啓結果:
實驗程序2:
l 用JDK命令調試運行教材298頁-300頁程序7-2,結合程序運行結果理解程序;
l 並掌握Java日誌系統的用途及用法。
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); }); } } /** * 顯示圖像的幀。 */ 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); //設置菜單欄 JMenuBar 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); } }); //使用標籤顯示圖像 label = new JLabel(); add(label); logger.exiting("ImageViewerFrame", "<init>"); } private class FileOpenListener implements ActionListener { public void actionPerformed(ActionEvent event) { logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event); //設置文件選擇器 JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); //接受以.gif結尾的全部文件 chooser.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"; } }); //顯示文件選擇器對話框 int r = chooser.showOpenDialog(ImageViewerFrame.this); // 若是圖像文件被接受,將其設置爲標籤的圖標 if (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"); } } } /** * 用於在窗口中顯示日誌記錄的處理程序。 */ 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) { } public void write(byte[] b, int off, int len) { output.append(new String(b, off, len)); } }); } public void publish(LogRecord record) { if (!frame.isVisible()) return; super.publish(record); flush(); } }
實驗程序3:
l 用JDK命令調試運行教材298頁-300頁程序7-2,結合程序運行結果理解程序;
l 按課件66-77內容練習並掌握Elipse的經常使用調試技術。
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); }); } } /** * 顯示圖像的幀。 */ 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); //設置菜單欄 JMenuBar 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); } }); //使用標籤顯示圖像 label = new JLabel(); add(label); logger.exiting("ImageViewerFrame", "<init>"); } private class FileOpenListener implements ActionListener { public void actionPerformed(ActionEvent event) { logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event); //設置文件選擇器 JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); //接受以.gif結尾的全部文件 chooser.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"; } }); //顯示文件選擇器對話框 int r = chooser.showOpenDialog(ImageViewerFrame.this); // 若是圖像文件被接受,將其設置爲標籤的圖標 if (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"); } } } /** * 用於在窗口中顯示日誌記錄的處理程序。 */ 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 called public void write(byte[] b, int off, int len) { output.append(new String(b, off, len)); } }); } public void publish(LogRecord record) { if (!frame.isVisible()) return; super.publish(record); flush(); } }
1)條件斷點(有必定條件的斷點):在Eclipse Java 編輯區的行頭雙擊就會獲得一個斷點,代碼會運行到此處時中止。
在斷點處點擊鼠標右鍵,選擇最後一個「Breakpoint Properties」。
2)變量斷點:在變量的值初始化,或是變量值改變時能夠中止。
3)方法斷點:方法斷點就是將斷點打在方法的入口處。
4)異常斷點:當異常發生時,代碼會停在異常發生處。
5)從新調試:回退時,請在須要回退的線程方法上點右鍵,選擇「Drop to Frame」。
6)單步執行程序
7)檢查變量
8)改變變量值
實驗總結:在本週學習了程序產生的異常以及如何解決程序中產生的異常。異常時在程序的執行過程當中所發生的非正常事件,它中斷指令的正常執行。所以在編寫代碼時須要及時處理這些錯誤。基本理解了異常的產生的緣由和解決方法。但對於斷言以及日誌等內容不太理解。所以在運行後面幾個相關程序時,對程序不是很理解。之後本身也會多練習程序去了解這些知識。
從這門課程一開始,代就給我傳遞了自主學習的思想。它不一樣於咱們以往接受的填鴨式教學,而是以你本身爲主導去學習。這樣的學習方式中,你要本身分配時間,本身查找資料,在mooc中先完成自學,在代老師的課堂上不少疑惑就會感受到迎刃而解,同時遇到問題要本身動手解決。如同字面意思同樣,在一次又一次的」doing「中,你的知識概念從模糊到清晰。起初或許會感到有些麻煩,但你會真切的感到本身能力的提升,真正的嘗試思考,每一點成果都有你的思考,而且經過實踐掌握的語法點更加牢固。
掌握了基本的語法點之後更重要的是去不斷地練習,只有不斷地去寫程序,咱們才能感覺到java語言的好處,和這個語法點在實際中不一樣的用途,同時遇到問題時,咱們不要急於求助他人,必定要先想一想本身能夠怎樣解決,實踐中出現的問題每每能夠經過新的實踐來找到解決的辦法。但當你遇到瓶頸,機關用盡時,不妨聽聽別人的思路,或者上CSDN、博客園上找找答案,或許會給你的一些啓發。就在這樣不斷的發現問題,解決問題中,咱們會迭代式的獲得提高。
三、貴在堅持
編程沒有捷徑,只有不斷地堅持,才能得到更好的提高,要合理規劃好本身的學習任務,在前半學期仍是缺乏合理規劃,自主學習時間缺乏堅持,後面階段的學習要堅持練習。