黑马程序员_内部类和异常的练习

  ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

  昨天学习了内部类和异常,感觉有点难,主要是让自己去写代码时。今天早上就豁出去一早上来研究这两个家伙,终于搞懂了,对于内部类,我觉得目前最主要还是先把语法记住,然后慢慢了练习,特别是成员内部类,这个经常用,我们可以在一个类内部定义一类(而且经常是private),在这里我们更好地实现类的封装,有点类似继承,我们可以用外部类的所有属性和方法(在这里有一句要给自己说,因为犯了错误不知道哪里错了),语句写在return后面的话,好多情况下就成了不能执行的语句,所以得注意!!匿名内部类只能使用一次,一般可以继承一个类或者实现某个接口。

  异常,记着那些必须抛出,那些可以不用抛出,也就是那些是受检查,那些是不受检查的,主要是RuntimeException类或者子类属于不受检查的,可以不用“管”,自己在写代码时注意些!

有点困了,今天我们聚餐了!回来赶紧把代码整理下,晚安!

  
  
  
  
  1. /* 
  2. 需求:创建一个内部类,来调用外部类的属性和方法 
  3. 分析: 
  4. 1,我们在外部类中创建一个内部类,此内部类中去调用外部的 
  5. 属性和方法 
  6. 2,这里有几个注意事项:不能再静态方法中去创建非静态的内部类对象 
  7. 3,这时我们如果在外部想用内部类对象时,只能在实例方法中创建内部类对象 
  8. 然后再在main方法中调用自己的实例方法 
  9. */ 
  10. //创建一个外部类 
  11. class Outer  
  12.     //定义两个私有的属性,来验证内部类可以直接调用外部类私有的属性 
  13.     private int a=1
  14.     private int b=2
  15.     public static void main(String []args) 
  16.     { 
  17.         Outer ou=new Outer(); 
  18.         ou.fun1(); 
  19.     } 
  20.  
  21.     //定义一个外部类的实例方法,在此方法中来创建内部类对象(注意:此时尽管内部类为private的,我们也可以创建对象) 
  22.     public void fun1() 
  23.     { 
  24.         Inner in=new Inner(); 
  25.         in.fun3(); 
  26.     } 
  27.      int  fun2() 
  28.     { 
  29.         return a+b; 
  30.     } 
  31.  
  32.     //声明一个私有的内部类,然后去调用外部类私有的属性 
  33.     private class Inner 
  34.     { 
  35.         void fun3() 
  36.         { 
  37.             //  去调用外部类私有的属性 
  38.              
  39.             System.out.println(a*b+"  "+fun2()) ; 
  40.         } 
  41.          
  42.     } 
  43.     
        
        
        
    1. /* 
    2. 需求:定义一个局部内部类,来练习调用外部类的属性和自己的局部变量 
    3. 分析: 
    4. 1,先定义一个外部类,然后在外部类的实例方法中定义一个局部内部类 
    5. 2,来调用外部类的属性和自己的局部属性 
    6. */ 
    7. //声明一个外部类 
    8. class Outer2 
    9.     private int a=1
    10.     private String b="hehe"
    11.     public static void main(String[]args) 
    12.     { 
    13.             Outer2 ou2=new Outer2(); 
    14.             System.out.println(ou2.fun(5)); 
    15.     } 
    16.     //声明一个外部类的实例方法,在这个方法里创建一个局部的内部类 
    17.     public String  fun(final int c) 
    18.     { 
    19.          final int d=10
    20.          //创建一个局部的内部类,来练习调用外部私有的类和自己的局部变量(这时局部变量必须声明为final) 
    21.         class Inner2 
    22.         { 
    23.             int e=2
    24.                 public String fun2() 
    25.             { 
    26.                 return d+e+c+"   "+b; 
    27.             } 
    28.         } 
    29.         Inner2 in2=new Inner2(); 
    30.         return in2.fun2(); 
    31.      
    32.     } 
    33.  
    34.       
            
            
            
      1. /* 
      2. 需求:创建一个局部匿名内部类 
      3. 分析: 
      4. 1,匿名内部类一般会和一个父类或者一个借口结合起来使用 
      5. 2,我们在main方法中,定义一个匿名内部类,这个类体必须重写借口中的方法 
      6. */ 
      7. class Outer3 
      8.     public static void main(String[]args) 
      9.     { 
      10.         //定义一个匿名内部类,重写借口A的方法(注意访问权限不能小了) 
      11.         A a=new A(){ 
      12.         public void fun(int b) 
      13.             { 
      14.                 System.out.println(a+b); 
      15.             } 
      16.         }; 
      17.         a.fun(5); 
      18.     } 
      19.  
      20. interface A 
      21.     public  static final int a=10
      22.     public abstract void fun(int b); 
  
  
  
  
  1. /* 
  2. 需求:需要练习异常,让异常出现ArithmeticException,NullPointerException 
  3. 分析:因为针对ArithmeticException,NullPointerException,都属于RuntimeException类型的, 
  4. 我们可以声明,制作处理下就行 
  5. 1,针对ArithmeticException,我们可以练习一个除法,让除数等于0; 
  6. 2,NullPointerException,我们可以给一个数组先定义一些元素,然后再给赋值为NULL 
  7. 3,再练习下getmessage(),toString()的用法 
  8. */ 
  9. public class MyExceptionTest 
  10.     public static void main(String []args)throws FuShuException 
  11.     { 
  12.             int [] arr=new int[]{1,3,4}; 
  13.             MyException myex=new MyException(); 
  14.              
  15.             //捕获ArithmeticException 
  16.             try 
  17.             { 
  18.                 myex.fun1(10,0); 
  19.             } 
  20.             catch (Exception e) 
  21.             { 
  22.                 System.out.println(e.getMessage()); 
  23.             } 
  24.              
  25.             //捕获NullPointerException 
  26.             try 
  27.             { 
  28.                 arr=null
  29.                 myex.printArray(arr); 
  30.             } 
  31.             catch (Exception e) 
  32.             { 
  33.                 System.out.println(e.toString()); 
  34.                  
  35.             } 
  36.     } 
  37. class MyException 
  38.     //让除数等于零,来抛出ArithmeticException异常给调用者 
  39.     public int fun1(int a,int b) 
  40.     { 
  41.         return a/b; 
  42.     } 
  43.  
  44.     //打印数组,如果数组被赋值为NULL的话,就会报NullPointerException 
  45.     public void printArray(int []arr) 
  46.     { 
  47.         for (int i=0;i<arr.length ;i++ ) 
  48.         { 
  49.             System.out.println("arr["+i+"]="+arr[i]); 
  50.         } 
  51.     } 

 ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

你可能感兴趣的:(内部类,异常)