【Java】状态修饰符 final static
目录
final 修饰我们的成员方法、成员变量、类
示例代码:
final 修饰的局部变量
示例代码:
static
示例代码:
static 访问特点:
示例代码:
static关键字的用途
示例代码:
static 修饰常量
示例代码:
1. final(最终态)
2. static(静态)
final 修饰我们的成员方法、成员变量、类
特点:
- 修饰变量:该变量的值,不能被修改,必须初始化(手动赋值)
- 修饰方法:该方法,不能被重写
- 修饰类:该类,不能被继承
示例代码:
Parent.java
package com.面向对象.Demo15;public class Parent {private int age; // 默认private final int age2 = 10; //final——必须初始化值/*** final 关键字修饰的 类、成员属性、成员方法* 1.被 final 关键字修饰的类 无法被继承* 2.被 final 关键字修饰的成员方法 无法被重写* 3.被 final 关键字修饰的成员属性 该变量的值(必须初始化值) 无法被修改*/
// public final void a1() { //报错, final——无法被重写
// }public void a1() {
// this.age2= 20; // 报错,final——无法被修改}
}
Student.java
package com.面向对象.Demo15;public class Student extends Parent {@Overridepublic void a1() {}
}
final 修饰的局部变量
- 基本数据类型:final 修饰的基本数据类型的值不能够被修改的;
- 引用数据类型:final 修饰的引用数据类型 引用类型地址不能够发生变化的,但是引用类型的地址里面成员属性值是可以发生变化的。
示例代码:
Student.java
package com.面向对象.Demo16;public class Student {public int age = 30;
}
StudentDemo.java
package com.面向对象.Demo16;public class StudentDemo {public static void main(String[] args) {// 使用final关键字修饰局部变量final int age = 20;
// age=30; //报错,使用 final 修饰的局部变量 是基本数据类型 不可以修改final Student student = new Student(); //引用类型student.age = 10; // 使用 final 修饰局部变量 是一个引用类型的 引用类型的地址 不能够被修改的,// 但是,引用类型的地址里面的属性值是可以修改
// student = null; // 报错,引用类型的地址不可以修改
// student = new Student(); // 报错,引用类型的地址不可以修改}
}
static
- static (静态),可以修饰成员方法,成员变量
- static 修饰的特点:被类的所有对象共享访问。
示例代码:
Student.java
package com.面向对象.Demo17;public class Student {public String name;
// public String school = "清华大学"; //方法1——成员变量public static String school; //方法2——静态变量/*** 通过static关键字 修饰的 成员方法——静态方法* 通过static关键字 修饰的 成员变量——静态变量*/public void show() { //成员方法System.out.println(name + "," + school);}}
Test01.java
package com.面向对象.Demo17;public class Test01 {public static void main(String[] args) {/*** 疑问 为什么s1对象. 没有静态变量 school 提示呢?* 解答:静态变量的方法特点:直接通过 类名.* Student.school="清华大学"* 下面的s1 s2 s3.school 都可以不需要*/Student.school="清华大学";// 通过static 关键字修饰的 被类的所有对象 共享访问Student s1 = new Student();Student s2 = new Student();Student s3 = new Student();s1.name = "小明";
// s1.school = "清华清华";
// s1.school = "清华大学";//这里的s1没有school对象,但写出类不报错,// s2.school不需要赋值,如果不是static,s2.school没有赋值就为nulls1.show();s2.name = "小军";
// s2.school = "清华大学";s2.show();s2.school = "北京大学";s3.show(); //这里的s3.school为 北京大学/*** s1.school = "清华清华";* s2.school = "清华大学";* 冗余* 方法1.默认值的形式 优化代码 s1和s2 对象不需要给school赋值* 方法2.静态变量 static**/}
}
static 访问特点:
非静态成员方法
- 能够访问静态的成员变量
- 能够访问非静态的成员变量
- 能够访问静态的成员方法
- 能够访问非静态的成员方法
静态成员方法
- 能够访问静态成员变量,但是不能够直接访问成员变量
- 能够访问静态成员方法,但是不能够直接访问成员方法
示例代码:
Student.java
package com.面向对象.Demo18;public class Student {/*** 成员属性 和 方法*/private int age; //非静态public static int staticAge;//静态// 非静态public void a1() {
// 在a1 非静态方法中 可以访问 非静态方法 静态方法 静态成员属性 非静态成员属性System.out.println(age); //访问 非静态成员属性System.out.println(staticAge); //访问 静态成员属性staticA2(); //访问 静态方法staticA3();a4(); //访问 非静态方法中}// 静态public static void staticA2() {// 在staticA2 静态方法中 访问 非静态方法 静态方法 静态成员属性 非静态成员属性/*** staticA2 静态方法中,非静态方法 和 静态方法 特点?* staticA2 静态方法中,不能够访问 非静态成员方法 但是可以访问 静态方法*/
// a1(); //报错,静态方法中,不能够方法 非静态成员方法,想要访问,只需要将a1()改为静态即可staticA3(); // 静态可以访问静态}public static void staticA3() {/***staticA3 静态方法中,不能够访问 非静态成员属性 但是可以访问 静态成员属性*/
// System.out.println(age); //报错,不能够访问 非静态成员属性System.out.println(staticAge); //可以访问 静态成员属性}//非静态public void a4(){}
}
static关键字的用途
- 一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)
- 显然,被static 关键字修饰的方法或变量 不需要依赖与对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
- static 可以用来修饰类的成员方法、类的成员变量,另外也可以编写static 代码块 来优化程序性能
示例代码:
Test01.java
package com.面向对象.Demo18;public class Test01 {public static void main(String[] args) {/*** static 应用场景 不想通过new的形式 访问成员方法和属性的话* static 修饰成员方法和成员属性 变成 静态的成员属性和静态的成员方法*/Student s = new Student();s.a1();
// s.staticA2();//s没有staticA2这个对象,但是也不报错,官方不推荐Student.staticA2();/*** 通过 static 被类中所有对象共享* 类名.静态方法** 总结:如果是通过 static 修饰的成员方法和属性* 我们可以直接通过 ”类名.“ 访问(成员方法和属性)** 实例访问 成员方法和成员属性* 非静态的 成员方法 和 成员属性 必须通过 new 该对象 "实例." 成员方法和成员属性*/}
}
static 修饰常量
static 关键字的应用场景,java中的常量(Constant)
示例代码:
Constant.java
package com.面向对象.Demo19;public class Constant {/*** 该类定义都是常量* 什么是常量?* 1.定义好之后,值不能够被修改(final)* 2.常量名称全部都是为大写* 2.1 写大写太麻烦,先写成小写,然后使用快捷键改为大写* 2.2 IDEA中的快捷键(鼠标光标(常量名称)Ctrl+Shift+u),再按就改为小写*/public static final int CODE_200 = 200;public static final int CODE_404 = 404;public static final int CODE_500 = 500;/*** JavaWeb开发* CODE_200 表示 成功* CODE_404 表示 找不到* CODE_500 表示 错误*/
}
Test01.java
package com.面向对象.Demo19;public class Test01 {public static void main(String[] args) {
// Constant constant = new Constant(); //后面直接用"类名." 访问int code = 200;if (Constant.CODE_200 == code) { // JavaWeb 开发时System.out.println("成功");return;}if (Constant.CODE_404 == code) {System.out.println("找不到");return;}if (Constant.CODE_500 == code) {System.out.println("错误");return;}}
}
下一篇文章:main方法的深入理解
相关文章:
【Java】状态修饰符 final static
目录 final 修饰我们的成员方法、成员变量、类 示例代码: final 修饰的局部变量 示例代码: static 示例代码: static 访问特点: 示例代码: static关键字的用途 示例代码: static 修饰常量 示例…...

笔试编程ACM模式JS(V8)、JS(Node)框架、输入输出初始化处理、常用方法、技巧
目录 考试注意事项 先审完题意,再动手 在本地编辑器(有提示) 简单题515min 通过率0%,有额外log 常见输入处理 str-> num arr:line.split( ).map(val>Number(val)) 初始化数组 new Array(length).fill(v…...

learn掩码张量
目录 1、什么是掩码张量 2、掩码张量的作用 3、代码演示 (1)、定义一个上三角矩阵,k0或者 k默认为 0 (2)、k1 (3)、k-1 4、掩码张量代码实现 (1)、输出效果 &…...

激活函数介绍
介绍 神经网络当中的激活函数用来提升网络的非线性,以增强网络的表征能力。它有这样几个特点:有界,必须为非常数,单调递增且连续可求导。我们常用的有sigmoid或者tanh,但我们都知道这两个都存在一定的缺点,…...

docker方式启动一个java项目-Nginx本地有代码,并配置反向代理
文章目录 案例导入说明1.安装MySQL1.1.准备目录1.2.运行命令1.3.修改配置1.4.重启 2.导入SQL3.导入Demo工程3.1.分页查询商品(仔细看代码,很多新的MP编程技巧)3.2.新增商品3.3.修改商品3.4.修改库存3.5.删除商品3.6.根据id查询商品3.7.根据id…...
前端和后端是Web开发选哪个好?
前端和后端是Web开发中的两个不同的领域,哪一种更适合学习?前景更广呢? 一、引言 Web前端开发就像装饰房间的小瓦匠,勤勤恳恳,仔仔细细,粉饰墙壁,妆点家具。会 HTML,CSS,懂点 JS。…...

HTTP协议,请求响应
、概述 二、HTTP请求协议 三、HTTP响应协议 四、请求数据 1.简单实体参数 RequestMapping("/simpleParam")public String simpleParam(RequestParam(name "name" ,required false ) String username, Integer age){System.out.println (username "…...

idea配置文件属性提示消息解决方案
在项目文件路径下找到你没有属性提示消息的文件 选中,ok即可 如果遇到ok无法确认的情况: 在下图所示位置填写配置文件名称即可...

EdgeView 4 for Mac:重新定义您的图像查看体验
您是否厌倦了那些功能繁杂、操作复杂的图像查看器?您是否渴望一款简单、快速且高效的工具,以便更轻松地浏览和管理您的图像库?如果答案是肯定的,那么EdgeView 4 for Mac将是您的理想之选! EdgeView 4是一款专为Mac用户…...
流程自动化(RPA)的好处有哪些?
流程自动化(RPA)是一种通过软件机器人实现业务流程自动化的技术。它可以模拟人类在计算机上执行的操作,从而自动化重复性、繁琐的任务,提高工作效率和准确性。流程自动化(RPA)的好处很多,下面我…...

医学影像系统【简称PACS】源码
PACS(Picture Archiving and Comuniations Systems)即PACS,图像存储与传输系统,是应用于医院中管理医疗设备如CT,MR等产生的医学图像的信息系统。目标是支持在医院内部所有关于图像的活动,集成了医疗设备,图像存储和分…...
大家都在用哪些敏捷开发项目管理软件?
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。 敏捷开发的特点是高度灵活性和适应性、迭代式开发。 敏捷开发方法强调快速响应变化,因此它具有高度的灵活性和适应性。开发团队可以根据客户需求和市场变化快速调整开发计划和产品功能,以确保产品…...
python机器学习基础教程01-环境搭建
书籍源代码 github上源代码 https://github.com/amueller/introduction_to_ml_with_python 安装anaconda虚拟环境 创建虚拟环境 conda create -p E:\Python\envs\mlstupy35 python3.5 # 激活环境 conda activate E:\Python\envs\mlstupy35 # 创建学习目录 cd G:\Python\ml…...
TinyWebServer学习笔记-Config
为了弄清楚具体的业务逻辑,我们直接从主函数开始看源代码: #include "config.h"int main(int argc, char *argv[]) {//需要修改的数据库信息,登录名,密码,库名string user "root";string passwd "root";string databas…...

数据结构与算法--算法
这里写目录标题 线性表顺序表链表插入删除算法 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 线性表 顺序表 链表 插入删除算法 步骤 1.通过循环到达指定位置的前一个位置 2.新建…...

JVM:如何通俗的理解并发的可达性分析
并发的可达性分析 前面在介绍对象是否已死那一节有说到可达性分析算法,它理论上是要求全过程都基于一个能保障一致性的快照(类比 MySQL 的MVCC)中才能够进行分析,也就意味着必须全程冻结用户线程的运行(STW࿰…...
传统机器学习聚类算法——总集篇
工作需要,涉及到一些聚类算法相关的知识。工作中需要综合考虑数据量、算法效果、性能之间的平衡,所以开启新的篇章——机器学习聚类算法篇。 传统机器学习中聚类算法主要分为以下几类: 1. 层次聚类算法 层次聚类算法是一种无监督学习算法&am…...

Ajax
一、什么是Ajax <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…...
SQL_ERROR_INFO: “Duplicate entry ‘9003‘ for key ‘examination_info.exam_id‘“
今天刷题的时候,往数据库中插入一条语句,但是这个语句已经存在于数据库中了,所以不能用insert into 语句来插入,应该使用replace into 来插入。 REPLACE INTO examination_info(exam_id,tag,difficulty,duration,release_time) V…...

解决每次重启ganache虚拟环境,十个账号秘钥都会改变问题
很多时候 我们启动一个 ganache 环境 然后 通过私钥 在 MetaMask 中 导入用户 但是 当我们因为 电脑要关机呀 或者 ETH 消耗没了呀 那我们就不得不重启一个ganache虚拟环境 然后 你在切一下网络 让它刷新一下 你就会发现 上一次导入的用户就没有了 这是因为 你每次 ganache…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...