当前位置: 首页 > 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…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...