Java基础:构造器小结
2022/3/8 17:15:01
本文主要是介绍Java基础:构造器小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1 构造器是怎么产生的
- 2 定义
- 3 命名注意事项
- 4 分类
- 5 this和super关键字在构造器中的用法注意
- 6 其他
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 命名注意事项
- 构造器的名称,相比于其他方法而言,比较特殊
- 名称和类名相同
- 首字母大写(类名首字母也是大写;另外,其他方法首字母都是小写)
- 不用写返回值类型(其他方法有返回值,则写上返回值类型;没有,则也需要写void关键字)
- 修饰符却可以使用public,protected 或 private等。
4 分类
- 无参构造器(该构造器没有参数)
- 有参构造器(该构造器有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; } }
其中:
-
this(id, age);
是调用 同一个类中的另一个构造器public Dog(String id, Integer age)
,注意:必须写在第一行,否则报编译时错误; -
super(id);
是调用 Dog的父类 Animal 中的构造器public Animal(String id)
,注意:必须写在第一行,否则报编译时错误。
6 其他
- 当类中没有构造器时,程序会自动帮我们创建一个无参构造器;反之,如果类中有人为创建的构造器,不管是否有参数,程序都不会帮我们创建构造器了。
- 类中允许有多个构造器。
这篇关于Java基础:构造器小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!
- 2024-05-082024年,行业变动下的程序员应该首先学习哪种编程语言?