Java代码块应用

代码块引出

有时我们在使用构造方法时,除了进行属性的初始化外还需要使用一些其他的语句,以便更好的实现程序的功能,比如添加一些输出语句;

class Java01{
   public static void main(String args[]){
   //创建对象实例,调用构造方法
   Person person = new Person("小黄",19,'男');
   }
}
class Person{
  private String name;
  private int age;
  private char sex;
  //构造方法重载并进行输出
  public Person(String name){
  this.name = name;
  System.out.println("此构造方法被调用了");
  }
  public Person(String name,int age){
  this.name = name;
  this.age = age;
  System.out.println("此构造方法被调用了");
  }
  public Person(String name,int age,char sex){
  this.name = name;
  this.age = age;
  this.sex = sex;
  System.out.println("此构造方法被调用了");
  }
}
 
   

此代码的运行结果为:

此构造方法被调用了

如上代码使用了构造方法重载,在初始化属性的同时进行了语句的输出。

但是缺点我们可以一眼看出来,就在构造方法中有多个相同的输出语句,代码显得冗余。

为了加强代码的重用性,我们可以使用代码块进行简化:

public class Java01 {
    public static void main(String margs[]){
        //创建对象实例,进行构造方法和代码块的调用
        Person person = new Person("小黄",19,'男');
    }
}
class Person{
    private String name;
    private int age;
    private char sex;
    //使用普通代码块
    {
       System.out.printin("此构造方法被调用了“);
    }
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public Person(String name,int age,char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

如上代码把相同的输出语句 抽取到代码块中,提高了代码的重用性。

运行结果相同。 

代码块语法

语法结构:

(static){
//代码块语句;
}(;)

1:修饰符,可选,有的话只能是static;

加了static的叫静态代码块,没有static的叫非静态代码块

2:括号里也可以加任何逻辑控制语句;

3:末尾的分号可以写,也可以不写;

4:代码块相当于构造方法的补充,所以也可以进行初始化。

代码块调用顺序

1:先调用静态代码块初始化;

(如果有多个静态代码块,则按它们的定义顺序调用)

2:然后调用普通代码块初始化;

(如果有多个普通代码块,则按它们定义的顺序调用)

3:最后调用构造方法进行初始化;

总结:调用优先级:静态代码块>普通代码块>构造方法。

代码示例:

public class Java01 {
    public static void main(String margs[]){
        Person person = new Person("小黄",19,'男');
    }
}
class Person{
    private String name;
    private int age;
    private char sex;
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    //在构造方法中进行输出
    public Person(String name,int age,char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
        System.out.println("此构造方法被调用了。");
    }
    //使用静态代码块
    static{
        System.out.println("此静态代码块被调用了。");
    }
    //使用普通代码块
    {
        System.out.println("此普通代码块被调用了。");
    }
}

输出结果:

此静态代码块被调用了。
此普通代码块被调用了。
此构造方法被调用了。

代码块调用次数

1:静态代码块:静态代码块随着类的加载被执行,只会被执行一次;

2:普通代码块每创建一个对象就执行一次;

补充——类的加载时间:

@  创建对象实例时;

@  使用类的静态成员时;

@  创建子类对象实例时会先加载父类;

代码示例:

public class Java01 {
    public static void main(String margs[]){
        //创建两个对象实例
        Person person = new Person("小黄",19,'男');
        Person person1 = new Person("小红",19,'女');
        //使用静态变量输出
        System.out.println(person.toString() + " 电话号码:" + Person.call);
    }
}
class Person{
    private String name;
    private int age;
    private char sex;
    static int call;
    public Person(){}
    public Person(String name){
        this.name = name;
    }
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public Person(String name,int age,char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
        System.out.println("此构造方法被调用了。");
    }
    static{
        System.out.println("此静态代码块被调用了。");
    }
    {
        System.out.println("此普通代码块被调用了。");
    }
    public String toString(){
        return "姓名:" + name + " 年龄:" + age + " 性别:" + sex;
    }
}

输出结果:

此静态代码块被调用了。
此普通代码块被调用了。
此构造方法被调用了。
此普通代码块被调用了。
此构造方法被调用了。
姓名:小黄 年龄:19 性别:男 电话号码:0

由以上代码可知:重复new同一个类的对象,或者使用同一个类的静态变量,main方法都只会进行一次类加载,因此静态代码块只会执行一次;

但是普通代码块不受类加载的限制,每new一次对象实例就会执行一次。

总结:静态代码块和普通代码块的区别:

修饰符执行顺序执行次数
静态代码块static优先执行随着类加载执行一次
普通代码块在静态代码块之后执行每创建一个对象就执行一次

补充

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

2:代码块和方法不同,但可以看成构造方法的补充,没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象和类显式调用,而是加载类时或创建对象时隐式调用;

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值