JAva学習ノートday 9

4880 ワード

内部クラス
*あるクラスは別のクラスに定義され、そのクラスを内部クラス(内蔵クラス、ネストクラス)と呼ぶ.
*アクセス機能:
内部クラスは、プライベートメンバーを含む外部クラスのメンバーに直接アクセスできます.
外部クラスが内部クラスにアクセスするメンバーは、内部クラスのオブジェクトを作成する必要があります.
[内部クラスアクセス規則]
[静的内部クラス]
[内部クラス定義の原則]
/*
        :
1.                ,    。
	                ,                 。  :    .this
2.         ,         。

    :
1.                ,     ,         。
           。
  :
	    .         =      .     ;
	Outer.Inner in = new Outer().new Inner();

2.          ,            。
	  :private:             。
		static:      static   。
		     static   ,           static  ,       。
		
		       ,                  ?
		Outer.Inner().function();
	
	  :            ,       static 。
	
      ,         ,          。
                。

class Body
{
	private class XinZang
	{
	
	}
	public void show()
	{
		new XinZang();
	}
}
*/
class Outer
{
	private int x = 3;
	
	static class Inner //   
	{
		int x = 4;
		void function()
		{
			int x = 6;
			System.out.println("inner:"+x);//Outer.this.x , this.x , x
		}
	}
	
	void method()
	{
		Inner in = new Inner();
		in.function();
	}
}

class InnerClassDemo
{
	public static void main(String[] args)
	{
		new Outer.Inner().function();
		//Outer out = new Outer();
		//out.method();
		
		//          。
		//Outer.Inner in = new Outer().new Inner();
		//in.function();
	}
}

[匿名の内部クラス]
匿名の内部クラス:
1.匿名の内部クラスは、実は内部クラスの略記形式です.
2.匿名の内部クラスを定義する前提:
内部クラスは、クラスを継承するか、インタフェースを実装する必要があります.
3.匿名内部クラスのフォーマット:new親またはインタフェース(){子クラスの内容を定義}
4.実は匿名の内部クラスは匿名のサブクラスオブジェクトです.しかもこの相手は少し太っています.コンテンツ付きのオブジェクトとして理解できます.
5.匿名内部クラスで定義されているメソッドは、3つを超えないことが望ましい.
[例外の概要]
例外:
*異常なシステム
  *Throwable
    *Error
*通常、実行中のクラスが存在しないか、メモリがオーバーフローしているなどの重大な問題が発生します.
*コードに対する処理は記述されません.
    *Exception
*try catch finallyを使用すると、実行時に実行されます.
*ExceptionとErrorのサブクラス名は、いずれも親クラス名を接尾辞として使用します.
class Demo
{
	int div(int a,int b)
	{
		return a/b;
	}
}

class ExceptionDemo
{
	public static void main(String[] args)
	{
		Demo d = new Demo();
		int x = d.div(4,0);
		System.out.println("x="+x);
		
		System.out.println("over");
	}
}

上記のコードを実行した後、4を0で除算できないため、エラーが発生しました:コマンドラインに表示されます:
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Demo.div(123.java:5)
	at ExceptionDemo.main(123.java:14)

プログラムは実行中に異常が発生し、次のプログラムも実行されません.
[異常try-catch]
/*
  :             。
    :                ,     java        。      。
		    java                。
		
       :  :        ,         。

     ,java  Error     。
	  Error                 。
      ,java  Exception    。
	  Exception                。
	
  Error  Exception         。
  :        ,     。

Throwable
	|--Error
	|--Exception
	
2.     

java            
try
{
	        ;
}
catch(      )
{
	       ; (    )
}
finally
{
	        ;
}

3.                 。
	String getMessage():      。
*/
class Demo
{
	int div(int a,int b)
	{
		return a/b;
	}
}

class ExceptionDemo
{
	public static void main(String[] args)
	{
		Demo d = new Demo();
		try
		{
			int x = d.div(4,0);
			System.out.println("x="+x);
		}
		catch (Exception e)
		{
			System.out.println("   ");
			System.out.println(e.getMessage());// /by zero;
			System.out.println(e.toString());//     :     。
			
			e.printStackTrace();//    ,    ,       。
						//  jvm         ,     printStackTrace  
						//            。
		}
		
		
		System.out.println("over");
	}
}

[例外宣言throws]--このブロックに例外が発生する可能性があることを示します.
/*
  :             。
    :                ,     java        。      。
		    java                。
		
       :  :        ,         。

     ,java  Error     。
	  Error                 。
      ,java  Exception    。
	  Exception                。
	
  Error  Exception         。
  :        ,     。

Throwable
	|--Error
	|--Exception
	
2.     

java            
try
{
	        ;
}
catch(      )
{
	       ; (    )
}
finally
{
	        ;
}

3.                 。
	String getMessage():      。
*/
class Demo
{
	int div(int a,int b) throws Exception//      throws                  
	{
		return a/b;
	}
}

class ExceptionDemo
{
	public static void main(String[] args) throws Exception
	{
		Demo d = new Demo();
		int x = d.div(4,0);
		System.out.println("x="+x);
		System.out.println("over");
	}
}

多異常に対する処理.
1.例外を宣言する場合は、より具体的な例外を宣言することを推奨します.このような処理はより具体的にすることができる.
2.相手はいくつかの異常を宣言し、いくつかのcatchブロックに対応する.
複数のcatchブロックの異常に継承関係が発生した場合、フレイ異常catchブロックは一番下に配置されます.
catch処理で確立する場合、catchでは必ず具体的な処理方法を定義します.
e.printStackTrace()を簡単に定義しないでください.
出力文も簡単に書かないでください.
プロジェクトに特有の問題が発生するからです.
これらの問題はjavaによって記述され、カプセル化されていません.
だからこれらの特有の問題に対してjavaの問題に従ってカプセル化する思想ができます.
特有の問題を、カスタムの例外パッケージ化します.
[throwとthrowsの違い]
[RuntimeException]
[例外-finally]