java中的构造器
构造器是什么
1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化。
2.构造器的格式: 权限修饰符 类名(无参/有参){}。
3.根据有无参数,可分为无参构造 和有参构造。
构造器的特性
1.与一般方法名不同的是,构造方法名必须和类名保持一致,并且没有返回值。
2.Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值。
3.倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错。
4.当类实例化一个对象时会自动调用构造方法。
示例代码一:无参构造
学生类
public class Student {
//权限修饰符是public,表示内部属性能被其他类访问到。若使用private,则需要set/get才能访问
public String name;
public int age;
//无参构造,编译器自带,可不写。
public Student(){
System.out.println("括号内无参数,这就是无参构造");
}
}
测试类
public class Test {
public static void main(String[] args) {
Student st = new Student();//创建对象,括号内无需赋值
//没赋值的情况下,字符类型默认值为null,数值类型默认值为0
System.out.println(st.name+" "+st.age);//null,0
//对属性进行赋值
st.name="Tom猫";
st.age=5;
System.out.println(st.name+"今年"+st.age+"岁了");
}
}
结果
括号内无参数,这就是无参构造
null 0
Tom猫今年5岁了
示例代码二:有参构造
学生类
public class Student {
//权限修饰符是public,表示内部属性能被其他类访问到。若使用private,则需要set/get才能访问
public String name;
public int age;
//无参构造最好也写上
public Student(){
}
public Student(String name,int age){
System.out.println("括号内有参数,就是有参构造");
//将形参变量的值,赋给成员变量。
this.name = name;
this.age = age;
//this.name = "吴邪" 若直接在构造方法内部赋值,则优先执行其内部的值,即吴邪会替掉Tom猫
}
}
测试类
public class Test {
public static void main(String[] args) {
//创建对象。赋值后,定义的值会传递给构造器中的形参变量。
Student st = new Student("Tom猫",5);//创建对象,须在括号内赋值,不然报错
//使用对象调用成员变量(java对象只能调用成员变量)
System.out.println(st.name+"今年 "+st.age+"岁了");
}
}
结果
括号内有参数,就是有参构造
Tom猫今年5岁了
补充
如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败。这句话该如何理解?
这句话其实有点不妥,应该这么理解:每个类至少要有一个构造函数。如果写了一个有参构造,而没有写无参构造,也是可以的。不过,当你尝试通过一个无参构造来new对象时,编译器会报错。因为找不到这个无参的构造函数。也就是说,当一个类你没有写构造函数时,编译器会自动帮你创建一个无参构造。反之,若是写了有参构造,却想通过无参构造new对象,那么就需要将此无参构造写出来。
java中,子类为什么会自动继承父类的无参构造方法?
其实这句话本身就是错误的。因为构造函数不能继承,只能被调用。 正确的说法应该是,Java中子类会自动调用父类的无参构造方法。那么,子类为什么会自动调用父类的无参构造方法呢?因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中,明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。如果我们在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。
java中的构造器的更多相关文章
- Java中的构造器与垃圾回收
构造器 在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在Java中,构造器使用和类同名的名字且没有返回值,如下 class Test{ private String name; T ...
- Java中是构造器创建对象吗?
首先,这里说明” Java中是构造器创建对象 “这句话是完全错误的. Java中构造器的作用主要是为了初始化变量的值...其实在执行构造器之前,Java对象所需要的内存空间,已经产生了... 一般可以 ...
- 一文了解 Java 中的构造器
摘要:Java 也采用了构造器,并且还提供了一个垃圾收集器(garbage collector),当不再使用内存资源的时候,垃圾收集器会自动将其释放. 本文分享自华为云社区<一文带你了解 Jav ...
- Java中初始化的相关问题
目录 局部变量的初始化 成员变量的初始化 构造器初始化 静态数据的初始化 总结 已经快半个月没写博客了,这周在看 Thinking in Java 这本书,准备将书中的第五章和第七章的内容整合一下,写 ...
- 关于Java中基类构造器的调用问题
在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...
- java之父类中的构造器是否能被子类继承?
子类默认继承父类的属性和方法,但不会继承父类的构造器,而是在子类被实例化时会默认调用父类的空构造器.子类在创建的时候会调用自己的空构造器,并在空构造器会隐式调用super(),即父类的空构造器.如果父 ...
- java 中 this 和 super 说明及在构造器中super()和this()相互调用执行顺序
this this 表示当前对象 使用上细分的话,this有 this. 和this()的使用情况 ,下面我们开始细撸 this . 使用场景一: 在成员方法中,this.变量名 指带当前对象的变量, ...
- Java中的进程和线程
Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...
- Java中的进程与线程(总结篇)
详细文档: Java中的进程与线程.rar 474KB 1/7/2017 6:21:15 PM 概述: 几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进 ...
随机推荐
- 线性表->顺序存储
文字描述: 用一组地址连续的存储单元依次存储线性表的数据元素,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构. 即是,线性表的顺序存 ...
- Delphi 2010 新增功能之: IOUtils 单元(6): TPath(结构体) 的方法与属性
以后路径相关的处理, 用 IOUtils.TPath 就很方便了. //较常用的方法: TPath.GetTempPath; {获取临时文件夹路径} TPath.Ge ...
- WinAPI 字符及字符串函数(15): CharNext、CharPrev
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- 管理npm源命令
nrm ls 查看源镜像 nrm add 自定义名称 源地址 nrm use 自定义名称
- 2019.04.16 python基础50
第五十一节 pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...
- JS 变量和函数提升 全局变量和局部变量
变量提升 1. var a = 10; function test() { a = 100; console.log(a); console.log(this.a); var a; console.l ...
- 深入理解Java虚拟机8-chap12-13-斗者5星
一.操作系统与内存 通过在处理器与内存之间添加一层访问及更新速度更快的高速缓存,可以一定程度解决处理器与内存速度的矛盾 引入新问题:缓存一致性,即每个处理器只与自己的缓存交互,如果操作的是内存中的同一 ...
- 判断是否引入jQuery,没有则引入
<script type="text/javascript"> window.jQuery || document .write("<script sr ...
- Beep函数实现硬件蜂鸣声
#include <Windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTA ...
- 微信中H5网页如何唤醒打开外部浏览器打开指定链接
最近遇到一个需求.朋友找我制作一个在微信中的聊天框,或者公众号菜单发布一条链接或者二维码.跳出微信打开一个指定的我们自己的页面, 拿到这个需求后我们团队分开去找资料研究方案,通过微信的开发文档.腾讯的 ...