JAva学習ノートday 9
4880 ワード
内部クラス
*あるクラスは別のクラスに定義され、そのクラスを内部クラス(内蔵クラス、ネストクラス)と呼ぶ.
*アクセス機能:
内部クラスは、プライベートメンバーを含む外部クラスのメンバーに直接アクセスできます.
外部クラスが内部クラスにアクセスするメンバーは、内部クラスのオブジェクトを作成する必要があります.
[内部クラスアクセス規則]
[静的内部クラス]
[内部クラス定義の原則]
[匿名の内部クラス]
匿名の内部クラス:
1.匿名の内部クラスは、実は内部クラスの略記形式です.
2.匿名の内部クラスを定義する前提:
内部クラスは、クラスを継承するか、インタフェースを実装する必要があります.
3.匿名内部クラスのフォーマット:new親またはインタフェース(){子クラスの内容を定義}
4.実は匿名の内部クラスは匿名のサブクラスオブジェクトです.しかもこの相手は少し太っています.コンテンツ付きのオブジェクトとして理解できます.
5.匿名内部クラスで定義されているメソッドは、3つを超えないことが望ましい.
[例外の概要]
例外:
*異常なシステム
*Throwable
*Error
*通常、実行中のクラスが存在しないか、メモリがオーバーフローしているなどの重大な問題が発生します.
*コードに対する処理は記述されません.
*Exception
*try catch finallyを使用すると、実行時に実行されます.
*ExceptionとErrorのサブクラス名は、いずれも親クラス名を接尾辞として使用します.
上記のコードを実行した後、4を0で除算できないため、エラーが発生しました:コマンドラインに表示されます:
プログラムは実行中に異常が発生し、次のプログラムも実行されません.
[異常try-catch]
[例外宣言throws]--このブロックに例外が発生する可能性があることを示します.
多異常に対する処理.
1.例外を宣言する場合は、より具体的な例外を宣言することを推奨します.このような処理はより具体的にすることができる.
2.相手はいくつかの異常を宣言し、いくつかのcatchブロックに対応する.
複数のcatchブロックの異常に継承関係が発生した場合、フレイ異常catchブロックは一番下に配置されます.
catch処理で確立する場合、catchでは必ず具体的な処理方法を定義します.
e.printStackTrace()を簡単に定義しないでください.
出力文も簡単に書かないでください.
プロジェクトに特有の問題が発生するからです.
これらの問題はjavaによって記述され、カプセル化されていません.
だからこれらの特有の問題に対してjavaの問題に従ってカプセル化する思想ができます.
特有の問題を、カスタムの例外パッケージ化します.
[throwとthrowsの違い]
[RuntimeException]
[例外-finally]
*あるクラスは別のクラスに定義され、そのクラスを内部クラス(内蔵クラス、ネストクラス)と呼ぶ.
*アクセス機能:
内部クラスは、プライベートメンバーを含む外部クラスのメンバーに直接アクセスできます.
外部クラスが内部クラスにアクセスするメンバーは、内部クラスのオブジェクトを作成する必要があります.
[内部クラスアクセス規則]
[静的内部クラス]
[内部クラス定義の原則]
/*
:
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]