zoukankan      html  css  js  c++  java
  • 动手动脑__异常处理

    public class CatchWho { 
        public static void main(String[] args) { 
            try { 
                	try { 
                    	throw new ArrayIndexOutOfBoundsException(); 
                	} 
                	catch(ArrayIndexOutOfBoundsException e) { 
                   		System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch"); 
                	}
     
                throw new ArithmeticException(); 
            } 
            catch(ArithmeticException e) { 
                System.out.println("发生ArithmeticException"); 
            } 
            catch(ArrayIndexOutOfBoundsException e) { 
               System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
            } 
        } 
    }
    

      结构

          

    二、写出程序运行的结果:

    public class CatchWho2 { 
        public static void main(String[] args) { 
            try {
                	try { 
                    	throw new ArrayIndexOutOfBoundsException(); 
                	} 
                	catch(ArithmeticException e) { 
                    	System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); 
                	}
                throw new ArithmeticException(); 
            } 
            catch(ArithmeticException e) { 
                System.out.println("发生ArithmeticException"); 
            } 
            catch(ArrayIndexOutOfBoundsException e) { 
                System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
            } 
        } 
    }
    

      结果:

          

    三、请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结:

    public class EmbededFinally {
    
        
    	public static void main(String args[]) {
            
    		int result;
            
    		try {
                
    			System.out.println("in Level 1");
    
               
    		 	try {
                    
    				System.out.println("in Level 2");
       //result=100/0;  //Level 2
                   
     				try {
                       
    				 	System.out.println("in Level 3");
                          
    				 	result=100/0;  //Level 3
                    
    				} 
                    
    				catch (Exception e) {
                        
    					System.out.println("Level 3:" + e.getClass().toString());
                    
    				}
                    
                    
    				finally {
                        
    					System.out.println("In Level 3 finally");
                    
    				}
                    
                   
    				// result=100/0;  //Level 2
    
                
    				}
                
    			catch (Exception e) {
                   
    			 	System.out.println("Level 2:" + e.getClass().toString());
               
    		 	}
    		 	finally {
                    
    				System.out.println("In Level 2 finally");
               
    			 }
                 
    			// result = 100 / 0;  //level 1
            
    		} 
            
    		catch (Exception e) {
                
    			System.out.println("Level 1:" + e.getClass().toString());
            
    		}
            
    		finally {
               
    		 	System.out.println("In Level 1 finally");
            
    		}
        
    	}
    
    }
    

      

    1.当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。

    2.当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

     四、辨析:finally语句块一定会执行吗?、

      

    public class SystemExitAndFinally {
    
    
    public static void main(String[] args)
    {
    
    try{
    
    
    System.out.println("in main");
    
    throw new Exception("Exception is thrown in main");
    
    //System.exit(0);
    
    
    }
    
    catch(Exception e)
    
    {
    
    System.out.println(e.getMessage());
    
    System.exit(0);
    
    }
    
    finally
    
    {
    
    System.out.println("in finally");
    
    }
    
    }
    
    
    }
    

      

    截图:

    没有 System.exit(0);的时候会输出in finally要是有System.exit(0);则会退出系统不执行finally语句。

    五、

    import javax.swing.JOptionPane;
    
    public class Test{
    
    	public static void main(String[] args) {
    
    		// TODO 自动生成的方法存根
    	
    		double n=0.0;
    	
    		for(int i=0;i<1000000000;i++)
    	
    		{
    	
    			String input=JOptionPane.showInputDialog("请输入学生成绩");
    	
    			try{
    	
    				n=Double.valueOf(input);
    	
    				if(n<0)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null, "输入不正确");
    	
    				}
    	
    				else if(n<60)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null,"该学生成绩为不及格");
    	
    				}
    	
    				else if(n<70)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null,"该学生成绩为及格");
    	
    				}
    	
    				else if(n<80)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null,"该学生成绩为中等");
    	
    				}
    	
    	 
    	
    				else if(n<90)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null,"该学生成绩为良好");
    	
    				}
    	
    				else if(n<=100)
    	
    				{
    	
    					JOptionPane.showMessageDialog(null,"该学生成绩为优秀");
    	
    				}
    	
    				else if(n>100)
    	
    				{	
    	
    					JOptionPane.showMessageDialog(null, "输入不正确");
    	
    				}
    	
    			}
    	
    	 
    	
    			catch(NumberFormatException e)//NumberFormatException异常
    	
    			{
    	
    				JOptionPane.showMessageDialog(null, "输入不正确");
    	
    			}
    			
    		}
    	
    	}
    
    }
    

      结果:

          

  • 相关阅读:
    优化 Markdown 在 Notepad++ 中的使用体验
    error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
    Git: 代码冲突常见解决方法
    fatal error c1001 编译器中发生内部错误 OpenMesh6.3
    error C2448 函数样式初始值设定项类似函数定义
    VS Code 配置Python
    15分钟掌握 Git
    notepad++快捷键
    【Python笔记】第4章 操作列表
    【MySQL】MySQL按中文排序
  • 原文地址:https://www.cnblogs.com/zhaochenguang/p/7846958.html
Copyright © 2011-2022 走看看