Java基础—对象构造

1.重载

  有些类有多个构造器。例如,可以如下构造一个空的StringBuilder对象:

StringBuilder message = new StringBuilder();

  或者,可以指定一个初始字符串:

StringBuilder message = new StringBuilder("Hello World!");

  这种特征叫做重载(overloading)。如果多个方法(比如,StringBuilder构造器方法)有相同的名字、不同的参数,便产生了重载。编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选出相应的方法。如果编译器找不到匹配的参数,就会产生编译时错误,因为根本不存在匹配,或者没有一个比其他更好(这个过程被称为重载解析(overloading resolution))。值得注意的是,Java允许重载任何方法,而不只是构造器方法。

2.默认域初始化

  如果在构造器中没有显式的给域赋予初值,那么就会被自动的赋予为默认值:数值为0、布尔值为false、对象应用为null。然而,只有缺少程序设计经验的人才会这么做。确实,如果不明确的对域进行初始化,就会影响程序代码的可读性。就比如说上篇的Employee类,假定没有在构造器中对某些域进行初始化,就会默认的将name和sex域初始化为null,将age域初始化为0。但是这不是一个良好的编程习惯。如果此时,我们调用getName方法或者getSex方法,将会得到一个null值的引用,这应该不是我们所希望的结果。

3.无参构造器

  很多类都包含一个无参的构造函数,对象由无参构造函数创建时,其状态会设置为适当的默认值。如果编写一个类时没有编写构造器,那么系统就会提供一个无参的构造器。这个构造器将所有的实力域设置为默认值。

  注意:如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。例如Employee类只提供了一个构造方法:

package jackWe;

public class Employee {
    private String name;
    private int age;
    private String sex;

    public Employee(String name, int age, String sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public  int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void getOneHeight() {
        System.out.println("姓名:"+ this.name + ";");
        System.out.println("年龄:"+ this.age + ";");
        System.out.println("性别:"+ this.sex + ";");
        System.out.println("身高:"+ (int)(Math.random() * 200) + "cm。");
    }
}

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

Employee employee = new Employee(); // 创建将会产生错误

  将会产生错误。

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

  new  className()

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

public Employee() {
        // 默认构造器
    }

4.调用另一个构造器

  关键字this引用方法的隐式参数。然而,这个关键字还有另外一个含义。如果构造器的第一个语句如同this(...),那么,这个构造器将调用同一类中的另外一个构造器,下面给个例子:

public Employee() {
        this("Jack",18,"男");  //调用另外一个构造器
    }

5.初始化块

  前面已经说过了两种初始化数据域的方法:

  ①、构造器中设置值;

  ②、在声明中赋值。

  实际上,Java还有第三种机制,成为初始化块。在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。

  由于初始化数据域有多种途径,所以列出构造过程的所有路径可能相当混乱。下面是调用构造器的具体处理步骤:

  ①、所有数据域被初始化为默认值(0,false,null);

  ②、按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块;

  ③、如果构造器第一行调用了第二个构造器,则执行第二个构造器主体;

  ④、执行这个构造器的主体。

原文地址:https://www.cnblogs.com/JackWeTa/p/11449541.html

时间: 2024-10-04 17:43:10

Java基础—对象构造的相关文章

Java之对象构造过程

先来运行一段代码 class A { public A() { init(); } public void init() { } public static void main(String[] args) { B b = new B(); System.out.println("终于i的值为:" + b.i + ",j的值为:" + b.j); } } class B extends A { int i; int j = 999; public void init

Java中对象构造

一个类中,对象构造时的构造过程 顺序如下: 1.变量定义时给出初始值,则先获得初始值. 2.调用构造块 3.调用相应的构造函数 非final成员没有在上述任何地方赋值,则获得相应类型的默认值. 先来看一个类中,初始化时,各个构造方法的调用顺序 下面是一个例子 public class Main { public static void main(String[] args) { Base b = new Base(); System.out.println("Base中baseVal的最终值为:

java基础-对象的初始化

一 前言 本节内容将会提到方法重载,对象的初始化,对象的构造器,和this关键字的使用,以及会简要的概括一下java中对象回收机制.觉得文章不错的读者可以关注一下作者的博客和公众号(同博客名称) 二 方法重载 2.1 方法重载的定义 方法重载是指同名的方法具有不同的参数列表:不同的参数列表是指参数列表个数不同或者相同的个数的参数,但具有不同的参数类型: 代码示例: /** * @Author lsc * <p> 方法重载</p> */ public class OverLoadZ

一天一个Java基础——对象和类

1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象,可以通过其引用与其进行通信:也可以是基本类型中的一种.如果字段是对某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象向关联(使用new来实现) 4.可以把两个类放在同一个文件中,但是文件中只能有一个类是公共的.此外,公共类必须与文件同名 1.1 构造方法构造对象 构造方法是一种特殊的方

-Java基础-对象

1.创建对象(实例) new关键字 既然类是对象的模板,new 类名();就是创建一个对象的意思.New一次就创建一个对象,创建对象换个话说就是创建一遍内存.new几次就创建几个对象. 例如: //这是一个学生类 public class Student { String name; String address; int age; String sex; void dushu() { System.out.println("正在读书..."); } void lianxi() { S

JAVA基础--对象和类

一.类之间的关系 1.依赖:user-a 当一个类的方法操作另一个类的对象时,称为依赖: 2.聚合:has-a 类A对象包含类B对象: 3.继承:is-a 注:一个对象变量并没有实际包含一个对象,而是持有该对象的引用: 方法参数总结: 一个方法不能修改一个基本数据类型的参数: 一个方法可以改变一个对象参数的状态: 一个方法不能让对象参数引用到一个新的对象: 注:1)重载需要的参数列表和方法称为方法的签名. 2)Random.nextInt(int n);返回一个0~(n-1)之间的数 3)fin

java基础知识-对象和类

前言: 因为要准备Java面试,所有将java基础知识点重新复习一遍,主要笔记来源于菜鸟教程和java核心技术的书籍中,也有一些博客上的资料(这些只供我个人学习使用) Java 对象和类 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. 下图中男孩女孩为类,而具体的每个人为该类的对象: 1.Java中的对象 现在让我们深入了解什么是对象.看看周围真实的世界,会发现身边有很多对象

JAVA基础之对象的初始化

本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初始化 一共有三种方式对实例变量进行初始化: ①定义实例变量时指定初始值 ②非静态初始化块中对实例变量进行初始化 ③构造器中对实例变量进行初始化 当new对象 初始化时,①②要先于③执行.而①②的顺序则按照它们在源代码中定义的顺序来执行. 当实例变量使用了final关键字修饰时,如果是在定义该fina

2.Java基础之Runtime对象

毕向东老师Java基础学习笔记——Runtime对象 今天学习Java中的Runtime对象后,感觉这个对象对我们主要有以下几点用处. 1.使用java代码打开本地可执行文件,比如打开一个计算器. 2.打开一个程序,并用该程序打开一个支持的文件. 比如:1.打开记事本,用记事本打开*.java文件, 2.打开暴风影音播放器,用播放器打开一个本地视频. 范例代码如下: /************************************** Runtime对象: 1.该类并没有提供构造函数.