当前位置: 首页 > news >正文

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

“优秀的代码不仅仅是给机器看的,更是给人看的。”

前言

这里是分享 Java 相关内容的专刊,每日一更。

本期将为大家带来以下内容:

  1. this 关键字
  2. super 关键字
  3. 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(如 StringBuilderStream)使用这种模式:

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 中最常见的关键字之一&#xf…...

关于一些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是表单组件里面的核心知识点&#xff0c;这个指令给我们写表单业务带来了很大的方便。 元素标签上的 v-model 指令用于双向绑定数据,它是一个语法糖&#xff0c;可以用于代替 v-bind:value 和 input 例如&#xff1a;<input v-model"message" placeholder…...

【高分系列卫星简介——高分一号(GF-1)】

高分一号卫星&#xff08;GF-1&#xff09; 高分一号&#xff08;GF-1&#xff09;是中国高分辨率对地观测系统&#xff08;简称“高分专项”&#xff09;的第一颗卫星&#xff0c;具有里程碑式的意义。以下是对高分一号卫星的详细介绍&#xff1a; 一、基本信息 发射时间&…...

Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着信息技术的发展和传感器设备的广泛应用&#xff0c;时间序列数据的产生量急剧增加。无论是股市价格…...

springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)

接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上&#xff0c;基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。 springboot实战学习笔记&#xff08;5&#xff09;(用户登录接口的主逻辑)-CSDN博客文章浏览…...

二叉树的顺序存储和基本操作实现

写代码&#xff1a;定义顺序存储的二叉树&#xff08;数组实现&#xff0c;树的结点从数组下标1开始存储&#xff09; 基于上述定义&#xff0c;写一个函数 int findFather ( i ) &#xff0c;返回结点 i 的父节点编号 基于上述定义&#xff0c;写一个函数 int leftChild ( i…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...