[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的简写,表示安装的第三方…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...