(java基础学习)代码块

代码块

1.代码块(初始化块):属于类的一个成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来,

但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通对象会类显式调用,而是加载类时,或创建对象时隐式调用。

2.基本语法

【修饰符】{

代码

};

注:(1)修饰符 可选,要写的话,也只能写static

(2)代码块分为两类,有static修饰的叫静态代码块,没有的叫普通代码块。

(3)逻辑语句可以为任何逻辑语句(和方法一样)

(4);号可以写上,也可以省略。

3.作用

(1)相当于对构造器的补充机制

(2)使用场景:如果多个构造器中有重复的语句,可以抽取到代码块中,提高代码复用性。

(3)快速入门

package com.hspedu.codeblock_;

public class CodeBlock01 {

public static void main(String[] args) {

Movie movie = new Movie("你好,李焕英"); System.out.println("===============");

Movie movie2 = new Movie("唐探 3", 100, "陈思诚");

}

}

class Movie {

private String name; private double price; private String director;

//3 个构造器-》重载

//老韩解读

//(1) 下面的三个构造器都有相同的语句

//(2) 这样代码看起来比较冗余

//(3) 这时我们可以把相同的语句,放入到一个代码块中,即可

//(4) 这样当我们不管调用哪个构造器,创建对象,都会先调用代码块的内容

//(5) 代码块调用的顺序优先于构造器..

{

System.out.println("电影屏幕打开...");

System.out.println("广告开始...");

System.out.println("电影正是开始...");

};

public Movie(String name) { System.out.println("Movie(String name) 被调用..."); this.name = name;

}

public Movie(String name, double price) {

this.name = name; this.price = price;

}

public Movie(String name, double price, String director) {

System.out.println("Movie(String name, double price, String director) 被调用..."); this.name = name;

this.price = price; this.director = director;

}

}

4.代码块使用细节

(1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。

(2)类什么时候被加载

1.创建对象实例时(new)

2.创建子类对象实例,父类也会被加载

3.使用类的静态成员时(静态属性,静态方法)

(3)普通代码块,在创建对象实例时,会被隐式的调用。

创建一次就调用一次。如果使用类的静态成员时,普通代码块不会被执行。

小结:1.static代码块是类加载时,执行,只会执行一次。

2.普通代码块是在创建对象时调用的,创建一次就调用一次。

3.类加载的3种情况要背

5.创建一个对象的时候,在一个类 调用顺序是:(重点)

(1)调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用优先级是一样的,按他们的定义的顺序调用)

(2)调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化优先级一样,按定义顺序调用)

(3)调用构造方法

6.构造器的最前面其实隐含了super()和调用普通代码块。

例如

class A{

        pubic A(){

//(1)super();

//(2)调用普通代码块

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

}

}

7.创建一个子类对象时(继承关系),他们的静态代码块。静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下。(面试题)

(1)父类的静态代码块和静态属性(优先级一样,按定义顺序)

(2)子类的静态代码块和静态属性(优先级一样,按定义顺序)

(3)父类的普通代码块和普通属性初始化(优先级一样,按定义顺序)

(4)父类的构造器

(5)子类的普通代码块和普通属性初始化(优先级一样,按定义顺序)

(6)子类的构造器

例子中:

//1.类加载
//(1)类加载  先加载父类AAAA,再加载子类BBBB
//(2)创建对象  子类构造器开始
//

8.静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值