小東アクリルのjavaコードブロッククラスの継承finalキーワード


一.コードブロック
1.コードブロックとは?ペア{}2.コードブロックの分類及び特徴1.ローカルコードブロックローカルコードブロックはメソッドに定義され、カッコ{}で含まれます.たとえばmethod()メソッドでローカルコードブロックを作成する
public void method() {
    {
        int x = 18;
        System.out.println("age = " + x);
        System.out.println("         ");
    }
}

上記のコードでは、コードブロックの括弧を直接取り除くことができ、実行効果はコードブロックと一致します.では、ローカルコードブロックを使用する必要はありますか?
ローカル・コード・ブロックは、変数のライフサイクル(役割ドメインの問題)を制限することができます.すなわち、コード・ブロックに作成された変数は、コード・ブロックでのみ有効であり、現代のコード・ブロックの実行が終了すると、変数が解放され、メモリ領域が節約されます.
2.構築コードブロック構築コードブロック定義クラス内メソッド外用大{}で表す
class Teather{
    String name;
    {
      //      
    }
    public void introduce(){
    System.out.println("    " + name);
    }
}
class Demo{
public static void main(String[] args) {
        Test test = new Test();
        System.out.println("-------------");
        Test test2 = new Test(1);
    }
}
public class Test {
    public Test() {
        System.out.println("    ");
    }

    public Test(int num) {
        System.out.println("    ");
    }

    {
        System.out.println("     ");
    }


}

結果
     

    

-------------

     

    

オブジェクトを作成するために無パラメトリック構造を使用しても、パラメトリック構造を使用しても、まず構築コードブロックの内容が実行されます.したがって、オブジェクトを初期化することができ、オブジェクトの作成時にこの機能を実現し、構築コードブロックを呼び出し、コードの冗長性を低減し、コードの多重性を高めることができます.呼び出し順序:オブジェクトを作成するときに、構築コードブロックシステムがあれば、構築コードブロックを呼び出してから構築方法を呼び出すことができます.
≪アクション|Actions|emdw≫:同じ方法で実行する場合は、構築コード・ブロックで呼び出すことができます.
3.静的符号ブロック静的符号ブロックは、同様にクラスに定義され、符号ブロックを構築することに対して、カッコの前にstatic修飾子を1つ追加しただけである.同じようにコードでその役割を見てみましょう
class Demo01{
public static void main(String[] args) {
        StaticTest st = new StaticTest();
        System.out.println("----------------");
        StaticTest st2 = new StaticTest(1);
    }
  }
public class StaticTest {
    public StaticTest() {
        System.out.println("    ");
    }

    public StaticTest(int num) {
        System.out.println("    ");
    }

    static {
        System.out.println("     ");
    }


}

結果
     

    

----------------

    

オブジェクトは、コンストラクション・コード・ブロックと同様にコンストラクション・メソッドの前に実行されるが、静的コード・ブロックは1回のみ実行される無パラメータおよびパラメトリック形式で作成されることがわかります.
静的コードブロックはクラスのロード時に初期化され、一度だけロードされ、クラスのロードに伴ってロードされる.したがって、プロジェクトの開始時に実行しなければならないコードがある場合は、静的コードブロックを使用する必要があります.
役割:ロードドライバ(JDBCデータベースの接続)
4.優先順位
public class YouXianJi {
    public YouXianJi() {
        System.out.println("    ");
    }

    public YouXianJi(int x) {
        System.out.println("    ");
    }

    {
        System.out.println("     ");
    }

    static {
        System.out.println("     ");
    }
     //     
    void method() {
        {
            System.out.println("     ");
        }
    }

    public static void main(String[] args) {
        System.out.println("main()  ");
        YouXianJi yxJ = new YouXianJi(); //         
        yxJ.method();
        System.out.println("---------------------------------------");
        YouXianJi yxji = new YouXianJi(1); //         
        yxji.method();
    }
}

結果
[     

main()  

     

    

     

---------------------------------------

     

    

     ]

したがって,優先実行順序は静的コードブロック>main()メソッド>構築コードブロック>構築メソッドであることがわかる.
二.クラスの継承
オブジェクト向けのプログラミング言語では,クラスが最も重要な基礎であることは間違いない.抽象、パッケージ、継承、多態という4つの特性はクラスから離れられず、クラスが存在してこそ、オブジェクト向けプログラミングの特徴を体現することができる.
継承はすべてのOOP言語に不可欠な部分であり、javaではextendsキーワードを使用して継承関係を表します.クラスを作成すると、常に継承され、継承するクラスが明確に指定されていない場合は、ルートクラスObjectから常に暗黙的に継承されます.たとえば、実装コード:
class Demo{
  public static void main(String[] args){
  Man m = new Man;
  m.name = "   ";
  m.age = 12;
  m.introduce();
  }
}
class Person {
 String name;
 int age;
    public Person() {

    }
    public void introduce(){
     System.out.println(name + "---" + age);
    }
}

  1.クラスManはPersonクラスに継承されます.これにより、Personクラスは親クラス、Manクラスは子クラスと呼ばれ、2つのクラスに継承関係がある場合、子クラスは親クラスのメソッドと変数を自動的に継承し、子クラスでは親クラスのメソッドと変数を呼び出すことができます.Javaでは、単一継承のみが許可され、多くの継承は許されませんが、インタフェースを使用して実現することができます.javaでは多層継承のみが許可されます(属性と方法は継承を伝えます).つまり、おじいさんのお父さんの息子のクラスです.
class Grandfather{

}
class Father extends Grandfather{

 }
 class Son extends Father{

 }
                    

クラスが継承されていないクラスが実際に継承されたシステムのObjectクラスである場合、Objectクラスはjavaの最上位クラス(ベースクラス)です.
たとえば、クラスにあるメソッドと属性を取得するには、どのクラスを使用しますか?継承チェーンの最上位クラスを使用します.クラス固有のメソッドと属性を取得するには、どのクラスを使用しますか?最上位クラスの使用
2.構築方法(コンストラクタ)
                ,       ,                ,                super                     。          ,          supersuper
//    
class Shape {

    String name;

    public Shape(){ //       
        name = "shape";
    }

    public Shape(String name) { //       
        this.name = name;
    }
}

class Circle extends Shape { //         

    private double radius; //   

    public Circle() {
     //               
     //                       
        radius = 0;
    }

    public Circle(double radius) {
    //             
    //                          
    //         
    super();
        this.radius = radius;
    }
}

4.super
superには主に2つの使い方があります.
  1)super.メンバー変数/super.メンバーメソッド;
  2)super( );//親クラスの構築方法を呼び出す
第1の使用法は主にサブクラスで親クラスのメンバー変数またはメソッドを呼び出すために使用され、superポイントプロパティ(メソッド):親クラスのプロパティ(メソッド)を呼び出すことができます.2つ目は主にサブクラスの構築方法で親を表示して呼び出す構築方法で、サブクラスの構築方法で使用される場合は、サブクラスの構築方法の最初の文である必要があります.super():親を呼び出す構築方法
実はこのsuperはthisキーワードと似ています
5.thisとsuperの違い
1.thisはクラスで本クラスのオブジェクト(現在のクラスのオブジェクト)を表す.superはクラスで親のオブジェクトを表します
this点属性:現在のクラスの属性を呼び出すことができます(現在のクラスがこの属性を探していない場合は親クラスに行きます)近接原則super点属性に従います:親クラスの属性を呼び出すことができます
this():このクラスの構築メソッドsuper()を呼び出します.親クラスの構築メソッドを呼び出します.
6.2つのクラスの継承
親に無参構造方法(有参構造方法)がない子の構造方法はどのように書きますか?パラメータを呼び出す構造方法を指定できます
実装コード:
public class Test {
    public static void main(String[] args){
          DaZhong daZhong = new DaZhong();

          daZhong.sayHi();
          System.out.println("-------");
          DaZhong daZhong2 = new DaZhong("  ");
          daZhong2.sayHi();
        }
}
//         
class Cor{
    String name;
    String color;

    //       
//  public Cor() {
//      System.out.println("Car         ");
//  }
    public Cor(String name) {
        this.name = name;
        System.out.println("  Car        ");
    }


}
//    
class DaZhong extends Cor{

    public DaZhong() {
        super("    ");
        System.out.println("Da         ");
    }
    public DaZhong(String name) {
        super(name);
        this.name = name;
    }
    public void sayHi() {
        System.out.println(name + "--" + color);
    }

}

7.親と子を継承するには、同じメンバーメソッド実装コードがあります.
class Person{
public void print(){
  System.out.println("    ");
  }
 }
 class Student{
 //    @Override                
    @Override
    public void print() {
          super.print;//                     
          System.out.print("      ,    ");
    }
}

親メソッドと子メソッド名が完全に一致する場合をメソッド書き換えと呼びます.この場合superポイントメソッドは親メソッドを呼び出すことができます.
書き換えの適用シーン:子のメソッドが親のメソッドに相当する場合、親のメソッドに対してアップグレードがある場合、メソッドの書き換えを使用できます.
OverrideとOverloadの違いは何ですか?メソッドリロードはメソッド名は同じですがパラメータは異なりますOverride書き換えOverloadリロード
三.finalキーワード
finalは文字通り「最後の、最終的な」(絶育)という意味を理解している.Javaでも同様にその意味を表しています.
finalは、クラスプロパティ、オブジェクトプロパティ、ローカル変数、およびパラメータを含む変数、メソッド(クラスメソッドおよびオブジェクトメソッドを含む)、およびクラスを修飾するために使用できます.1.finalは変数を修飾します.
final修飾の変数は定数(修正できない量)に相当します.命名規則名はすべて大文字多単語の場合、下線が分かれます.
public static final double MA_VALUE = 3.14;

2.final修飾クラス:
final修飾クラスは、このような「最後の、最終的な」意味を表す.したがってfinalで修飾されたクラスは継承されず,すなわち自分のサブクラスを持つことができない.
finalで修飾されたクラスを継承しようとすると、コンパイル中にエラーが発生したりします.
public final class A {

}

//     !A final  ,     !

  public class B extends A{

  }

3.final修飾方法:
final修飾メソッドは、このメソッドが「最後の、最終的な」という意味であることを示します.すなわち、このメソッドは書き換えられません.
public class A {

    // final  f

    public final void f() {

       System.out.println(" A  final  f    ");

    }

}

public class B extends A {

    //     !   f   final  ,    !

       public void f() {

         System.out.println(" B    f    ");

       }

}