【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…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
