Java中static 和final的区别

Ubuntu24.04下Librenms的完整安装与配置指南 本文提供了在Ubuntu 24.04 LTS系统上完整安装与配置LibreNMS网络监控系统的详细指南。内容涵盖系统环境准备、依赖安装、源码获取、PHP/数据库/Nginx配置、Composer安装、网页向导设置以及设备添加与日常使用,帮助用户快速部署一套功能强大的开源网络监控解决方案。 阅读详情
final定义的变量可以看做一个常量,不能被改变; 
final定义的方法不能被覆盖; 
final定义的类不能被继承。 
final static 就是再加上static的特性就可以了 

static 和final是没有直接关系的 

static 是在内存中分配一块区域,供整个类通用,所有的类的对象都享有它的共同的值 

static 和final的区别 
一、static : 
什么情况下我们要使用static呢? 
1、只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创 建对象。 
2、我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。 
为满足这两方面的要求,可使用static(静态)关键字。 
下面我先举个例子: 

一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。 
为了将数据成员或方法设为static,只需在定义前置和这个关键字即可。 
例如,下述代码能生成一个static数据成员,并对其初始化: 

class StaticTest { 
Static int i = 47; 
} 

现在,尽管我们制作了两个StaticTest对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对象都共享同样的i。请考察下述代码: 
StaticTest st1 = new StaticTest(); 
StaticTest st2 = new StaticTest(); 
此时,无论st1.i还是st2.i都有同样的值47,因为它们引用的是同样的内存区域。 
有两个办法可引用一个static变量。正如上面展示的那样,可通过一个对象命名它,如st2.i。亦可直接用它的类名引用,而这在非静态成员里是行不通的(最好用这个办法引用static变量,因为它强调了那个变量的“静态”本质)。 
StaticTest.i++; 
其中,++运算符会使变量增值。此时,无论st1.i还是st2.i的值都是48。 

类似的逻辑也适用于静态方法。既可象对其他任何方法那样通过一个对象引用静态方法,亦可用特殊的语法格式“类名.方法()”加以引用。静态方法的定义是类似的: 
class StaticFun { 
static void incr() { StaticTest.i++; } 
} 
从中可看出,StaticFun的方法incr()使静态数据i增值。可用典型的方法调用incr(): 

StaticFun sf = new StaticFun(); 
sf.incr(); 

或者,由于incr()是一种静态方法,所以可通过它的类直接调用: 
StaticFun.incr(); 
对方法来说,static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法。 
举简单一例如下: 
public class TestStatic { 
public static void main(String args[]){ 
PhoneCard mycard_1 = new PhoneCard();//创建第一张卡对象 
PhoneCard mycard_2 = new PhoneCard();//创建第二张卡对象 

mycard_1.addFee = 0.8;//给第一张卡的附加费addFee赋值为0.8 
//注意到我们没有给第二张卡赋值 

System.out.println("第一张卡的附加费:" + mycard_1.addFee); 
System.out.println("第二张卡的附加费:" + mycard_2.addFee); 
//发现没有?输出结果中第二张卡的附加费也是0.8 了。 
System.out.println("卡的附加费:" + PhoneCard.addFee); 
//该句的打印输出表明卡类的附加费都是0.8 
} 
} 

class PhoneCard{ 
static double addFee;//静态域addFee 
} 

该例创建了两个类,PhoneCard类只定义了一个变量,TestStatic类里创建了两个PhoneCard类对象,并给其中的一个对象的附加费addFee赋值,而另一个对象没赋值。 

由上例可以看出,静态域保存在类的公共存储单元,而不是保存在对象的存储单元内。 

static 修饰方法时是同理。 


二、final: 
final可修饰类、域(变量和常量)、方法 (而static不修饰类) 

1、final修饰类,表示该类不可被继承。 
如定义了一个final类: 
final class SnowBird{ 
int i; 
String s; 
static void fly(){ 
System.out.println("snowbird is flying"); 
} 
} 

//现在定义一个类,试图继承SnowBird类: 

public class Bird extends SnowBird{ 
public static void main(String[] args){ 
SnowBird.fly(); 
} 
} 

把上面的两个类拷贝到文件中,文件名保存为Bird.java ,现在编译看看会出现什么问题? 
出错信息是:cannot inherit from final SnowBird 
表明final 类不可被继承。 

那么,final修饰变量是怎么样呢? 
2、final修饰变量 
程序中经常需要定义各种类型的常量,如:3.24268,"201"等等。这时候我们就用final来修饰一个类似于标志符名字。如: 

final String connectNumber = "201"; 
final表明 connectNumber是一个常量,它的取值在整个过程都不会改变。 

如果把final 去掉则connectNumber就成为变量了。 

有时我们为了节省空间,常量通常声明为 static .因为如上所说的 static 用的是类的内存空间。 

3、修饰方法: 
final修饰的方法,称为最终方法。最终方法不可被子类重新定义,即不可被覆盖。 
如父类定义了public void fly(){ ....} 
则子类就不能定义 
public void fly(){。。。。。。} 
但注意覆盖与重载的区别。不能被覆盖并不是不能被重载,如你还可以定义 
public void fly(int i){.....}, 

举个例子如下: 

class FinalValue { 
static final int i = 1; 
final void fly(){ 
System.out.println("SnowBird is flying over FinalValue "); 
} 
} 

class TestFinal extends FinalValue { 
int i = 2; 
void fly(){ 
System.out.println("SnowBird is flying over TestFinal"); 
System.out.println("In class FinalValue static Final i = "+ FinalValue.i); 
System.out.println("In class TestFinal i = "+ i); 
} 
void fly(String s){ 
System.out.println("fly("+ s + ")"); 
} 
} 

public class Test { 
public static void main(String args[]){ 
TestFinal tf = new TestFinal(); 
tf.fly(); 
tf.fly("ok"); 
System.out.println(tf.i); 
} 
} 
把上面的程序保存为Test.java编译看看,出现什么错误? 
然后,把TestFinal类中的 void fly(){ ... } 注解掉 
即 如下 
/* void fly(){ 
System.out.println("SnowBird is flying over TestFinal"); 
System.out.println("In class FinalValue static Final i = "+ FinalValue.i); 
System.out.println("In class TestFinal i = "+ i); 
}*/ 

现在再编译看看通过了吗? 可见重载与覆盖的区别了吧。 还发现 FinalValue中的 i 与 TestFinal中的 i 没关系 。因为对于变量而言,重定义只是父类的同名域被隐藏了而已。
UFS 3.1协议分析(第一至四章) -- UFS概述 Contents协议规范规范参考术语和定义简单概述通用特性接口特性功能特性 协议规范     UFS3.1协议规定了UFS电气接口和存储器件的特性以及系统架构。 特性:低功耗、高数据吞吐量、低电磁干扰、大容量存储器子系统效率的优化 电气接口:使用基于MIPI M-PHY的高级差分接口;M-PHY作为物理层,MIPI UniPro作为链路层,二者结合形成UFS接口的互联。 架构模型:参考 INCITS T10(SCSI) SAM 标准,命令协议基于 INCITS T1 阅读详情

相关推荐

【processing】创意编程

首先接到这个作业的时候,我是很崩溃的,我是真的不会画画QAQ,还画自己,这也太难了,于是我决定!还是祸害我爱豆吧!于是我从微博太太那里找了个图临摹 下面是太太的图 先给太太道歉!都是为了作业! 然后我画出来是这样子的 还可以!!!没有特别丑!(虽然也不是特别像吧) 但是画这个真是画死我了,下面贴上代码吧,没啥特殊的就是各种贝塞尔曲线各种圆各种线 //face stroke(70,27,11...

qq_25700571的博客 1267

static和final的区别

static:是静态的意思; final:是最后的意思; 区别: 1.final可以修饰类,方法和变量,但是static只能修饰方法和变量; 2.final可以修饰全局变量和局部变量,但是static只能修饰全局变量,不能修饰局部变量; 3.final不可以修饰代码块,但是static可以修饰代码块。 ...

weixin_57413199的博客 5949

【Python Turtle合集】有趣好玩的代码当然要分享给大家啦~(皮卡丘、玫瑰花、小黄人......)

前言 🚀 作者 :“程序员梨子” 🚀 **文章简介 **:本篇文章主要是写了利用Turtle库绘制四种不一样的图案的小程序! 🚀 **文章源码免费获取 : 为了感谢每一个关注我的小可爱💓每篇文章的项目源码都是无 偿分享滴💓👇👇👇👇 点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可! 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 正文 今天给大家介绍一个好玩儿的库,嘻嘻! Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵

TZ45678的博客 3万+

java中final和static的区别

都可以修饰类、方法、成员变量。 static 可以修饰类的代码块,final 不可以。 static 不可以修饰方法内的局部变量,final 可以。 static 修饰表示静态或全局,被修饰的属性和方法属于类,可以用类名.静态属性 / 方法名 访问 static 修饰的代码块表示静态代码块,当 Java 虚拟机(JVM)加载类时,就会执行该代码块,只会被执行一次 static 修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次 static 修饰的变量可以重新赋值 static 方法中

qq_44691484的博客 640

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 235

别再为多相机标定头疼了!用VisionMaster统一坐标系的保姆级教程

本文详细介绍了使用VisionMaster平台解决多相机视觉系统中坐标系统一问题的完整流程。从标定板选择到N点标定,再到实战演练,提供了从原理到落地的全方位指导,帮助工程师高效解决多相机定位引导中的坐标偏差问题。

weixin_38168322的博客 632

java之final与static的区别

这里写目录标题一、final关键字1、final修饰引用2、final修饰方法3、final修饰类二、static关键字1、静态字段(类变量或静态变量)2、静态方法(类方法)三、final与static的区别1、是否可以修改值2、何时加载四、静态常量1、静态常量的定义2、静态常量的特点 一、final关键字 final实例字段必须在构造对象时初始化。也就是说,必须在构造器执行完成之前,将字段赋予初值,否则将不能再修改这个字段。 每创建一个实例,就会为实例变量分配一次内存 1、final修饰引用

weixin_47803347的博客 3886

信贷风控实战指南:Vintage分析表从数据建模到风险洞察

本文是一份信贷风控实战指南,详细阐述了Vintage分析从数据建模到风险洞察的全流程。文章深入解析了Vintage分析作为信贷资产“体检报告”的核心价值,并提供了从借据表与还款计划表设计、账龄计算、逾期口径判定到风险暴露计算与最终可视化透视的完整SQL实现方案,旨在帮助风控从业者构建精准的风险监控体系。

nft7creator的博客 321

Java中static、final关键字【详解】

java中static、final关键字详解,概述、定义、使用、访问

qq_44700578的博客 4024

TGK-planner编译报错PLUGINLIB_EXPORT_CLASS解决

TGK-planner编译报错解决。

latter97的博客 857

RNA 8. SCI文章中差异基因表达--热图 (heatmap) 进阶:从数据标准化到多维度注释

本文深入探讨了RNA差异基因表达分析中热图(heatmap)的进阶应用,从数据标准化到多维度注释。详细介绍了FPKM标准化、Z-score转换等关键技术,以及pheatmap包的高级注释功能,帮助研究者制作发表级热图。文章还提供了视觉优化策略和生物学意义衔接的实用建议,助力SCI论文的数据可视化。

weixin_29051149的博客 302

Java语法基础:final和static关键字

语法基础 关键字final 意思是最终的、不可变的 修饰变量 final修饰变量时,变量必须初始化,并且不能被修改。初始化可以定义final变量时直接初始化或者在构造函数中初始化 修饰局部变量 修饰方法 final修饰方法则该方法不能被子类重写 修饰类 final修饰一个类,则该类不能被继承 扩展 表示字符串的三种类型String、StringBuffer、StringBuilder都是final类型的类,所以都不允许继承 总结 final属性山可以声明的时候同时直接赋值或者在

weixin_49199821的博客 1963

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3780

JAVA中static、final、static final的区别

1 问题当我们在使用java写类的属性时总会用到很多的类型去修饰它,比如字符串String,整数型int,但是我们偶尔也会遇到 static、final、static final,那么他们的区别是什么呢?2 方法final final可以修饰属性、方法、类,局部变量(方法中的变量)。 final修饰的属性的初始化可以在编译期,也可以在运行期,但是在初始化后就不能改变了。final修饰的属性表明...

算法与编程之美 2104

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中static,final,static final的区别

该文章中的内容不一定准确,若有错误欢迎指出。 static,final都是Java中的修饰关键字,static final则是static + final 组合,它与 final static 无区别 修饰范围: static可修饰:属性,方法,代码块,内部类(静态内部类或嵌套内部类) final可修饰:属性,变量,方法 ,局部变量(在方法中的变量) static fin...

学而不思则罔 思而不学则殆 504

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java中static和const和final的区别

staticstatic关键字用于声明类的成员(方法或变量)为静态成员。静态成员属于类本身,而不是类的实例。换句话说,静态成员可以通过类名直接访问,而不需要实例化对象。staticstaticstaticcount是静态变量,在两个Counter对象中共享,是静态方法,可以通过类名直接调用。final是一个多用途的关键字,它可以用于变量、方法和类的定义,分别具有不同的含义。finalfinalfinalfinalfinalfinalfinalfinalfinalPI被声明为final,因此它的值不能更改。

nimo观察者 1916

java中static、final、static final的区别

final可以修饰:属性,方法,类      final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。      final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。      final修饰的属性表明是一个常数(创建后不能被修改)。      final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继

沉浮 4万+

java中static final 与 final 的区别

java中static final 与 final 的区别 废话不多说,直接上代码 public class ProductServiceImpl implements IProductService { private final int a = new Random().nextInt(); private static final int b = new Random().nextInt(); @Resource private ProductMapper p

majinan3456的博客 223

java final static 区别_Java--static,final,static final 的区别

Java--static,final,static final 的区别一, finalfinal 修饰类: 表示该类不能被继承; final 类中的方法默认是 final 的;final 修饰方法: 表示该方法无法被重写;final 修饰方法参数: 表示在变量的生存期中它的值不能被改变;final 修饰变量: 包括成员变量和局部变量, 该变量只能被赋值一次且它的值无法被改变. 对于成员变量来讲, ...

weixin_35566895的博客 274

Java中static、final、static final的区别

方法参数中的final句柄,意味着在该方法内部,我们不能改变参数句柄指向的实际东西,也就是说在方法内部不能给形参句柄再另外赋值)。static修饰的属性强调它们只有一个,final修饰的属性表明是一个常数(创建后不能被修改)。static修饰的属性、方法、代码段跟该类的具体对象无关,不创建对象也能调用static修饰的属性、方法等。final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。

江上清风山间明月的博客 985

final和static在Java中的用法和区别

在Java中,final和static是两个常用的关键字,它们各自有不同的用途和语义,但它们在某些上下文中也可以一起使用。

Jz_Stu的博客 604

Java 中 final 与 static 的区别

在 Java 中,final 和 static 是两个不同的关键字,final 确保不可变。static 用于确定所属级别

溪 706

Java中的static、final、static final的区别

基础层面: 1.static 可以修饰:属性,方法,代码段,内部类(静态内部类或嵌套内部类) static修饰的属性的初始化在编译期,初始化的时候能改变。 static修饰的属性所有对象都只有一个值。 static修饰的属性强调它们只有一个 static修饰的属性、方法、代码段跟该类的具体对象无关,不创建对象也能调用static修饰的属性,方法等。 static和this,super不同,static跟具体的对象无关,而this,super正好跟具体的对象有关 。 static不可以修饰局部变量。 2.fi

m0_46565430的博客 502

java基础:static、final、static final的区别

(1)final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。 final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。 final修饰的属性表明是一个常数(创建后不能被修改)。 final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继...

starbxx的博客 158

java static 与 final_Java final与static区别

首页>基础教程>关键字>final关键字Java final与static区别Java final与static介绍以及区别通过下面2个方面来简述:1. 当final和static同时使用的时候,我们所熟知的“全局常量”就出现了:一个可以到处使用并且不可以改变的属性,比如我们熟知的Math.PI,Math.E。public class FinalStatic { pr...

weixin_30619981的博客 182

Java中的static、final以及区别

Java中的static、final以及区别1.static关键字(1)static修饰变量(2)static修饰方法(3)static的补充使用——静态初始块2.final关键字(1)final修饰变量(2)final修饰属性(即类的成员变量)(3)final修饰类(4)final修饰的方法3.总结 1.static关键字 (1)static修饰变量 在学习C语言的时候,老师就讲过可编程内存主要...

CarryLvan的博客 715
上一篇: Linux下安装Nginx详细图解教程
下一篇: pring事务管理(注解式声明事务管理)
network_boy
博客等级 码龄12年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值