Java 每日一刊(第13期):this super static

“优秀的代码不仅仅是给机器看的,更是给人看的。”
前言
这里是分享 Java 相关内容的专刊,每日一更。
本期将为大家带来以下内容:
- this 关键字
- super 关键字
- static 关键字
this 关键字
this 关键字是 Java 中最常见的关键字之一,它用于表示“当前对象”的引用。它通常用于区分实例变量和方法参数,以及在对象的方法内部引用自身。在对象的内部方法中,this 可以用来调用成员变量、方法和构造方法。
访问当前对象的成员变量
当方法的参数名称与当前类的成员变量名称相同时,this 可以用来区分它们。下面是一个经典的例子:
public class Person {private String name;public Person(String name) {this.name = name; // 使用 this 关键字区分成员变量和参数}public void display() {System.out.println("Name: " + this.name); // this 引用当前对象的 name 变量}
}
在上面的代码中,this.name 表示当前对象的 name 成员变量,而 name 表示方法参数。通过 this 关键字,我们可以清楚地表明要访问的是当前对象的成员变量。
调用当前类的构造方法
this() 还可以在构造方法中调用类的其他构造方法,避免重复代码。这种用法也称为 构造器链。在一个类中可以通过 this() 互相调用多个构造器:
public class Person {private String name;private int age;public Person(String name) {this(name, 0); // 调用另一个构造方法}public Person(String name, int age) {this.name = name;this.age = age;}public void display() {System.out.println("Name: " + name + ", Age: " + age);}
}
在这个例子中,this(name, 0) 调用了带两个参数的构造方法,这不仅减少了重复代码,还增强了代码的可维护性。
返回当前对象
this 关键字还可以用来返回当前对象,这在需要链式调用时非常有用。例如,很多流式 API(如 StringBuilder 或 Stream)使用这种模式:
public class Person {private String name;public Person setName(String name) {this.name = name;return this; // 返回当前对象,支持链式调用}public void display() {System.out.println("Name: " + name);}public static void main(String[] args) {new Person().setName("John").display(); // 链式调用}
}
通过 this 返回当前对象,可以使方法链式调用,代码更加简洁、优雅。
super 关键字
super 关键字用于引用父类中的成员变量、方法以及构造方法。在子类和父类有继承关系时,super 可以帮助子类访问父类中的实现。它主要用于以下三种场景:
调用父类的构造方法
当子类继承父类时,如果父类有参数化的构造方法,子类通常需要通过 super() 来显式调用父类的构造方法。调用父类构造方法必须是子类构造方法的 第一行,否则编译器会报错。
public class Person {protected String name;public Person(String name) {this.name = name;}
}public class Student extends Person {private int grade;public Student(String name, int grade) {super(name); // 显式调用父类的构造方法this.grade = grade;}public void display() {System.out.println("Name: " + name + ", Grade: " + grade);}
}
在这个例子中,Student 类通过 super(name) 调用了父类 Person 的构造方法,确保在子类中初始化父类的成员变量。
访问父类的成员变量
当子类中的成员变量与父类中的成员变量同名时,可以使用 super 来明确访问父类的成员变量:
public class Person {protected String name = "Parent";
}public class Student extends Person {protected String name = "Child";public void printName() {System.out.println(super.name); // 访问父类的 nameSystem.out.println(this.name); // 访问子类的 name}
}
输出结果为:
Parent
Child
在这个例子中,通过 super.name 明确地访问了父类中的 name 成员变量。
调用父类的方法
如果子类重写了父类的方法,而你在子类中仍然想调用父类的方法,可以通过 super 关键字实现:
public class Person {public void display() {System.out.println("Person display");}
}public class Student extends Person {@Overridepublic void display() {super.display(); // 调用父类的 display() 方法System.out.println("Student display");}
}
输出结果为:
Person display
Student display
通过 super.display(),我们可以在子类中调用父类的 display 方法,保留父类方法的行为,同时扩展子类的功能。
static 关键字
static 关键字用于修饰类的静态成员(变量或方法),这些成员属于类本身,而不是类的实例。它主要用于实现共享数据或工具类的通用方法。
静态变量
静态变量(也称为类变量)是类的所有实例共享的变量。无论创建了多少个对象,静态变量只有一份内存空间,所有实例都可以访问和修改它:
public class Counter {public static int count = 0; // 静态变量public Counter() {count++; // 每创建一个实例,count 增加 1}public static void displayCount() {System.out.println("Count: " + count); // 静态方法可以访问静态变量}
}public class Main {public static void main(String[] args) {new Counter();new Counter();Counter.displayCount(); // 输出 2}
}
静态变量 count 是类的所有实例共享的,当创建了多个对象时,它们会共同维护同一个 count 变量。
静态方法
静态方法可以直接通过类名调用,而不需要实例化对象。静态方法通常用于实现不依赖实例的工具类方法或逻辑:
public class MathUtil {public static int add(int a, int b) {return a + b;}
}public class Main {public static void main(String[] args) {int result = MathUtil.add(5, 10); // 通过类名直接调用静态方法System.out.println(result); // 输出 15}
}
静态方法只能访问静态变量或其他静态方法,不能直接访问非静态的成员变量或方法,因为它们不依赖于具体的实例。
静态代码块
静态代码块在类加载时执行一次,通常用于初始化类的静态成员或执行一些只需进行一次的操作:
public class Example {static {System.out.println("Static block executed");}public static void main(String[] args) {Example ex = new Example(); // 静态代码块在类加载时执行}
}
在上面的代码中,无论创建多少个 Example 对象,静态代码块只会在类加载时执行一次。
本期小知识
在 Java 构造方法中,this() 和 super() 是互斥的,不能在同一个构造方法中同时使用。它们都必须出现在构造方法的第一行,this() 用于调用当前类的其他构造方法,而 super() 用于调用父类的构造方法。
相关文章:
Java 每日一刊(第13期):this super static
“优秀的代码不仅仅是给机器看的,更是给人看的。” 前言 这里是分享 Java 相关内容的专刊,每日一更。 本期将为大家带来以下内容: this 关键字super 关键字static 关键字 this 关键字 this 关键字是 Java 中最常见的关键字之一…...
关于一些Spring的配置的作用
文章目录 spring.profiles.activejmx.default-domainmain.allow-bean-definition-overridingmain.allow-circular-referencescloud.nacoscloud.nacos.configcloud.nacos.shared-configsmvc.pathmatch.matching-strategy spring:profiles:active: ${config.profile}# include…...
利用Python与Ansible实现高效网络配置管理
利用Python与Ansible实现高效网络配置管理 在当今复杂多变的网络环境中,自动化配置管理工具成为了IT运维团队不可或缺的工具。Python以其强大的编程能力和丰富的库支持,结合Ansible这一流行的自动化运维工具,能够极大地提升网络配置管理的效…...
JDBC技术在不同数据库系统中的兼容性及Java数据库交互技术概览
目录 1. JDBC技术在不同数据库系统中的兼容性 2. 除了JDBC,还有哪些技术可以实现Java与数据库的交互? 3. 结论 在Java应用程序中,数据库交互是一个核心功能。Java Database Connectivity (JDBC) 是实现这一功能的标准技术之一。然而&#…...
双击热备 Electron网页客户端
安装流程: 1.下载node.js安装包进行安装 2.点击Next; 3.勾选,点击Next; 4.选择安装目录 5.选择Online 模式 6.下一步执行安装 。 7.运行cmd,执行命令 path 和 node --version,查看配置路径和版本 8.Goland安装插件node.js 9.配置运行…...
数据中台系统产品原型RP原型Axure高保真交互原型 源文件分享
在数字化时代,数据已经成为企业最宝贵的资产之一。为了更好地管理和利用这些数据,这边为大家整理了一套数据中台Axure高保真原型。这套原型致力于为企业提供全方位的数据服务,助力企业实现数据驱动的创新发展。 下载及预览地址:h…...
论文阅读笔记:Sapiens: Foundation for Human Vision Models
Sapiens: Foundation for Human Vision Models 1 背景1.1 问题1.2 目标 2 方法3 创新点4 模块4.1 Humans-300M数据集4.2 预训练4.3 2D位姿估计4.4 身体部位分割4.5 深度估计4.6 表面法线估计 5 实验5.1 实现细节5.2 2D位姿估计5.3 身体部位分割5.4 深度估计5.5 表面法线估计5.6…...
【学术会议:中国厦门,为全球的计算机科学与管理科技研究者提供一个国际交流平台】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)
您的学术研究值得被更多人看到! 在这里,我为您提供精准的会议推荐,包括计算机科学、管理科技、信息系统、人工智能、供应链管理等领域的国际会议。高效的稿件录用流程和优质的检索服务将确保您的研究成果迅速传播。关注我,寻找与…...
RK3588/RK3588s运行yolov8达到27ms
前言 Hello,小伙伴们~~我最近做了一个比较有意思的东西,想起来也好久没有写博客了,就记录一下吧。希望和大家一起学习,一起进步! 我简单介绍一下我最近做的这个东西的经过哈~上个月在B站上看到了一个博主发了一条视频关…...
2024年华为杯中国研究生数学建模竞赛E题(高速公路应急车道紧急启用模型)思路
1. 统计四个观测点的交通流参数随时间的变化规律 思路: 从视频数据中提取流量、密度、速度等交通流参数。进行时间序列统计,分析其随时间的变化规律。通过数据可视化,帮助分析流量波动、车速变化等现象。主要步骤: 读取视频数据:利用提供的Python程序读取每个视频文件。提…...
np.random.seed设完又想用随机seed怎么办
Python 设完np random seed 之后又想不设这个seed让它random,怎么办? 在Python的NumPy库中,一旦你设置了随机种子(通过numpy.random.seed()函数),所有后续的随机操作都会基于这个种子生成可预测的结果。如…...
[数据结构]动态顺序表的实现与应用
文章目录 一、引言二、动态顺序表的基本概念三、动态顺序表的实现1、结构体定义2、初始化3、销毁4、扩容5、缩容5、打印6、增删查改 四、分析动态顺序表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引言 想象一下,你有一个箱子(静态顺序…...
Invalid Private Key, Not a valid string or uint8Array
报这种错误:一般在生成private key前面添加"0x"即可解决。我就是在私钥前面添加了"0x"解决了。 在学习web3时,使用助词生成的私钥,然后由私钥导出keystore就报错: ERROR Invalid Private Key, Not a valid …...
【Text2SQL】PET-SQL:在Spider基准测试中取得了SOTA
解读:PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency 这篇论文介绍了一个名为 PET-SQL 的文本到 SQL(Text-to-SQL)框架,旨在通过增强提示(prompt)和利用不同大型语言…...
python-3n+1数链/233
一:3n1数链题目描述 在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下&#…...
vue2基础系列教程之v-model及面试高频问题
v-model是表单组件里面的核心知识点,这个指令给我们写表单业务带来了很大的方便。 元素标签上的 v-model 指令用于双向绑定数据,它是一个语法糖,可以用于代替 v-bind:value 和 input 例如:<input v-model"message" placeholder…...
【高分系列卫星简介——高分一号(GF-1)】
高分一号卫星(GF-1) 高分一号(GF-1)是中国高分辨率对地观测系统(简称“高分专项”)的第一颗卫星,具有里程碑式的意义。以下是对高分一号卫星的详细介绍: 一、基本信息 发射时间&…...
Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着信息技术的发展和传感器设备的广泛应用,时间序列数据的产生量急剧增加。无论是股市价格…...
springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)
接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。 springboot实战学习笔记(5)(用户登录接口的主逻辑)-CSDN博客文章浏览…...
二叉树的顺序存储和基本操作实现
写代码:定义顺序存储的二叉树(数组实现,树的结点从数组下标1开始存储) 基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 基于上述定义,写一个函数 int leftChild ( i…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
