Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?
1. 기본 소개
코드 블록은 클래스의 멤버(클래스의 일부)라고도 하며, 논리문이 메서드 본문에 캡슐화되어 { };
하지만 Different 메소드를 사용하면 메소드 이름도 없고, 반환도 없고, 매개변수도 없고, 메소드 본문만 있고, 객체나 클래스를 통해 명시적으로 호출할 필요가 없습니다.
기본 구문
(수정자) (선택 사항)
참고:
1 수정자는 선택 사항이며 static
2로만 작성할 수 있습니다. 유형 중에서 static으로 수정된 유형을 정적 코드 블록이라고 하며, 정적 수정이 없는 유형을 일반 코드 블록이라고 합니다.
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) 정적 코드 블록은 정적 코드 블록이라고도 하며, 그 기능은 클래스를 초기화하는 것이며 다음을 따릅니다. class 로딩 시 실행되며, 한 번만 실행됩니다. 일반적인 코드 블록이라면 객체가 생성될 때마다 실행됩니다.
2) 클래스는 언제 로드되나요? [중요!]
1객체 인스턴스 생성 시(신규)
2하위 클래스 객체 인스턴스 생성 시 상위 클래스도 로드됩니다
3클래스의 정적 멤버를 사용할 때(정적 속성) , 정적 메소드)
사례 데모: 클래스 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的静态代码被执行"); } }
클래스 호출 시퀀스
객체를 생성할 때 클래스 호출 시퀀스에서: (요점, 어려움)
①정적 코드 블록 호출 및 정적 속성 초기화(참고: 정적 코드 블록 및 정적 속성 초기화 호출에는 동일한 우선순위의 정적 코드 블록과 정적 변수 초기화가 여러 개인 경우 정의된 순서대로 호출됩니다.
② 일반 코드 블록 및 일반 속성 초기화 호출 (참고: 일반 코드 블록 및 일반 속성 초기화) 호출 우선 순위는 동일합니다. 일반 코드 블록이 여러 개 있고 특별 속성 초기화가 여러 개 있으면 정의된 순서대로 호출됩니다.)
③생성자를 호출합니다.
Example
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"); } }
Instance
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. 상위 클래스의 정적 코드 블록과 정적 속성(우선순위는 동일함) hot 정의 순서
2 .하위 클래스의 정적 코드 블록 및 정적 속성(동일 우선순위, 정의 순서대로 실행)
3. 상위 클래스의 일반 코드 블록 및 일반 속성 초기화(동일 우선순위, 실행) 정의 순서대로)
4. 상위 클래스 하위 클래스의 구성 방법
5. 하위 클래스의 일반 코드 블록과 일반 속성 초기화(우선순위는 동일하며 정의 순서대로 실행)
6. 하위 클래스의 메서드
7. 정적 코드 블록은 정적 멤버(정적 속성 및 정적 메서드)만 직접 호출할 수 있으며 일반 코드 블록은 모든 멤버
Instance
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
