ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础:构造器小结

2022-03-08 15:01:07  阅读:198  来源: 互联网

标签:初始化 Java String Dog 构造 id 小结 public


目录

1 构造器是怎么产生的

需求:对象的初始化。
实现:
C语言中,基本数据类型,只需要声明,不需要初始化,不过仅仅声明后,其值是不确定的,是分配给该变量的内存块区域中的原本的值,该值没有任何意义,只能保证程序运行不报错;而结构类型,也只需要声明,不需要初始化,其内部成员的值也是不确定的。这样的话,如果不显式赋值,则程序会产生意外的结果,也就是会出错。
而Java中,基本数据类型和引用数据类型(对象类型),只声明,不初始化(给其显式地赋值),并且你还想使用该值进行运算,则会报一个编译时错误,提示你该对象没有初始化。
但是如何初始化,而且是优雅地初始化。
基本数据类型,没啥好讨论的,直接 int i = 1; 完事。咱们讨论类对象这种类型。
首先,考虑调用一个方法来对某个对象进行初始化,包括给该对象的属性赋值,我们可以调用一个方法,比如initialize(),但有2个问题:1. 如何保证不和类中的其他成员变量、成员方法名称重复;2. 编译器如何优雅快速地确定要调用哪个方法,比如我们每次起床都要刷牙洗脸,每次吃饭都用碗筷,不需要动脑筋思考。
所以最终Java设计者参考和使用了C++的方案,使用类名作为构造器的名字。
由于类名首字母是大写,而类中的成员变量和成员方法,首字母都是小写,就保证了构造器不会和类中的其他变量、方法重名。
比如下面这样:

class Dog {}

...
// 初始化Dog类对象。其中,'new Dog()' 就是调用构造器初始化 'dog' 对象
Dog dog = new Dog();
...

2 定义

在创建对象时被自动调用的特殊方法。

注意:在java中,对象基本上最终都要调用构造器来创建,但也有特殊情况。

3 命名注意事项

  1. 构造器的名称,相比于其他方法而言,比较特殊
    1. 名称和类名相同
    2. 首字母大写(类名首字母也是大写;另外,其他方法首字母都是小写)
    3. 不用写返回值类型(其他方法有返回值,则写上返回值类型;没有,则也需要写void关键字)
    4. 修饰符却可以使用public,protected 或 private等。

4 分类

  1. 无参构造器(该构造器没有参数)
  2. 有参构造器(该构造器有1个或多个参数)

5 this和super关键字在构造器中的用法注意

先举个例子:


public class Animal {
    private String id;

    public Animal() {
    }

    public Animal(String id) {
        this.id = id;
    }
}

public class Dog extends Animal {
    String name;
    Integer age;

    public Dog(String id, Integer age) {
        super(id);
        this.age = age;
    }

    public Dog(String id, String name, Integer age) {
        this(id, age);
        this.name = name;
    }
}

其中:

  1. this(id, age); 是调用 同一个类中的另一个构造器 public Dog(String id, Integer age) ,注意:必须写在第一行,否则报编译时错误;

  2. super(id);是调用 Dog的父类 Animal 中的构造器 public Animal(String id) ,注意:必须写在第一行,否则报编译时错误。

6 其他

  1. 当类中没有构造器时,程序会自动帮我们创建一个无参构造器;反之,如果类中有人为创建的构造器,不管是否有参数,程序都不会帮我们创建构造器了。
  2. 类中允许有多个构造器。

标签:初始化,Java,String,Dog,构造,id,小结,public
来源: https://www.cnblogs.com/mediocreWorld/p/15980442.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有