zoukankan      html  css  js  c++  java
  • 201871010104陈园园 《面向对象程序设计(java)》第十周学习总结 陈园园

                                                                            201871010104-陈园园 《面向对象程序设计(java)》第十周学习总结

    项目 内容
    这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/
    这个作业要求在哪里 https://www.cnblogs.com/lily-2018/p/11441372.html
    作业学习目标

    (1) 掌握java异常处理技术;

    (2) 了解断言的用法;

    (3) 了解日志的用途;

    (4) 掌握程序基础调试技巧;

    第一部分:总结理论知识 

    1、异常:在程序的执行过程中所发生的异常事件,它 中断指令的正常执行。

    2、Java的异常处理机制可以控制程序从错误产生的 位置转移到能够进行错误处理的位置。

    3、异常分类:Java把程序运行时可能遇到的错误分为两类:

    –非致命异常:通过某种修正后程序还能继续执行。 这类错误叫作异常。如:文件不存在、无效的数组 下标、空引用、网络断开、打印机脱机、磁盘满等。 Java中提供了一种独特的处理异常的机制,通过异 常来处理程序设计中出现的错误。

    –致命异常:程序遇到了非常严重的不正常状态,不 能简单恢复执行,是致命性错误。如:内存耗尽、 系统内部错误等。这种错误程序本身无法解决。

    4、Java中的异常类可分为两大类:

    - Error类层次结构描述了Java 运行时系统的内部错误 和资源耗尽错误。应用程序不应该捕获这类异常,也 不会抛出这种异常 。

    - Exception Exception类:重点掌握的异常类。Exception层次结 构又分解为两个分支:一个分支派生于 RuntimeException;另一个分支包含其他异常。

    5、 编译器要求程序必须对这类异常进行处理 (checked),称为已检查异常。

    6、声明抛出异常:如果一个方法可能会生成一些异 常,但是该方法并不确切知道如何对这些异常事 件进行处理,此时,这个方法就需声明抛出这些 异常。

     “一个方法不仅需要告诉编译器将要返回什么值 ,还要告诉编译器可能发生什么异常”。

    7、声明抛出异常在方法声明中用throws子句中来指 明。例如: – public FileInputStream(String name ) throws FileNotFoundException

    8、以下4种情况需要方法用throws子句声明抛出异常:

    –方法调用了一个抛出已检查异常的方法。

    –程序运行过程中可能会发生错误,并且利用throw语句 抛出一个已检查异常对象。

    –程序出现错误。例如,a[-1] = 0;

    –Java虚拟机和运行时库出现的内部异常。

    9、一个方法必须声明该方法所有可能抛出的已检查异常,而 未检查异常要么不可控制(Error),要么应该避免发生 (RuntimeException)。如果方法没有声明所有可能发生 的已检查异常,编译器会给出一个错误消息。

    10、当Java应用程序出现错误时,会根据错误类型产 生一个异常对象,这个对象包含了异常的类型和 错误出现时程序所处的状态信息。把异常对象递 交给Java编译器的过程称为抛出。

    11、程序运行期间,异常发生时,Java运行系统从异常 生成的代码块开始,寻找相应的异常处理代码,并 将异常交给该方法处理,这一过程叫作捕获。

    12、catch块是对异常对象进行处理的代码;  每个try代码块可以伴随一个或多个catch语句,用于处理 try代码块中所生成的各类异常事件;  catch语句只需要一个形式参数指明它所能捕获的异常类 对象,这个异常类必须是Throwable的子类,运行时系统 通过参数值把被抛出的异常对象传递给catch块;  catch块可以通过异常对象调用类Throwable所提供的方法。

    日志:

    全局日志记录(global logger) 

    Logger.getGlobal().info("test"); 

    Logger.getGlobal().serLevel(Level.OFF);

    可以使用getLogger方法创建或获取记录器,未被任何变量引用的日志记录器可能会被垃圾回收,所以可以使用静态变量存储日志记录器的一个引用 

    private static final Logger myLogger = Logger.getLogger("com.mycompany.myapp");

    第二部分:实验部分

    实验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();
          }
    }
    

    运行结果如下:

    未检查异常和已检查异常的区别:

    对未检查的异常(unchecked exception )的几种处理方式:

    1、捕获。
    2、继续抛出。
    3、不处理。
    对检查的异常(checked exception,除了RuntimeException,其他的异常都是checked exception )的几种处理方式:
    1、继续抛出,消极的方法,一直可以抛到java虚拟机来处理。
    2、用try...catch捕获。
    注意,对于检查的异常必须处理,或者必须捕获或者必须抛出。

    实验2 导入以下示例程序,测试程序并进行代码注释。

    测试程序1:

    1)在elipse IDE中编辑、编译、调试运行教材281页7-1,结合程序运行结果理解程序;

    2)在程序中相关代码处添加新知识的注释;

    3) 掌握Throwable类的堆栈跟踪方法;

    代码如下:

    package stackTrace;
    
    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)
       {
          System.out.println("factorial(" + n + "):");
          //调用Throwable类中的getStackTrace方法得到StackTraceElement对象的一个数组
          Throwable t=new Throwable();
          //StackTraceElement类含有能够获得文件名和当前执行的代码行号的方法,同时,还含有能够获取类名和方法名的方法。
          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:

    1)Java语言的异常处理积极处理方法和消极处理两种方式

    2)下列两个简单程序范例给出了两种异常处理的代码格式。在elipse IDE中编辑、调试运行源程序ExceptionTest.java,将程序中的text文件更换为身份证号.txt,要求将文件内容读入内容,并在控制台显示;

    3)掌握两种异常处理技术的特点。

    积极处理方式代码如下:

    //积极处理方式  
    import java.io.*;
    
    class ExceptionTest {
    	public static void main (string args[])
       {
           try{
    	       FileInputStream fis=new FileInputStream("text.txt");
           }
           catch(FileNotFoundExcption e)
        	{   ……  }
    	……
        }
    }
    

    代码如下:

    //积极处理方式  
      
      import java.io.*;
      import java.io.BufferedReader;
      import java.io.FileReader;
      class ExceptionTest {
       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 ExceptionTest {
    	public static void main (string args[]) throws  FileNotFoundExcption
         {
     	    FileInputStream fis=new FileInputStream("text.txt");
         }
    }
    

    运行代码如下:

    import java.io.*;
    
    public class desd {
        public static void main(String args[]) throws IOException 
         {
              FileInputStream fis=new FileInputStream("D:\\身份证号.txt");
              int b;
              while((b=fis.read())!=-1)
              {
                  System.out.print(b);
              }
              fis.close();
          }
    }
    

    运行结果如下:

    实验3: 编程练习

    1) 编写一个计算器类,可以完成加、减、乘、除的操作;

    2) 利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;

    3)将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt

    在以上程序适当位置加入异常捕获代码。

    代码如下:

    package canlie;
    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    
    public class boxian {
        public static void main(String[] args) {
    
            Scanner in = new Scanner(System.in);
            shixun counter = new shixun();
            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 == counter.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 canlie;
    public class shixun {
       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

    1)在elipse下调试程序AssertDemo,结合程序运行结果理解程序;

    2)注释语句test1(-5);后重新运行程序,结合程序运行结果理解程序;

    3) 掌握断言的使用特点及用法。

    代码如下:

    //断言程序示例
    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);
        }
    }
    

     运行结果如下:

    注释语句test1(-5);后代码如下:

    package JavaTest;
    //断言程序示例
    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);
        }
    }
    

     运行结果如下:

    关于断言:

    断言检查只用于开发和测阶段,只应该用于在测试阶段确定程序内部的错误位置。。java中使用assert作为断言的一个关键字。

    语法1:assert expression;                //expression代表一个布尔类型的表达式,如果为真,就继续正常运行,如果为假,程序退出

    语法2:assert expression1 : expression2;                   //expression1是一个布尔表达式,expression2是一个基本类型或者Object类型,如果expression1为真,则程序忽略expression2继续运行;如果expression1为假,则运行expression2,然后退出程序。

    实验程序2:

    1)用JDK命令调试运行教材298-300页程序7-2,结合程序运行结果理解程序;

    2)并掌握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)
                {
                } // 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();
       }
    }
    

    运行结果如下:

     

    实验程序3:

    1)用JDK命令调试运行教材298页-300页程序7-2,结合程序运行结果理解程序;

    2)按课件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();
       }
    }
    

    由PPT可知:

    1)条件断点(有一定条件的断点):在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。

    在断点处点击鼠标右键,选择最后一个“Breakpoint Properties”。

    2)变量断点:在变量的值初始化,或是变量值改变时可以停止。

    3)方法断点:方法断点就是将断点打在方法的入口处。

    4)异常断点:当异常发生时,代码会停在异常发生处。

    5)重新调试:回退时,请在需要回退的线程方法上点右键,选择“Drop to Frame”。

    6)单步执行程序 

    7)检查变量

    8)改变变量值

    三、实验总结

          本章我学习了有关于java异常处理技术,了解了断言的用法和日志的用途;在老师的讲解下,我基本掌握了一些关于java异常处理技术得基础应用,了解到异常和捕获的用法,在适当的位置添加try……catch语句,还有做作业的过程中了解了一些关于断言和日志的基本知识。实验方面,在之前实验的基础上添加、深化,得到新的表现形式,总得来说,还是有很大的收获,但是自己的实验的动手能力还需要大程度地提高。通过这段时间的学习,慢慢学会了一些应该掌握的java的基本学习技能,以后会慢慢努力继续提升。

    
    
  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/chanyeol1127/p/11776198.html
Copyright © 2011-2022 走看看