Java中的类和对象之代码块

系列文章目录

Java中的类和对象系列

第一章 this详解

第二章 构造方法

第三章 代码块 


目录

系列文章目录

一、代码块的概念及分类

1.普通代码块

2.构造代码块

3.静态代码块


一、代码块的概念及分类

使用{}定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块(后面讲多线程再谈)

今天我们主要讲构造块和静态块。

1.普通代码块

这里,我们还是先提一嘴普通代码块:

public Class Main{
    public static void main(String[] args) {
        {
            int x = 10;
            System.out.println(“这是一个普通代码块”);
        }
        System.out.println(x);//报错
    }
}

 普通代码块仅仅起到一个限制变量作用域的问题。

2.构造代码块

也叫实例代码块,定义在类中,不加修饰符,一般用于初始化实例成员变量。

public class Student {
    private String name;
    private int num;
    private String sex;
    private static int Class = 1;
    public Student() {
        System.out.println("这是构造方法的第一句!");
        this.num = 21;
    }
    public Student(int num) {
        System.out.println("这是构造方法的第一句!");
        this.num = num;
    }
    {
        this.name = "Janssen";
        //this.num = 21;
        this.sex = "man";
        System.out.println("这是一个构造块!");
    }
    public String toString(){
        return "name:"+this.name+" num:"+this.num+" sex:"+this.sex+" class:"+ Class;
    }

    public static void main(String[] args) {
        Student a = new Student();
        Student b = new Student();
        System.out.println(a);
        System.out.println(b);
    }

}

如下是输出结果:

这是一个构造块!
这是构造方法的第一句!
这是一个构造块!
这是构造方法的第一句!
name:Janssen num:21 sex:man class:1
name:Janssen num:22 sex:man class:1

由输出结果我们不难看出,构造块优先于构造方法先执行,因为在编译完成后,编译器会将构造块中的代码拷贝到每一个构造方法的第一条语句前!

因此,构造块的意义在于简化多个构造方法的冗余量,简化重复代码量。构造代码块只有在创建对象时才会执行。

3.静态代码块

如果说构造块是用来初始化实例成员变量的,那么静态代码块就是用来初始化静态成员变量的。

代码块我们也用static来修饰:

public class Student {
    private String name;
    private int num;
    private String sex;
    private static int Class = 1;
    public Student() {
        System.out.println("这是构造方法的第一句!");
    }
    {
        this.name = "Janssen";
        this.num = 21;
        this.sex = "man";
        System.out.println("这是一个构造块!");
    }
    static{
        Class = 2;
        System.out.println("这是一个静态代码块!");
    }
    public static int getclass(){
        return Class;
    }
    public String toString(){
        return "name:"+this.name+" num:"+this.num+" sex:"+this.sex+" class:"+ Class;
    }

    public static void main(String[] args) {
        Student a = new Student();
        System.out.println(a);
    }

}

这是一个静态代码块!
这是一个构造块!
这是构造方法的第一句!
name:Janssen num:21 sex:man class:2 

由输出结果我们可以看出:

  • 静态代码块在虚拟机加载类的时候就会加载执行,它优先于构造块
  • 而且不管生成多少个对象,静态代码块都只执行一次!
  • 如果静态变量已经初始化,静态代码块可以对其重新赋值(除非final定义)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值