> Java > java지도 시간 > 본문

Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?

WBOY
풀어 주다: 2023-04-27 19:31:04
앞으로
780명이 탐색했습니다.

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;
    }
}
로그인 후 복사

Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?

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的静态代码被执行");
    }
}
로그인 후 복사

Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?

클래스 호출 시퀀스

객체를 생성할 때 클래스 호출 시퀀스에서: (요점, 어려움)

①정적 코드 블록 호출 및 정적 속성 초기화(참고: 정적 코드 블록 및 정적 속성 초기화 호출에는 동일한 우선순위의 정적 코드 블록과 정적 변수 초기화가 여러 개인 경우 정의된 순서대로 호출됩니다.

② 일반 코드 블록 및 일반 속성 초기화 호출 (참고: 일반 코드 블록 및 일반 속성 초기화) 호출 우선 순위는 동일합니다. 일반 코드 블록이 여러 개 있고 특별 속성 초기화가 여러 개 있으면 정의된 순서대로 호출됩니다.)

③생성자를 호출합니다.

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;
    }
}
로그인 후 복사

Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?

코드 블록 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的构造器被调用");
    }
}
로그인 후 복사

Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?

코드 블록 상세 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 코드 블록 사용에 대한 세부 사항은 무엇입니까?

를 호출할 수 있습니다.

위 내용은 Java 코드 블록 사용에 대한 세부 사항은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!