java--代码块

1.代码块的定义和使用

1.1普通代码块

1.2构造块**

1.3静态代码块**

1.4同步代码块

1.代码块的定义和使用

根据代码块出现的位置以及关键字,分为以下四种代码块

属性在使用前进行处理,可以考虑用到代码块

1.1普通代码块

定义在方法中的代码块。一般方法中代码过长,为避免变量重名,使用普通代码块。使用较少,了解概念即可

public static void main(String[] args){
        //普通代码块,直接在{}中定义。
        {
            int a = 10;
            System.out.println(a);
        }
        int a = 20;
        System.out.println(a);
    }

1.2构造块**

 定义在类中的代码块(不加任何修饰符)

     在对象产生时,优先于构造方法执行,有几个对象产生,就调用几次构造块。

     意义:用于在构造方法执行前完成一些属性的初始化操作。(在调用构造方法前)

class Person{
    {//构造块。定义在类中,不加任何修饰符。
        System.out.println("Person类的构造块");
    }
    Person(){
        System.out.println("Person类构造方法");
    }
}

public class review1{
    public static void main(String[] args){
         new Person();
         new Person();
    }
}

1.3静态代码块

定义:用static定义的代码块。

根据所在的类不同分为:非主类中的静态代码块,主类中的代码块。

1.3.1非主类中的静态块    主要作用:为static属性进行初始化

​
class Person{
    {//构造块。定义在类中,不加任何修饰符。
        System.out.println("2.Person类的构造块");
    }
    Person(){
        System.out.println("3.Person类构造方法");
    }
    static{ //定义在非主类中的代码块
        System.out.println("4.Person类中的静态块");
    }
}

public class review1{
    public static void main(String[] args){
        System.out.println("1.start");
         new Person();
         new Person();
         System.out.println("5.end");
    }
}

​

从上述代码和结果我们发现:

1.非静态代码块在类加载时执行(啥时候用到这个类),且优先于构造块执行。

2.无论产生多少个实例化对象,都只会调用一次。

1.3.2定义在主类中的静态代码块

主类中的静态块优先于主方法执行。

class Person{
    {//构造块。定义在类中,不加任何修饰符。
        System.out.println("2.Person类的构造块");
    }
    Person(){
        System.out.println("3.Person类构造方法");
    }
    static{ //定义在非主类中的代码块
        System.out.println("4.Person类中的静态块");
    }
}

public class review1{
    {
        System.out.println("主类中的构造块");
    }
    review1(){
        System.out.println("主类中的构造方法");
    }
    static{
        System.out.println("主类中的静态块");
    }
    public static void main(String[] args){
        System.out.println("1.start");
         new Person();
         new Person();
         System.out.println("5.end");
    }
}

1.4同步代码块--关于这个在多线程同步再进行讨论。

通过上述的学习,下面我们来看一个阿里的java校招笔试题:

class demo1{
    {
        System.out.println("2.父类构造块");
    }
    demo1(){
        System.out.println("3.父类构造函数");
    }
    static{
        System.out.println("4.父类静态块");
    }
}

public class ali extends demo1{
    {
        System.out.println("5.子类构造块");
    }
    public ali(){
        System.out.println("6.子类构造函数");
    }
    static{
        System.out.println("7.子类静态块");
    }
    public static void main(String[] args){
         System.out.println("1.start---");
         new ali();
         new ali();
         System.out.println("8.end----");
    }
}

 我们不妨想想它的运行结果是什么?

猜你喜欢

转载自blog.csdn.net/hgelin/article/details/83587328