Android基础 -- 自定义View中构造代码块的使用

自定义View想必大家都不陌生,会想自定义View的第一步,就是给它添加不同的构造方法,然后这里可能会有不同的写法,下面是两种常见的写法。

第一种是在每个构造方法里都加上初始化方法

public CustomView(Context context) {
        super(context);
        init();
    }

    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
}

第二种是链式调用当前构造方法

public CustomView(Context context) {
        this(context, null);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

这样写都是对的,但是有点麻烦,每次继承了View之后都会多写一些东西,小伙伴们不妨试试构造代码块

public class CustomView extends View {

    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    {
        init();
    }
}

这样会比上面“偷懒”一些,关于构造代码块,下面简单的介绍一下。

提起构造代码块,就不得不提一下静态代码块

首先来看静态代码块

public class Block {
        static{
            System.out.println("静态代码块");
        }
    }

静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。(关于Java类的加载机制,不熟悉的小伙伴可以查看这篇文章:https://blog.csdn.net/sinat_33150417/article/details/90783312)

一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。

需要注意的是静态代码块不能存在任何方法体中,也不能访问普通变量。

 

构造代码块的使用方式就是自定义View里的使用方式,构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行,在静态代码块之后。

你可能感兴趣的:(你好,Android)