Java类的默认构造函数
什么情况下存在默认构造函数
说明
如果一个Java类没有显式包含构造函数的声明,那么隐含着有一个默认构造函数。
示例
定义一个类B,没有显式声明构造函数,所以存在一个默认构造函数:
package com.thb;public class B {public void method() {}
}
定义一个类C,显式声明了一个带参数的构造函数,所以就不存在默认构造函数:
package com.thb;public class C {private String msg;public C(String msg) {this.msg = msg;}public void method() {}
}
定义一个类Test1 ,调用类B和类C:
package com.thb;public class Test1 {public static void main(String[] args) {// 类B没有声明构造函数,所以会隐含着有一个默认构造函数B b = new B();b.method();// 如果去掉下面代码前面的注释就会编译出错,因为类C中已经明确声明了一个带参数的构造// 函数,就不会有默认构造函数了// C c = new C(); C c = new C("hello"); // 调用类C声明的构造函数c.method(); }
默认构造函数的形式
一个顶层类、成员类、局部类的默认构造函数形式如下:
默认构造函数的访问修饰符
说明
默认构造函数的访问修饰符和类的访问修饰符相同;如果类没有显式声明访问修饰符,那么默认构造函数是包的访问修饰符。
示例—类用public修饰
定一个类B,用public修饰,没有声明构造函数,所以存在一个默认构造函数:
package com.thb;public class B {public void method() {}
}
打开类B编译后的class文件,可以发现,因为类B的访问控制修饰符是public,所以默认构造函数的访问控制修饰符也是public:
// Compiled from B.java (version 18 : 62.0, super bit)
public class com.thb.B {// Method descriptor #6 ()V// Stack: 1, Locals: 1public B();0 aload_0 [this]1 invokespecial java.lang.Object() [8]4 returnLine numbers:[pc: 0, line: 3]Local variable table:[pc: 0, pc: 5] local: this index: 0 type: com.thb.B// Method descriptor #6 ()V// Stack: 0, Locals: 1public void method();0 returnLine numbers:[pc: 0, line: 5]Local variable table:[pc: 0, pc: 1] local: this index: 0 type: com.thb.B
}
示例—类没有显式声明访问控制修饰符
定义类D,没有显式声明访问控制修饰符,即表示是包访问控制:
package com.thb;class D {}
打开类D编译后的class文件,可以发现,默认构造函数也没有注明访问控制修饰符,即是包访问控制:
// Compiled from D.java (version 18 : 62.0, super bit)
class com.thb.D {// Method descriptor #6 ()V// Stack: 1, Locals: 1D();0 aload_0 [this]1 invokespecial java.lang.Object() [8]4 returnLine numbers:[pc: 0, line: 3]Local variable table:[pc: 0, pc: 5] local: this index: 0 type: com.thb.D
}
默认构造函数没有形式参数(非private的内部成员类除外)
说明
默认构造函数没有形式参数,非private的内部成员类除外。
非private的内部成员类的默认构造函数有一个形式参数,这个形式参数类型是包裹内部成员类的外部类。
示例:非private的内部成员类的默认构造函数
定义一个类E,在其内部定义一个非private的成员类AnotherInE :
package com.thb;public class E {class AnotherInE {}
}
打开类E 编译后的class文件,可以发现它有一个没有形式参数的默认构造函数:
// Compiled from E.java (version 18 : 62.0, super bit)
public class com.thb.E {// Method descriptor #6 ()V// Stack: 1, Locals: 1public E();0 aload_0 [this]1 invokespecial java.lang.Object() [8]4 returnLine numbers:[pc: 0, line: 3]Local variable table:[pc: 0, pc: 5] local: this index: 0 type: com.thb.EInner classes:[inner class info: #17 com/thb/E$AnotherInE, outer class info: #1 com/thb/Einner name: #19 AnotherInE, accessflags: 0 default]Nest Members:#17 com/thb/E$AnotherInE
}
打开内部类AnotherInE 编译后的class文件,可以发现内部成员类的默认构造函数有一个形式参数,类型是包裹它的类E:
// Compiled from E.java (version 18 : 62.0, super bit)
class com.thb.E$AnotherInE {// Field descriptor #6 Lcom/thb/E;final synthetic com.thb.E this$0;// Method descriptor #8 (Lcom/thb/E;)V// Stack: 2, Locals: 2E$AnotherInE(com.thb.E arg0);0 aload_0 [this]1 aload_1 [arg0]2 putfield com.thb.E$AnotherInE.this$0 : com.thb.E [10]5 aload_0 [this]6 invokespecial java.lang.Object() [12]9 returnLine numbers:[pc: 0, line: 5]Local variable table:[pc: 0, pc: 10] local: this index: 0 type: com.thb.E.AnotherInEInner classes:[inner class info: #1 com/thb/E$AnotherInE, outer class info: #22 com/thb/Einner name: #24 AnotherInE, accessflags: 0 default]Nest Host: #22 com/thb/E
}
默认构造函数没有throws 子句
默认构造函数体的内容
说明
如果声明的是基本类Object,那么默认构造函数体是空的。如果声明的是其它的类,在默认构造函数体内调用父类的没有形式参数的构造函数。
示例----在子类的默认构造函数体内调用父类的没有形式参数的构造函数
定义类B:
package com.thb;public class B {public void method() {}
}
定义B的子类BB:
package com.thb;public class BB extends B {}
打开类BB编译后的class文件,可以发现它的默认构造函数体内调用父类B的没有形式参数的构造函数:
// Compiled from BB.java (version 18 : 62.0, super bit)
public class com.thb.BB extends com.thb.B {// Method descriptor #6 ()V// Stack: 1, Locals: 1public BB();0 aload_0 [this]1 invokespecial com.thb.B() [8]4 returnLine numbers:[pc: 0, line: 3]Local variable table:[pc: 0, pc: 5] local: this index: 0 type: com.thb.BB
}
编译出错示例—子类没有显式定义造函数,但父类没有这样一个构造函数:无形式参数并且无throws 子句
定义一个类B,显式定义了一个带形式参数的构造函数,但没有定义无形式参数且没有throws 子句的构造函数:
package com.thb;public class B {private String name;public B(String name) {this.name = name;}public void method() {}
}
定义类B的子类BB,BB中没有显式定义构造函数,编译出错:


相关文章:
Java类的默认构造函数
什么情况下存在默认构造函数 说明 如果一个Java类没有显式包含构造函数的声明,那么隐含着有一个默认构造函数。 示例 定义一个类B,没有显式声明构造函数,所以存在一个默认构造函数: package com.thb;public class B {public …...
华为openGauss数据库入门 - gsql用法
目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…...
The Sandbox 重新上线,带来全新体验!
在经历了一个充满史诗般新回忆的全力开局后,我们短暂休息了片刻,为玩家准备了全新的、惊心动魄的游戏活动。 我们已经完成了功能的微调,准备将您的游戏体验提升到一个全新高度! 想知道我们正在做什么吗?现在还无法公开…...
动态内存管理面试题
动态内存管理面试题 文章目录 动态内存管理面试题一、第一题此代码存在的问题运行结果分析原因修改 二、第二题此代码存在的问题运行结果分析原因修改 一、第一题 代码如下(示例): #include<stdio.h> #include<string.h> #incl…...
树莓派外设开发编程
目录 一、树莓派的接口:驱动 二、wiringPi 库 1.在使用wiringPi库的时候,需要包含头文件 2.wiringPi库API 一、树莓派的接口:驱动 IO口:input output 对于主控来说 Input :人体、烟雾、振动 output: 继电…...
Java从入门到精通(一)
Java从入门到精通(一) 前言 温故而知新,闲着没事干,准备将Java编程语言的知识点从头梳理一遍,整理成笔记,逐篇发布。 部分图片素材来源与B站“黑马程序员”的课程。 一 Java背景 Java是1995年 由Sun公司…...
Electron从构建到打包程exe应用
Electron从构建到打包程exe应用 Electron文档搭建网页装载到 BrowserWindow中定义全局对象进程之间通信渲染器进程到主进程(单向)渲染器进程到主进程(双向)主进程到渲染器进程 打开调试器打包应用程序对代码进行签名 Electron文档…...
3分钟学会设计模式 -- 单例模式
►单例模式 ►使用场景 在编写软件时,对于某些类来说,只有一个实例很重要。例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统中可以多次查询数据库,但是只需要一个连接&#x…...
《面试1v1》Kafka与传统消息系统区别
🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结…...
【算法第十三天7.27】平衡二叉树,二叉树所有路径,左叶子之和
链接力扣110-平衡二叉树 思路 1、左右子树高度差不超过1 2、左子树、右子树均为平衡二叉树 3、需要获得树高,如果不是平衡的就返回-1;如果是平衡,就返回对应的高 class Solution {public boolean isBalanced(TreeNode root) {return getH…...
arm架构cloudstack的agent报错No more available PCI slots如何解决
当ARM架构的CloudStack代理报错"No more available PCI slots"时,这通常表示ARM实例已用尽可用的PCI插槽。PCI插槽用于连接网络接口卡(NIC)和其他扩展设备到虚拟机实例。 解决此问题的方法可以考虑以下几点: 调整实例的…...
day43-Feedback Ui Design(反馈ui设计)
50 天学习 50 个项目 - HTMLCSS and JavaScript day43-Feedback Ui Design(反馈ui设计) 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&q…...
TypeScript基础篇 - TS日常类型 上篇
目录 TS的常见用法介绍 example01.ts 逃避类型检查:any 思考一下~:不知道类型 类型标注 函数(参数和返回值) 匿名函数 TS如何知道匿名函数的类型? TS是一种标注式语言,不侵入JS的设计 TS的常见用法…...
量化交易——python数据分析及可视化
该项目分为两个部分:一是数据计算,二是可视化,三是MACD策略 一、计算MACD 1、数据部分 数据来源:tushare 数据字段包含:日期,开盘价,收盘价,最低价,最高价,…...
微服务网关
1.网关是如何演化来的,在微服务中有什么作用? 随着单体架构转化为微服务架构的时候,由一个后台服务由一个单一的服务变成了多个微服务,前端应用需要调用多个服务的接口,为了解决这个问题,网关就产生了。网…...
【打卡】Datawhale暑期实训ML赛事
文章目录 赛题描述任务要求数据集介绍评估指标 赛题分析基于LightGBM模型Baseline详解改进baseline早停法添加特征 赛题描述 赛事地址:科大讯飞锂离子电池生产参数调控及生产温度预测挑战赛 任务要求 初赛任务:初赛提供了电炉17个温区的实际生产数据&…...
【python脚本】python实现:目标检测裁剪图片样本,根据类标签文件进行裁剪保存
python实现:目标检测裁剪图片样本,根据类标签文件进行裁剪保存 我在进行目标检测时候,比如红绿灯检测,目标区域很小,样本杂乱。 想要筛选错误样本的话,很困难。可以把目标区域裁剪出来。人大脑处理对于这…...
Mac 终端美化显示
Linux 也可安装 Zsh 后使用此套配置。 1. 安装 Oh My Zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"2. 更换主题,修改文件:~/.zshrc,原内容: ZSH_THEME&quo…...
信息安全:密码学基本理论.
信息安全:密码学基本理论. 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学. 目录…...
【linux升级ssh】 利用rpmbuild工具对ssh打包为rpm包进场安装升级
制作rpm包 rpmbuild命令用于创建软件的二进制包和源代码包。 官方文档:rpm.org - RPM Reference Manual rpmbuild 中文手册:rpmbuild 中文手册 [金步国] 使用rpmbuild将tar包打成rpm包 RPM打包使用的是rpmbuild命令,这个命令来自rpm-buil…...
如何在个人电脑上搭建专属的图片搜索引擎:ImageSearch终极指南
如何在个人电脑上搭建专属的图片搜索引擎:ImageSearch终极指南 【免费下载链接】ImageSearch 基于.NET8的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享 项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch 你是否曾经因为找不到某…...
AI模型版本控制:Git for ML最佳实践
当软件测试遇上AI模型迭代对于软件测试从业者而言,版本控制是保障软件质量、实现可追溯性的基石。然而,当测试对象从传统的功能模块转变为动态演进的AI模型时,版本管理的复杂性陡然增加。一个推荐模型本周表现优异,下周却因数据漂…...
Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法
Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否曾在观看高清动画时遇到画面卡顿&…...
Obsidian表格处理革新:Excel插件的无缝集成方案
Obsidian表格处理革新:Excel插件的无缝集成方案 【免费下载链接】obsidian-excel 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-excel 在知识管理的日常工作中,你是否经常遇到这样的困境:在Obsidian中记录项目数据时&#…...
iOS内购避坑指南:从沙盒测试到正式上线的完整流程(附常见错误解决方案)
iOS内购全流程实战:从沙盒测试到生产环境的避坑手册 当你第一次集成iOS内购(IAP)时,是否遇到过这些场景?用户付款后商品迟迟未到账、沙盒测试时收据验证总是失败、审核阶段一切正常但上线后出现大量丢单...这些问题往往…...
MTK手机屏显干扰全解析:亮灭屏、射频干扰与TP失灵,我是如何用PLL_CLOCK和Porch参数解决的
MTK手机屏显干扰全解析:亮灭屏、射频干扰与TP失灵实战解决方案 引言:当屏幕开始"跳舞"——移动设备显示异常背后的复杂世界 那块6.5英寸的OLED屏幕又一次在通话过程中突然闪烁起来,像被无形的幽灵操控着。作为MTK平台驱动开发工程师…...
Muzei故障排除大全:20个常见问题及其解决方案的完整列表
Muzei故障排除大全:20个常见问题及其解决方案的完整列表 【免费下载链接】muzei Muzei Live Wallpaper for Android 项目地址: https://gitcode.com/gh_mirrors/mu/muzei Muzei是一款优秀的Android动态壁纸应用,它能为您的手机主屏幕带来每日更新…...
Unity 6升级后频繁闪退?别慌,这8个D3D11崩溃的修复方法亲测有效
Unity 6升级后D3D11崩溃全攻略:从快速修复到深度优化 刚升级到Unity 6的开发者们,是否正被突如其来的编辑器崩溃搞得焦头烂额?那些令人抓狂的"D3D11设备丢失"弹窗,不仅打断工作流,还可能让宝贵项目进度陷入停…...
5个关键步骤:OpenCore Legacy Patcher旧Mac设备系统升级全攻略
5个关键步骤:OpenCore Legacy Patcher旧Mac设备系统升级全攻略 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果公司对旧款Mac设备的系统支…...
Qwen2.5-VL-7B-Instruct本地部署指南:ClawdBot实现
Qwen2.5-VL-7B-Instruct本地部署指南:ClawdBot实现 1. 引言 想不想在本地电脑上搭建一个能看懂图片、理解视频的AI助手?今天咱们就来聊聊怎么把Qwen2.5-VL-7B-Instruct这个强大的视觉语言模型部署到本地环境,并且集成到ClawdBot中。 这个模…...
