【java基础】 静态 关键字 static(构造函数、构造代码块、静态代码块的区别)

业务写多了,连基础也会忘记,抽时间就复习一下子。

static

1.静态概述 

a、生命周期:随着类的加载而加载

b、特点:可以被本类的所有对象共享,可以使用类名调用

2.访问特点

a、静态方法能否直接访问静态成员(变量和方法),不能直接访问非静态。原因:静态优先于对象而存在于内存

b、非静态方法能够直接访问静态成员,也能否直接访问非静态成员

c、静态方法中没有this关键字,因为我们可以通过类型,静态方法直接调用,不需要任何对象

3.构造函数、构造代码块、静态代码块的区别

a、构造函数

(1)格式:

    类名(参数1,参数2……){

    构造函数执行语句

    }

(2)调用的时机:对象建立时。

(3)作用:给对象进行初始化。

(4)要点:当一个类中没有定义构造函数的时候,系统会默认给该类加入一个空参构造,但是当开发者在类中自定义构造函数之后,系统便不会给该类加入默认的空参构造了;一个对象建立,构造函数只运行一次,一般方法可以被该对象调用多次。

b、构造代码块

(1)格式:

{

    构造代码块执行语句

}

(2)调用时机:对象一建立,优先于构造函数执行

(3)作用:给对象进行初始化

(4)要点:类不能调用构造代码块;构造代码块与构造函数的区别是:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。

c、静态代码块

(1)格式:

static{

    构造代码块执行语句

}

(2)调用时机:类的加载,只执行一次,优于主函数 

(3)作用:给类初始化

b、举例说明

/**
 * 城市实体类
 *
 * Created by uknowzxt
 */
public class City {

    //静态代码块
    static {
       System.out.println("我是静态代码块");
    }

    //构造代码块
    {
        System.out.println("我是构造代码块");
    }


    //空参构造
    public City(){
        System.out.println("我是空参构造");
    }

    //有参构造
    public City(Long id, Long provinceId, String cityName, String description) {
        this.id = id;
        this.provinceId = provinceId;
        this.cityName = cityName;
        this.description = description;
        System.out.println("我是有参构造");
    }


    public static void main(String[] args) {
        System.out.println("我是主函数");
        City city = new City(new Long("1"),new Long("1000"),"杭州市","~~");

    }


    private Long id;
    private Long provinceId;
    private String cityName;
    private String description;
}

主函数:

 public static void main(String[] args) {
        System.out.println("我是主函数");
        City city = new City(new Long("1"),new Long("1000"),"杭州市","~~");

    }

运行结果:

我是静态代码块

我是主函数

我是构造代码块

我是有参构造

Process finished with exit code 0


可见加载顺序:静态代码块>构造代码块>构造函数




猜你喜欢

转载自blog.csdn.net/uknowzxt/article/details/79753067
今日推荐