【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…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
