Constructor复习

package com.constructor.test;

 

public class ConstuctorTest{

    public static void main(String[] args) {

        base b= null;

        base c= null;

        //c = new base(); The constructor base() is undefined,证明不能调用 void base()!所以不是构造器

        try{

            b=new base(28);//不会调用 int base(int c)方法,因为前者不是构造器

            c=new base(20);

            b.base(5); //lol。和类名一样的方法。不是构造器。

            b.base(); //void base

            c=new base(35); //赋值失败!则仍然是之前的引用,抛出错误。

        }catch(Exception e) {

              e.printStackTrace();

        }finally{

            System.out.println(b.i);//28

            System.out.println(c.i);//20因为上面赋值失败,所以保持引用,所以是一开始的20

        }

    }

}

 

class base{

    int i = 10;

    base(int i) throws Exception { //构造器可以有异常出现!出现异常就是当前初始化失败,赋值失败。

        if(i > 30)

            throw newException(i+" is greaterthan 30");

        this.i= i;

        return; //可以return!

    }

    int base(int c) { //和类名一样的方法。

        System.out.println("lol");

        return 0;

    }

    void base(){ //貌似是Constructor的方法,但是不是!

        System.out.println("void base");

    }

}

输出结果:

lol

void base

java.lang.Exception: 35 is greater than 30

atcom.constructor.test.base.<init>(ConstuctorTest.java:30)

at com.constructor.test.ConstuctorTest.main(ConstuctorTest.java:14)

28

20

 

 

几点内容:

1. Constructor如果全部是私有的,则不能继承,也不能被实例化。。

2. Constuctor只能用private,protected, public或者空修饰。不能用static, final,transient, native之类

3. 默认Constructor的访问属性和该类的默认访问属性一致。

4. 可以允许有和类名一样的方法名。但是那个绝对不是Constructor

5. 返回值为null,构造函数永远是void类型,但是void不写出来!

6. 可以抛出异常,但是异常被抛出之后,该类会被视为初始化失败,而导致赋值失败

7. 如果要引用别的Constructor,必须卸载构造类第一行。Super();..this()

8. 写过任何构造器之后,默认构造器失效!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值