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

Android 10+开机自启动:WorkManager与前台服务组合方案详解 在Android应用开发中,后台任务执行是常见的需求,尤其是在设备启动后自动初始化应用服务。随着Android系统版本的迭代,谷歌为优化电池续航和系统流畅度,逐步收紧了后台行为限制,特别是从Android 10开始,对广播接收器的变更使得传统的BOOT_COMPLETED广播接收变得极不稳定。这要求开发者转向更现代、系统友好的后台任务调度机制。其核心原理在于利用系统提供的合规通道,在保障用户体验的前提下实现可靠的后台执行。技术价值上,现代方案如WorkManager,作为Android Jetpack组件, 阅读详情

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

前言

这里是分享 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(如 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);  // 访问父类的 name
        System.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 {
    @Override
    public 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() 用于调用父类的构造方法。

HtmlUnitDriver:轻量级无头浏览器驱动,自动化测试与数据抓取的性能利器 在自动化测试与网页数据抓取领域,Selenium WebDriver 是模拟真实浏览器交互的行业标准。其核心原理是通过驱动浏览器内核,执行JavaScript并渲染页面,从而实现对用户操作的精准模拟。这项技术的核心价值在于能够以编程方式完成功能验证、数据提取及流程自动化,广泛应用于Web应用测试、监控脚本和批量数据处理等场景。然而,基于完整浏览器内核的方案往往伴随着较高的资源开销。针对这一痛点,**HtmlUnitDriver** 提供了一个高效的解决方案。它是一个基于Java的轻量级无界面浏览器模拟器,通 阅读详情

相关推荐

骚扰电话识别与拦截实战:Android来电筛选技术全解析

通信安全日益受到关注,骚扰电话与AI外呼的泛滥让传统黑名单拦截手段逐渐失效。识别骚扰电话的关键在于多维信号分析,包括号码信誉度、呼出行为特征以及通话内容识别等核心原理。在移动开发领域,Android平台提供了CallScreeningService这一系统级接口,使开发者能够在来电响铃前完成号码筛选与自动拦截。通过本地规则与云端号码信誉库的协同,可以有效构建动态防骚扰机制。这项技术不仅适用于普通用户的来电管理,也能帮助App集成智能拦截功能,提升通信体验。本文从号码识别的基本概念出发,解析骚扰电话的判定逻辑

weixin_34320159的博客 462

java,每日练习05

interface中的方法默认为public abstract 的 ,变量默认为public static final。A.instanceof 可用来判断某个实例变量是否属于某种类的类型。B.do-while循环结束的条件是关键字while后的条件表达式成立。用来判断某个实例变量是否属于某种类的类型或其子类的类型。C.&在逻辑运算中是非短路逻辑与,在位运算中是按位与。在逻辑运算中是非短路逻辑与,在位运算中是按位与。是三目条件运算符,用于基于条件执行不同的操作。3.以下哪几个是java中的集合类型?

布说在见的博客 884

生产级机器学习服务化:稳定性、可观测性与漂移防御

机器学习模型部署不是简单暴露API,而是构建具备稳定性、可观测性与漂移防御能力的生产级服务。其核心原理在于解耦模型逻辑与运行时契约,通过分层架构(模型层/服务层/编排层)实现关注点分离;技术价值体现在保障高并发下的低延迟推理、分钟级根因定位能力,以及对数据分布偏移和概念变化的主动响应。典型应用场景包括电商实时推荐、金融风控引擎、广告点击率预测等需7×24小时可靠运行的线上AI系统。本文聚焦Triton服务化实践、Prometheus指标驱动的可观测性落地,以及基于KS检验与ADWIN算法的模型漂移防御机制。

weixin_30443075的博客 704

(尚硅谷java零基础教程)学习笔记day13-每日一考

1、什么是多态性?什么是虚拟方法调用? 对象的多态性:父类的引用指向子类的对象 Person p = new Man(); 虚拟方法调用:父类和子类定义同名同参的方法时,多态情况下,此时父类的方法是虚拟方法,编译时编译父类的方法,执行时执行指向的子类的方法。 2、一个类可以有几个直接父类?一个父类可以有多少个子类?子类能获取直接父类的父类中的结构吗?子类能否获取父类中 private 权限的属性或方法吗? 只有一个 多个 可以 可以获取,只不过不能直接调用,必须通过 get 和 set 方法,父类的私有的属

qq_42148002的博客 312

【16】linux命令/工具,systemd,文件操作,动静态库,信号,socket

apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)设置时间,联网,apt-get install vim。

持续更新ing... 6785

Agent应用实践之四十 - OpenClaw:记忆

AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent

代码让AI扣 456

Java基础知识点

1.变量:指向内存的一片空间,可以存储数据,读取数据,数据也可以被改变。2.常量:指向内存的一片空间,可以存储数据,读取数据,但是数据不可以被改变。定义:final int QWE = 10;------名字大写使用场景:数学中一些日常不变的量3.标识符和关键字:在JAVA中,用来表示类,方法,变量的名称的自定义字符,都是标识符。标识符规范JAVA标识符由字母,数字,下划线(_),和美元符($)组成。不能以数字开头,必须以字母,下划线(_),和美元符($)开头。不能使用JAVA关键字。

ql200106的博客 62

Android校园图书共享系统:离线优先的轻量级原生实践

Android原生开发是构建高响应、低依赖移动应用的基础技术路径,尤其在弱网或离线场景下,其对硬件调度精度和系统API的直接控制能力远超跨平台方案。本文围绕校园图书共享这一典型轻量级分布式应用,深入解析Scoped Storage适配、SQLite高性能本地存储、Wi-Fi Direct局域同步、NFC无感交互等关键技术原理,突出离线可用性、设备兼容性与零部署成本三大工程价值。适用于毕业设计落地、学生工具开发及边缘场景下的Android轻应用构建,为教育信息化中的真实闭环提供可复用的技术范式。

weixin_42629671的博客 254

Java习题解析

Java每日一题Java方向每日一题day02_4月13日选择题第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题编程题第一题第二题 Java方向每日一题day02_4月13日 选择题 第一题 A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明: 1. A a0=new A(); 2. A a1=new B(); 3. A a2=new C(); 问以下哪个说法是正确的?() A 只有第一行能通过编译 B 第1、2行能通过编译,但第3行编译出错 C 第1、2、

qq_43780610的博客 690

PX4 磁罗盘干扰分析

无人机上的电机电流会干扰无人机上搭载的磁罗盘,PX4官方提供了一些方式,通过分析飞行日志,判断电机是否对磁罗盘有严重影响。

Zecet的博客 3357

2025软考信息安全工程师真题

2025信息安全工程师软考真题

qq_40424393的博客 1705

Java零基础入门到项目实战:完整学习路线与开发环境搭建

Java作为面向对象编程语言的核心概念包括类、封装、继承和多态等特性,其原理基于JVM虚拟机实现跨平台运行。在软件开发领域,Java的技术价值体现在企业级应用开发、Android移动开发和大数据处理的广泛适用性。通过集合框架、异常处理等核心机制,Java能够构建稳定可靠的应用系统。在实际应用场景中,从环境搭建到项目实战的完整学习路径尤为重要,特别是对于零基础学习者而言,合理的学习路线规划和每日学习计划能够显著提升学习效率。本文提供的Java学习路线涵盖了从基础语法到框架应用的完整内容,通过学生管理系统等实战

weixin_30843605的博客 556

SpringBoot 中 @RequestMapping 及衍生注解的全面解析与实践

本文全面解析Spring Boot中@RequestMapping及其衍生注解的使用,涵盖核心功能、HTTP方法特定注解(@GetMapping/@PostMapping等)、属性详解(路径/参数/头信息等)以及路径变量处理。文章详细介绍了注解的组合使用、继承特性、版本控制策略等高级应用,并针对405/404等常见错误提供解决方案。通过学习这些注解的规范用法,开发者能够构建符合RESTful风格的API接口,提升代码可读性和可维护性。建议优先使用HTTP方法特定注解,合理规划URL结构,并注意避免路径冲突。

Java&AI小吕布的博客 2037

Java零基础到就业实战路线:6阶段拆解学习路径与避坑指南

在软件开发领域,编程语言的学习路径规划是初学者面临的核心挑战。Java作为企业级应用开发的主流语言,其知识体系庞大,从基础语法到框架应用涉及多个技术层级。理解Java的核心原理,如面向对象编程、JVM内存管理等,是构建扎实技术根基的关键。掌握这些原理不仅能提升代码质量,还能为解决复杂业务场景提供理论支撑。在工程实践中,Spring Boot框架的自动配置与约定大于配置理念,极大地简化了企业级应用的开发流程,结合MyBatis或JPA等数据访问技术,可以高效实现数据持久化。对于希望快速入行的学习者,明确每个阶

weixin_34166472的博客 493

从临床试验到互联网AB测试:边缘结构模型(MSM)如何解决‘时依性混杂’这个老大难问题

本文探讨边缘结构模型(MSM)如何解决时依性混杂问题,适用于临床试验和互联网AB测试。通过逆概率加权(IPTW)等方法,MSM能有效剥离混杂效应,准确评估长期干预效果。文章结合跨领域案例,详细解析MSM的核心原理、实施步骤及在推荐算法效果评估中的实战应用,帮助读者掌握这一先进因果推断工具。

weixin_28725949的博客 206

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 492

ZCode 3.0免费使用GLM-5.2:AI编程工具实战指南

AI编程工具通过大语言模型技术为开发者提供智能代码生成和辅助编程能力。其核心原理是基于深度学习的自然语言处理,能够理解开发需求并生成高质量的代码片段。在技术价值方面,AI编程工具显著提升了开发效率,特别是在代码补全、bug修复和项目重构等场景。以ZCode 3.0为例,该工具深度集成GLM-5.2模型,支持多Agent协作编程,从项目规划到代码实现的全流程自动化。通过每日500万Token的免费额度,开发者可以在实际项目中体验AI编程的高效性,如智能五子棋游戏的快速开发演示了从需求分析到代码生成的一站式解决

weixin_33721344的博客 545

Altium Designer操作技巧(4)——如何利用嘉立创EDA来输出3D封装到AD封装库?

本文介绍了利用嘉立创EDA和FreeCAD软件为PCB元件添加3D模型的方法。首先在嘉立创EDA中搜索元件编号并导出3D模型,然后使用FreeCAD删除3D模型中的PCB基板部分,最后将处理后的3D模型导入PCB封装库并更新到PCB设计中。文章详细讲解了每个步骤的操作流程,包括模型导出、基板删除、位置调整等关键环节,并提供了解决常见问题的方法。通过这种方法,电子工程师可以快速获得元器件的3D模型,提高PCB设计的准确性。

u012526819的博客 2580

主流App SDK技能包集成指南:从高德地图到微信开放平台实战

SDK(软件开发工具包)作为现代应用开发的核心组件,为开发者提供了标准化的API接口和功能模块。其工作原理是通过封装底层技术细节,让开发者能够快速调用第三方服务能力。在技术价值层面,SDK显著提升了开发效率,降低了技术门槛,同时确保了功能实现的稳定性和安全性。特别是在移动应用开发领域,地图导航、社交分享、支付等高频场景都依赖于成熟的SDK解决方案。随着AI编程助手的普及,基于SDK的Skill技能包进一步优化了开发体验,将最佳实践和代码模板结构化封装。以高德地图Amap SDK Skills和微信开放平台S

weixin_34167819的博客 439

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

【深度学习新浪潮】ISP芯片算法技术简介及关键技术分析

ISP(Image Signal Processor)芯片作为现代影像系统的核心组件,负责对图像传感器输出的原始信号进行后期处理。ISP的主要功能包括线性纠正、噪声去除、坏点修复、色彩校正以及白平衡调整等,这些处理步骤对于提高图像质量和视觉效果至关重要。随着科技的进步,ISP芯片不仅提升了图像的清晰度和色彩准确性,还通过高效的算法增强了拍摄体验,尤其是在低光环境下的表现。

专注:太空算力、AI infra、异构调度、大模型成本工程 1223

AGP 升级问题续集来了,不看血亏,真是骚,kotlin集合操作符

flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL ConstantValue: int 2130837504 } InnerClasses: public static final #7= #2 of #6; //id=class cn/yan/libr/R$id of class cn/yan/libr/R 反编译主模块产物中 ASM 生成的R.jar中主模块自己合并的属性成员 final 且有明确初值的R$id.class也是 17,与上面一样,所以不再给出。 可以看到,

m0_64382743的博客 488

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

20170810 - 今日技能封装 - A

需列入每日问题——题目思路回溯。 1 猜数字游戏思路是? 2 构造器,构建器是什么? 构造方法。 3 this只可以用在哪里? 类中方法里。 4 new出来的是什么? 都是对象。 5 数组属于基本类型还是引用类型? 引用类型,所以引用类型数组是引用类型。 6 基本类型数组是什么类型数据? 引用类型 7 如何创建引用类型数组? cell[...

weixin_30588729的博客 83

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

万物皆对象_Python的类与对象

点击上方“Python小白集训营”,选“星标”公众号重磅干货,第一时间送达图 |Pexels日期|2021.1.13我们在刚接触编程的时候,都了解到面向对象的这个概念,而Python的主要思想便是面向过程和面向对象,把这两个主要思想解决完毕后,才能更好地帮助我们学习Python,那我们今天就来聊聊类与对象。基础概念1)面向对象以官方的角度来阐述,面向对象是一种抽象,以分类的方式看待...

weixin_42557830的博客 199

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

跟著Qcadoo MES系统学习产品设计

Manufacturing Execution System,MES是工业4.0的核心系统,智能制造的大脑,跟踪Qcadoo MES学习产品设计001

通达的博客 2132
上一篇: 深度解析:Java 中的哈希计算与哈希碰撞优化
下一篇: 深入剖析 Java 中的 tableSizeFor 方法:通过位运算计算最小的 2 的幂
知行小栈
博客等级 码龄9年 2506粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值