zoukankan      html  css  js  c++  java
  • 无参数的构造器

    如果在构造器中没有显式地给域赋予初值,那么就会被自动赋为默认值:数值为0,布尔值为false,对象引用为null.

    这是域与局部变量的主要不同点.必须明确地初始化方法中的局部变量.但是,如果没有初始化类中的域,将会被自动初始化为默认值.

    class Employee{
        private String name;
        private double salary;
    }   

    例如,假定Employee类没有在构造器中进行初始化,就会默认地将salary域初始化为0,将name域初始化为null.

    但是,这并不是一种良好的编程习惯.如果此时调用getName方法,则会得到一个null引用,这不是我们所希望看到的结果.

    很多类都包含一个无参数的构造函数,对象由无参数构造函数创建时,状态会设置为适当的默认值.例如,下面是Employee类的无参数构造函数

    public Employee(){
        name = "";
        salary = 0;
    }

    如果在编写一个类时没有编写默认的构造器,那么系统就会提供一个默认无参数构造器.这个构造器将所有实例域设置为默认值.于是,实例域中的数值型数据设置为0,布尔型数据设置为false,所有对象变量设置为null.

    如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构建对象时如果没有提供参数就会被视为不合法.例如为Employee类提供一个简单的构造器,不提供无参数构造器.

    Employee(String n,double s){
        name = n;
        salary = s;
    }

    对于这个类,构造默认的雇员属于不合法,也就是调用

    Employee e = new Employee();

    将会产生错误.

    请记住,仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器.如果在编写类的时候,给出了一个构造器,哪怕是很简单的,要是想让这个类的用户能够采用如下方式构造实例:

    ClassName c = new ClassName();

    就必须提供一个默认的构造器(即不带参数的构造器).如果希望所有域被赋予默认值,可以采用下列方式

    public ClassName(){
    
    }
  • 相关阅读:
    webpack-dev-server 源码
    2021前端会有什么新的变化
    父类 超类 基类 子类 派生类
    Java的权限修饰符(public,private,protected,默认friendly)
    class修饰符public、private、protected、static、abstract
    hash和签名 、证书
    前端加密解密crypto
    appid app_key app_secret
    sdk开发 、sdk与插件的区别
    CF76C
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/13705838.html
Copyright © 2011-2022 走看看