java基礎ノート(4)0104
1.内部クラスのメンバーの内部クラス1.4種類のアクセス権限修飾子を使用できます.2.ローカル変数はstaticで修飾できない3.内部クラスのバイトコードファイルの命名方式は外部クラス$内部クラス.class 4.内部クラスは外部クラスの属性と方法を使用できます.プライベートを含む5.外部クラスの属性と内部クラスの属性が同名の場合は、内部クラスの6を優先的に使用します.つまり、thisを使用するのも内部クラスです.外部カテゴリの呼び出しを作成しない限り、7.内部クラスを使用する場合は、リード8が必要です.内部クラスの作成方式は、外部カテゴリのオブジェクトを介して内部クラスのパッケージを作成します.宿主類四種類:メンバー内部クラス静的内部クラスの局部内部クラスの匿名内部クラス異常システム:Thrwable Error:重大なエラーは直接解決できません.Exception:異常は、常に論理エラーによるものです. を解決できます.異常な処理メカニズム:異常が発生した場合、異常なオブジェクトが発生し、異常な処理コードが検索されます.見つかったら処理に任せます.プログラムが正常に実行されていません. を終了します.異常の分類:運転時異常(非検査異常)非稼働時異常(検査異常、コンパイル時異常) 異常処理方式try catch finally throwとthrows throws異常発生の可能性については、ステートメントが異常であり、方法声明の後に記載されています.異常が発生した場合、方法の内部には異常なオブジェクトが付いています. カスタム異常:ビジネスロジックに対して異常を書くことが要求される可能性があります.自定異常:RuntimeExceptionを継承して運転している場合異常、Exceptionを継承して非実行時異常があります.非実行時異常は通常、外部リソースと連絡がある です.
public class Car {
String color = " ";
private void run() {
System.out.println(" ");
}
public class {
String color = " ";
String type;
public void work() {
System.out.println(" ");
run();
System.out.println(new Car().color);
}
}
}
import demo.Car. ;
public class Test {
public static void main(String[] args) {
Car car = new Car();
car.color = " ";
f = car.new ();
f2 = new Car().new ();
f2.type = "345";
f2.work();
}
class Test2{
public void a() {
}
}
}
2.静的な内部クラス1.静的な内部クラスでは静的な属性と方法2.バイトコードファイルの名前が外部クラス$内部クラス.class 3.静的な内部クラスでは、外部クラスの非静的な属性と方法4の内部クラスでの属性と外部クラスの属性が同名の場合、直接に使用できない.外部クラス.静的属性から外部クラスの属性5を呼び出すことができます.静的内部クラスは直接オブジェクトを作成することができます.外部のオブジェクトは必要ありません.public class Outer {
static String name;
int age;
public void run() {
System.out.println(" ");
}
static class Inner{
int a;
static int b;
static String name;
public void a() {
System.out.println("a");
System.out.println(Outer.name);
}
public static void b() {
System.out.println("static b");
}
}
}
import demo2.Outer.Inner;
public class Test {
public static void main(String[] args) {
Inner inner = new Inner();
}
}
3.ローカル内部クラスの局所内部クラスは、1つの局所変数1に類似しています.ローカル内部クラスの定義は、メソッド内部のクラス2にあります.アクセス権限修飾子およびstaticを使用して修飾することはできません.3.ローカル内部クラスでは、外部クラスの属性を使用してもいいです.方法におけるローカル変数4.ローカル内部クラスの属性と外部クラスのメンバー属性が同名の場合、外部クラスを使用することができます.this.属性は外部クラスの属性を呼び出すことができます.ローカル内部クラスはこの内部クラスを宣言する方法でのみオブジェクトを作成することができます.ローカル内部クラスはメソッドが呼び出された場合のみ実行できます.public class Test {
int a = 3;
public static void main(String[] args) {
Test test = new Test();
test.test();
}
public void test() {
int age = 3;
class Inner{
public String name = "mingzi";
private int a = 5;
public void show() {
System.out.println(name);
System.out.println(age);
System.out.println(Test.this.a);
}
}
Inner inner = new Inner();
inner.show();
}
}
4.匿名内部クラス1.自分の本類の名前がなく、インターフェースや抽象類の名前でしか代表できません.作成されたのは、実現クラスまたはサブクラスのオブジェクトの左側がインターフェースの名前です.右側が実現クラスのオブジェクトの上にシフトします.3.匿名内部クラスに特有の方法が追加されません.インターフェース名で呼び出す方法がないためです.3.たとえ内部クラスやインターフェースでも、newは、複数の実装クラス4です.1回のオブジェクトを作成するだけで実現クラスまたはサブクラスがある場合、匿名の内部クラスを使用することができます.プログラム構造をより簡潔にすることができます.匿名の内部クラスの名前は外部クラス$デジタルです.class匿名の内部クラスでは、追加的に自分の方法を定義することができますが、一般的にはそうではありません.public class Test {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
runnable.run();
// , run
//
Runnable runnable2 = new Runnable() {
@Override
public void run() {
System.out.println(" 2");
}
};
runnable2.run();
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(" ");
}
}
public abstract class AbstractClass {
public abstract void b();
}
public class Animal implements Run{
@Override
public void run() {
System.out.println(" ");
}
}
public class Person implements Run{
@Override
public void run() {
System.out.println(" ");
}
public void eat() {
}
}
public interface Run {
public void run();
}
public class Test3 {
public static void main(String[] args) {
Person person = new Person();
person.run();
Animal animal = new Animal();
animal.run();
Run run = new Run() {
@Override
public void run() {
System.out.println(" ");
eat();
}
public void eat() {
}
};
run.run();
//
AbstractClass class1 = new AbstractClass() {
@Override
public void b() {
System.out.println("bbb");
}
};
class1.b();
AbstractClass class2 = new AbstractClass() {
@Override
public void b() {
System.out.println("bbb");
}
};
class2.b();
}
}
基本的なデータタイプはパラメータが渡される時に、数値参照データタイプが伝達されます.パラメータが伝達される時に、伝達されるのはアドレス(引用)値の伝達と引用伝達です.String文字列がパラメータとして用いられるときに、伝達されるのはアドレス(参照)です.ただし、常量池にデータが格納される特徴:保存されるデータが常量池に存在する場合は、そのまま使用されます.存在しない場合は、新たなスペースストレージを再開発し、内容を絶対に変更しません.public class Person {
String name;
int age;
}
public class Test2 {
public static void main(String[] args) {
Person p = new Person();
p.name = "lisi";
p.age = 15;
a(p);
System.out.println("main-->"+p.name+" "+p.age);
}
public static void a(Person p) {
p.name = "zhangsan";
p.age = 5;
System.out.println("a-->"+p.name+" "+p.age);
}
}
5.異常運転時に異常が実行されないと、コンパイル期間にエラーが発生し、処理しないと外部資源に関わることができなくなり、外部資源の変化によって問題が発生する可能性があります.異常が発生しても処理が要求されてから実行できます.コンパイルで実際にプログラムに異常が発生したら、先にtryコードブロックを実行してください.異常が発見されます.jvmは自動的に異常なオブジェクトを作成し、異常を捕捉できるコードを探してcatchを探します.catchのタイプと異常タイプが一致したら、catchブロックを実行して異常を処理します.プログラムは引き続き下に向かって実行します.中断しないでください.catchのタイプが一致しないなら、直接異常を爆発させて、プログラムを中断させます.異常が発生しないなら、先にtryブロックを実行します.異常がない場合はtryを実行した後、catch finallyを実行しない場合は異常が発生してもこのコードのクリーンアップとクローズの操作を行います.また、直接システムを終了して実行しない場合は必ず実行します.throwsを実行しないと、複数の異常タイプと表記できます.表記方法の内部に異常があります.異常が発生したら、異常を調合者に転送し、異常が存在する可能性を明示して、異常をスローします.とのは異常な対象で、一つしかないです.throwが現れたら、通常はthrowsと結合して使用します.throwの後に付いているのは異常な対象です.本当に異常が発生しました.もしカスタム非運行時に異常なExceptionを継承したいなら、RuntimeExceptionを継承しただけです.運行時は異常です.public class LegException extends Exception{
public LegException() {
super();
}
public LegException(String message) {
super(message);
}
}
public class Test2 {
public static void main(String[] args) {
try {
a(2," ");
} catch (LegException e) {
// TODO: handle exception
}
System.out.println(" ");
}
public static void a(int leg,String animal)throws LegException {
if(" ".equals(animal) && leg ==4) {
System.out.println(" ");
}else {
System.out.println(" ");
}
}
}
public class SexException extends RuntimeException{
public SexException() {
super();
}
public SexException(String message) {
super(message);
}
}
public class Test {
public static void main(String[] args) {
try {
a(" ");
} catch (SexException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println(" ");
}
public static void a(String gender) throws SexException {
if(" ".equals(gender) || " ".equals(gender)) {
System.out.println(" ");
}else {
throw new SexException(" ");
}
}
}