构造方法

Posted gl0102

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造方法相关的知识,希望对你有一定的参考价值。

package cn.gl.ObjectLearn;

/**
 *     一、构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。
 * 每当类实例化-一个对象时,类都会自动调用构造方法。
 * 构造方法,就是创建类的对象过程中运行的方法,也就是对象的初始化方法。
 * 注意:
 *         在定义构造方法时,构造方法没有返回值,但这与普通没有返回值的方法不同,
 *         普通没有返回值的方法使用public void methodEx()这种形式进行定义,
 *         但构造方法并不需要使用void关键字进行修饰。
 *     二、在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,
 * 相应的成员变量也将被初始化。如果类中没有明确定义构造方法,
 * 则编译器会自动创建一个不带参数的默认构造方法。
 * 注意:
 *         如果在类中定义的构造方法都不是无参的构造方法,
 *         则编译器:不会为类设置一个默认的无参构造方法,
 *         当试图调用无参构造方法实例化一个对象时,编译器会报错。
 *         所以只有在类中没有定义任何构造方法时,
 *         编译器才会在该类中自动创建一个不带参数的构造方法。
 *  三、this可以调用类的成员变量和成员方法,事实上this还可以调用类中的构造方法
 *  四、私有构造方法
 *  构造方法同其他方法一样,也可以用private修饰,私有的构造方法无法在本类外部使用,
 *  也就导致本类无法用new实例化,这样可以控制对象的生成。
* @author 冷夜雨花未眠 E-mail:787831425@qq.com
* @version 创建时间:2019年11月9日
 */
public class ObDemo5 {
    /*1 在类中定义一个无参构造方法
     * public ObDemo5(){    
    }*/
    /*2在类中定义一个有参构造方法
     * public ObDemo5(int a){    
    }*/
    public static void main(String[] args) {
        ObDemo5 ob1=new ObDemo5();//当注释1之后,创建对象没有报错,说明这个构造方法存在即编译器自动创建的
        MyTest e=new MyTest();
        MyTest e2=new MyTest(5);
        Books book=Books.librayBorrow();//不是new出来的
    }
}
class MyTest{
    int i;
    public MyTest(){
        this(1);//使用this调用本类构造方法

        /*i=1;
        System.out.println("有"+i+"个");*///这段代码效果和上面的this(1)效果是一样的
        }
    public MyTest(int i){
        this.i=i;//使用this调用本类成员变量
        System.out.println("i是:"+i+"个");
    }
}
class Books{
    private Books(){ //单例模式
        
    }
    static public Books librayBorrow(){
        return new Books();
    }
}

输出结果:

i是:1个
i是:5个

以上是关于构造方法的主要内容,如果未能解决你的问题,请参考以下文章

无法解析片段中的 ViewModelProvider 构造?

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

将初始数据提供给片段的正确方法?

将初始数据提供给片段的正确方法?

防止 Proguard 删除片段的空构造函数