1. 基本的な紹介
コード ブロックは初期化ブロックとも呼ばれ、クラスのメンバー (クラスの一部) であり、メソッドに似ています。論理ステートメントは次のようにカプセル化されます。 ;
ただし、メソッドとは異なり、メソッド名、戻り値、パラメータはなく、メソッド本体のみがあり、オブジェクトまたはクラスを通じて明示的に呼び出す必要はありません。 。
基本構文
(修飾子)(オプション){コード};
注:
1. 修飾子はオプションです。コードブロックは 2 つのカテゴリに分けられ、静的に変更されたものを静的コード ブロック、静的に変更されていないものを通常のコード ブロックと呼びます。
3.; オプション
利点
1. 初期化操作を実行できる別の形式のコンストラクターと同等です
2 .ステートメントが繰り返される場合複数のコンストラクターでは、コード ブロックに抽出できます。
クイック スタート
package com.demo.codeblock_; public class codeblock01 { public static void main(String[] args) { movie m01=new movie("环太平洋"); movie m02=new movie("荒野大飞",66); movie m03=new movie("无暇赴死",55,"老K"); } } class movie{ private String name; private double price; private String director; { System.out.println("电影屏幕打开。。。"); System.out.println("广告开始。。。"); System.out.println("电影开始。。。"); } //三个构造器重载 public movie(String name) { // System.out.println("电影屏幕打开。。。"); // System.out.println("广告开始。。。"); // System.out.println("电影开始。。。"); System.out.println("构造器movie(String name)被调用。。。"); this.name = name; } public movie(String name, double price) { // System.out.println("电影屏幕打开。。。"); // System.out.println("广告开始。。。"); // System.out.println("电影开始。。。"); System.out.println("构造器movie(String name, double price)被调用。。。"); this.name = name; this.price = price; } public movie(String name, double price, String director) { // System.out.println("电影屏幕打开。。。"); // System.out.println("广告开始。。。"); // System.out.println("电影开始。。。"); System.out.println("构造器movie(String name, double price, String director)被调用。。。"); this.name = name; this.price = price; this.director = director; } }
2. コード ブロックの詳細
コード ブロックの使用上の注意と詳細な説明
1)静的コード ブロックは静的コード ブロックとも呼ばれ、その機能はクラスを初期化することであり、クラスがロードされるときに実行され、一度だけ実行されます。通常のコードブロックであれば、オブジェクトが作成されるたびに実行されます。
2) クラスはいつロードされますか [重要!]
①オブジェクト インスタンス (新規) を作成する場合
②サブクラスのオブジェクト インスタンスを作成する場合、親クラスもロードされます。ロード済み
③クラスの静的メンバー(静的プロパティ、静的メソッド)を使用する場合
ケースデモ:クラスAがクラスBの静的ブロックを拡張する
3) 通常のコードブロック、オブジェクト インスタンスの作成時に暗黙的に呼び出されます。作成されると、一度呼び出されます。クラスの静的メンバーのみを使用する場合、通常のコード ブロックは実行されません。
package com.demo.codeblock_; public class codeblock02 { public static void main(String[] args) { //类被加载的情况举例 //1.创建对象时new //AA aa=new AA(); //2.创建子类对象实例,父类也会被加载,而且,父类先被加载,子类后被加载 AA aa01=new AA(); //3.使用类的静态成员时 System.out.println(cat.n); DD d1=new DD(); DD d2=new DD(); } } class DD{ static { System.out.println("DD的静态代码被执行1次"); } } class animal{ static { System.out.println("animal的静态代码被执行"); } } class cat extends animal{ public static int n=888; //静态代码块 static { System.out.println("cat的静态代码块被执行"); } } class BB { static { System.out.println("BB的静态代码被执行"); } } class AA extends BB{ static { System.out.println("AA的静态代码被执行"); } }
クラス呼び出しシーケンス
オブジェクト作成時、クラス呼び出しシーケンス: (ポイント、難点)
①Call Staticコード ブロックと静的プロパティの初期化 (注: 静的コード ブロックと静的プロパティの初期化の呼び出しは同じ優先順位を持ちます。複数の静的コード ブロックと複数の静的変数の初期化がある場合、それらは定義された順序で呼び出されます)
②通常のコードブロックと通常の属性の初期化を呼び出します (注: 通常のコードブロックと通常の属性の初期化の呼び出しの優先順位は同じです。複数の通常のコードブロックと複数の非通常の属性の初期化がある場合は、それらが呼び出されます)定義された順序)
③コンストラクター メソッドを呼び出します。
例
package com.demo.codeblock_; public class codeblock03 { public static void main(String[] args) { A a=new A(); } } class A{ public A(){ System.out.println("A的无参构造被调用"); } int n2=getn2(); {//普通代码块 System.out.println("A的普通代码块被调用"); } int getn2(){ System.out.println("getn2被调用"); return 99; } private static int n=getn(); static { System.out.println("A的静态代码被调用"); } public static int getn(){ System.out.println("getn被调用"); return 100; } }
コード ブロックの詳細 2
コンストラクターの先頭は実際には super(そして通常のコード ブロックを呼び出します) を意味します。静的に関連するコード ブロックと属性の初期化を示す新しいクラスです。クラスがロードされると実行されます
したがって、コンストラクターと通常のコード ブロックの前に実行されます
class A { public AO{ super0: //调用普通代码块 _System.out.println("ok"); } }
Example
package com.demo.codeblock_; public class codeblock04 { public static void main(String[] args) { B b=new B(); } } class AA{ { System.out.println("AA的普通代码块"); } public AA(){ //1.super() //2.调用本类的普通代码块 System.out.println("AA的构造器被调用"); } } class B extends AA{ { System.out.println("B的普通代码块"); } public B(){ //1.super() //2.调用本类的普通代码块 System.out.println("B的构造器被调用"); } }
コード ブロックの詳細 2
サブクラス オブジェクト (継承関係) を作成するときの静的コード ブロック、静的プロパティの初期化、通常のコード ブロックを見てみましょう。コードブロック、通常の属性初期化、コンストラクタ呼び出しシーケンスは以下の通り:
1. 親クラスの静的コードブロックと静的プロパティ(優先順位は同じ、定義順にホットライン)
2. 子クラスの静的コード ブロックと静的属性 (同じ優先順位、定義順に実行)
3. 親クラスの通常のコード ブロックと通常の属性の初期化 (同じ
4. 親クラスの構築方法
#5. サブクラスの通常のコードブロックと通常の属性の初期化 (同じ優先度、定義順に実行) 6.サブクラスの構築方法 7. 静的コードブロックは静的メンバー(静的プロパティと静的メソッド)のみを直接呼び出すことができ、通常のコードブロックは任意のメンバーを呼び出すことができます。 ##例package com.demo.codeblock_; public class codeblock05 { public static void main(String[] args) { //老师说明 //(1) 进行类的加载 //1.1 先加载 父类 A02 1.2 再加载 B02 //(2) 创建对象 //2.1 从子类的构造器开始 //new B02();//对象 new C02(); } } class A02 { //父类 private static int n1 = getVal01(); static { System.out.println("A02的一个静态代码块..");//(2) } { System.out.println("A02的第一个普通代码块..");//(5) } public int n3 = getVal02();//普通属性的初始化 public static int getVal01() { System.out.println("getVal01");//(1) return 10; } public int getVal02() { System.out.println("getVal02");//(6) return 10; } public A02() {//构造器 //隐藏 //super() //普通代码和普通属性的初始化...... System.out.println("A02的构造器");//(7) } } class C02 { private int n1 = 100; private static int n2 = 200; private void m1() { } private static void m2() { } static { //静态代码块,只能调用静态成员 //System.out.println(n1);错误 System.out.println(n2);//ok //m1();//错误 m2(); } { //普通代码块,可以使用任意成员 System.out.println(n1); System.out.println(n2);//ok m1(); m2(); } } class B02 extends A02 { // private static int n3 = getVal03(); static { System.out.println("B02的一个静态代码块..");//(4) } public int n5 = getVal04(); { System.out.println("B02的第一个普通代码块..");//(9) } public static int getVal03() { System.out.println("getVal03");//(3) return 10; } public int getVal04() { System.out.println("getVal04");//(8) return 10; } //一定要慢慢的去品.. public B02() {//构造器 //隐藏了 //super() //普通代码块和普通属性的初始化... System.out.println("B02的构造器");//(10) // TODO Auto-generated constructor stub } }
以上がJava コード ブロックの使用の詳細は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
