찾다
Javajava지도 시간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;
    }
}

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

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

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

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

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

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

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

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

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

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

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

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

Java数据结构之AVL树详解Java数据结构之AVL树详解Jun 01, 2022 am 11:39 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

一文掌握Java8新特性Stream流的概念和使用一文掌握Java8新特性Stream流的概念和使用Jun 23, 2022 pm 12:03 PM

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구