[Java基础]面向对象-关键字分析:this,static,final,super
系列文章目录
【Java基础】Java总览_小王师傅66的博客-CSDN博客
[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客
[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客
[Java基础]面向对象_小王师傅66的博客-CSDN博客
[Java基础]面向对象-内存解析_小王师傅66的博客-CSDN博客
Java字节码分析快速入门/字节码执行分析(一)_java 字节码入门_小王师傅66的博客-CSDN博客
JVM-运行时数据区_小王师傅66的博客-CSDN博客
目录
系列文章目录
前言
一、this
是什么?
举个例子
二、static
是什么
举个例子
三、final
四、super
总结
前言
在前面的文章中,我们讲过Java关键字是电脑提前定义好的,有特殊意义的标识符。Java关键字对编译器有特殊意义,用来表示一种数据类型,或程序的结构。关键字不能用来做为对象,类,方法,包,参数的名称。在这篇文章中,我们将介绍Java类中常用的关键字的使用:this,static,final,super
一、this
是什么?
1、在类的方法或属性中使用this关键字,代表使用该方法或属性所属实例对象的引用;
2、当必须指出当前使用方法的对象时,要使用this;
3、有时使用this可以区分成员变量和方法参数重名的情况;
4、this可以看做一个变量,它的值是当前对象的引用;
举个例子
class CirclePoint {private double x;private double y;CirclePoint() {}CirclePoint(double x, double y) {this.x = x; // 成员变量和参数名相同,使用this区分this.y = y;}CirclePoint moveLeft(){x--;return this; // 返回当前对象的引用}
}
另外,在实例方法、实例初始化块和构造方法中,局部变量表第0位都存放着当前对象的引用,方便通过this关键字访问对象本身。 (在静态方法、静态初始化块、类构造器中没有this对象的概念,静态方法的栈帧由该类的class对象创建,静态方法依赖类本身;局部内部类中,内部类没有继承外部类,所以局部内部类的方法中,第0位也不会存放外部类的引用。)
二、static
是什么
在类中,用static声明的变量是静态变量,是类的公共变量,在第一次使用时初始化;静态变量对于该类的所有对象来说只有一份;
在类中,用static声明的方法是静态方法。非静态方法,需要在生成对象时产生。调用静态方法时,不会将对象的引用传递给它,所以在静态方法中不能调用非静态成员。
可以通过对象引用或类名访问静态成员,不需要实例化,通常用来存储类级别的信息。
举个例子
1、声明静态变量
public class Demo {public static int value = 10;
}
2、声明静态方法
public class Demo {public static void print() {System.out.println("Static method");}
}
3、静态初始化块
public class Demo {static {System.out.println("Static initializer"); }
}
4、静态内部类
public class Outer {static class Inner {public static void show() {System.out.println("Static inner class");}}}
5、静态导入
import static java.util.concurrent.TimeUnit.NANOSECONDS;long startNanoTime = nanoTime();
静态变量和静态方法都独立于对象存在,不需要创建实例就可以访问,在jvm中存放在方法区中。
这里需要注意的是,方法区和数据段是两个概念。 数据段是操作系统概念,是进程地址空间中的一部分,用于存储全局变量和静态变量。方法区是JVM概念,是一块逻辑区域,存储类信息、静态变量和常量池等数据。两者的主要区别在于: 数据段是进程级的,每个进程都有自己的数据段,仅可在进程内访问。方法区是JVM级的,所有线程共享一块共享的方法区,可跨线程访问。两者的关系是: JVM会向操作系统申请一块 native 内存作为进程的数据段。 然后从这块内存中划分出一部分作为方法区使用。 方法区中的静态域部分对应于这个进程的数据段。所以方法区和数据段不是包含关系,而是两个不同层次的概念。数据段存储于进程内存空间中,而方法区逻辑上属于JVM的一部分,但最终也是映射到 native 内存的数据段区域进行存储的。
三、final
final关键字,可以用来声明变量,方法,类,参数,其主要作用是使数据不可修改,进而保证系统的安全性和可靠性。
1、 final变量把一个变量声明为final后,它就不能被重新赋值,即变成一个常量。例如:
final int AGE = 25;
AGE = 30; //错误,不能重新赋值
2、final方法把一个方法声明为final后,它就不能被子类重写。例如:
public final void print(){System.out.println("Hello");
}public class B extends A {public void print(){ //错误,不能重写final方法System.out.println("World");}
}
3、 final类把一个类声明为final后,它就不能被继承。例如:
final class A {}class B extends A { //错误,不能继承final类
}
4. final参数 把一个方法的参数声明为final后,它就成了一个常量不可改变。例如:
void method(final int a) {a = 20; //错误,不能重新赋值
}
四、super
在Java中,使用super引用基类的成员。
1、调用父类的构造方法:在子类的构造方法中使用super()可以调用父类的构造方法。
public class Father {public Father() {System.out.println("Father的构造方法");}
}public class Son extends Father {public Son() {super(); // 调用父类的构造方法System.out.println("Son的构造方法"); }
}
2.、调用父类的方法:如果子类重写了父类的方法,可以使用super.方法名() 调用父类的方法。
public class Father {public void print() {System.out.println("Father");}
}public class Son extends Father {public void print() {super.print(); // 调用父类的print()方法System.out.println("Son");}
}
使用super可以访问父类的构造方法或方法,避免被子类重写或隐藏。它在继承关系中发挥着重要作用。
总结
在这篇文章中,我们主要学习了Java的4个关键字:this,static,final,super。this可用于获取方法、属性所属对象的引用;static标识公共变量,公共方法,在开发过程中,可减少重复的代码,节省内存空间;final使数据不可改变,保证系统的安全性和可靠性。super关键字,使子类可以访问到基类的方法和属性。
相关文章:
[Java基础]面向对象-关键字分析:this,static,final,super
系列文章目录 【Java基础】Java总览_小王师傅66的博客-CSDN博客 [Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客 [Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客 [Java基础]…...
数据结构初阶--二叉树的顺序结构之堆
目录 一.堆的概念及结构 1.1.堆的概念 1.2.堆的存储结构 二.堆的功能实现 2.1.堆的定义 2.2.堆的初始化 2.3.堆的销毁 2.4.堆的打印 2.5.堆的插入 向上调整算法 堆的插入 2.6.堆的删除 向下调整算法 堆的删除 2.7.堆的取堆顶元素 2.8.堆的判空 2.9.堆的求堆的…...
NVM Command学习
ubuntu系统安装nvme-cli,可以在应用层发起命令。 sudo apt install nvme-cli$ sudo nvme --help nvme-1.9 usage: nvme <command> [<device>] [<args>]The <device> may be either an NVMe character device (ex: /dev/nvme0) or an nvme …...
TCP Socket 基础知识点(实例是以Java进行演示)
本篇根据TCP & Socket 相关知识点和学习所得进行整理所得。 文章目录 前言1. TCP相关知识点1.1 双工/单工1.2 TCP协议的主要特点1.3 TCP的可靠性原理1.4 报文段1.4.1 端口1.4.2 seq序号1.4.3 ack确认号1.4.4 数据偏移1.4.5 保留1.4.6 控制位1.4.7 窗口1.4.8 校验和1.4.9 紧…...
openCV图像读取和显示
文章目录 一、imread二、namedWindow三、imshow #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main(int argc,char** argv) {cv::Mat img imread("./sun.png"); //3通道 24位if (img.empty()) {std:…...
requests 方法总结
当使用 requests 库进行接口自动化测试时,以下是一些详细的步骤和方法总结: 1. **安装 requests 库**:首先,确保你已经安装了 requests 库。可以使用 pip 命令进行安装:pip install requests。 2. **导入库**&#x…...
Go语言删除文本文件中的指定行
GO语言删除文本文件中的指定行 1. 思路2. 处理文件3. 处理后的文本文件 1. 思路 假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求…...
Arthas GC日志-JVM(十八)
上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM(十七) Arthas介绍 因为arthas完全是java代码写的,我们直接用命令启动: Java -jar arthas-boot.jar 启动成功后,选择我们项目的进程。 进入我们可用dashboard…...
ISC 2023︱诚邀您参与赛宁“安全验证评估”论坛
8月9日-10日,第十一届互联网安全大会(简称ISC 2023)将在北京国家会议中心举办。本次大会以“安全即服务,开启人工智能时代数字安全新范式”为主题,打造全球首场AI数字安全峰会,赋予安全即服务新时代内涵…...
分享一个计算器
先看效果: 再看代码(查看更多): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><style>* {box-sizing: border-box;}body…...
Android 13 Launcher——长按图标弹窗背景变暗
目录 一.背景 二.修改代码 一.背景 客户定制需要长按图标弹窗让其背景变暗,所以需要进行定制,如下是定制流程,本篇是接上篇https://gonglipeng.blog.csdn.net/article/details/132171100 的内容 二.修改代码 主要代码逻辑在ArrowPopup中的reorderAndShow方法和closeCom…...
Elasticsearch概述和DSL查询总结
目录 Elasticsearch概述 1. 什么是Elasticsearch 2. 作用 3. 特点 DSL(Domain Specifit Language)特定领域语言: 概念和作用 查询代码总结 最后附项目准备 1.创建搜索工程(maven工程) 2.配置文件 application…...
扩展卡尔曼滤波器代码
文章目录 前言问题状态向量和观测向量加性噪声的形式状态方程及求导观测方程及求导状态初始化过程噪声和观测噪声卡尔曼滤波过程code 前言 卡尔曼滤波器在1960年被卡尔曼发明之后,被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使…...
9:00开始面试,9:08就出来了,这问题问的实在是····
外包工作3年,今年裸辞跳槽,很幸运的是找到了下家,不过 自从加入到这家公司,每天不是在加班就是在加班的路上,薪资倒是给的不少,所以我也就忍了。没想到6月一纸通知,所有人都不许加班࿰…...
揭秘:5个美国程序员与日本程序员的差异
大家好,这里是程序员晚枫。想了解更多精彩内容,快来关注程序员晚枫 今天以美国和日本程序员为例,给大家分享一下国外程序员的生活。 以下是五个美国程序员和日本程序员的的区别: 工作方式:美国程序员通常更注重自由和…...
Springboot实现简单JWT登录鉴权
登录为啥需要鉴权? 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token&am…...
C++设计模式创建型之工厂模式整理
一、工厂模式分类 工厂模式属于创建型模式,一般可以细分为简单工厂模式、工厂模式和抽象工厂模式。每种都有不同的特色和应用场景。 二、工厂模式详情 1、简单工厂模式 1)概述 简单工厂模式相对来说,在四人组写的《设计模式------可复用面…...
前端安全XSS和CSRF讲解
文章目录 XSSXSS攻击原理常见的攻击方式预防措施 CSRFCSRF攻击原理常见攻击情景预防措施: CSRF和XSS的区别 XSS 全称Cross Site Scripting,名为跨站脚本攻击。为啥不是单词第一个字母组合CSS,大概率与样式名称css进行区分。 XSS攻击原理 不…...
本地化部署自建类ChatGPT服务远程访问
本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 🍀小结🍀 前言 Te…...
一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)
概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
