java----static关键字(包括final)
static修饰字段:
使用static关键字修饰一个字段:声明的static变量实际上就是一个全局变量
static修饰的方法不可以重写,所以接口和抽象方法中定义的static方法必须是需要方法体的。另外接口中定义的变量必须附初始值,抽象类定义的变量可以不需要附初始值。
使用static关键字修饰一个方法:可以直接使用类调用方法,和对象没有关系了
使用static关键字修饰一个类:内部类
如果需要了解跟多static关键字修饰字段,参考我的另一篇博客:https://www.cnblogs.com/yanxiaoge/p/10658660.html
- public class Demo {
- public static void main(String[] args){
- System.out.print(Test.name);//一般定义静态字段,最好又类来调用;
- //System.out.print(Test.name1); //只有定义了静态字段,类才可以直接调用
- }
- }
- class Test{
- String name1 = "dddsdfsd";
- static String name = "dd";
- }
static修饰方法:
- public class Demo {
- public static void main(String[] args){
- Test.setCountry("中国");
- Test h = new Test();
- System.out.print(h.country);
- }
- }
- class Test{
- static String country;
- public static void setCountry(String country){ //静态方法只能访问静态字段;不能访问非静态字段
- Test.country = country;
- }
- }
final:
- private static final int NUM = 10; //final表示该字段为常量,通常全部大写
final 修饰一个类,则该类不能被继承;final不可以修饰抽象类和接口
final 修饰一个方法不能重写,和static一样。
将类、方法、变量声明为final能够提高性能,这样JVM就有机会进行估计,然后优化。
接口中的变量都是final
常量类
- public class Demo {
- public static void main(String[] args){
- Person person = new Person(11);
- }
- }
- class Constant{ //将常量专门放在一个类中,让其他的类继承他[常量不一定必须初始化,可以在构造器中默认赋值(如果采用这种方法给常量赋值,常量不能用static修饰)]
- public static final int NUM = 10; //加上static,目的不用创建了对象,就可以直接调用常量;
- }
- class Person extends Constant{
- private final int NUM;
- public Person(int id){
- NUM = id; //在构造器中的初始化
- }
- {
- System.out.println(Constant.NUM);
- }
- }
volatile:
volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,但是注意 volatile不能确保原子性,在访问volatile变量时,不会执行加锁操作,因此也就不会执行线程阻塞。所以volatile变量是一种比sychhronized关键字更轻量级的同步机制。
原子性:原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。比如 a = 1;
volatile的适用场景:
1、对变量的写入操作不依赖其当前值(如 number++ 、count = count * 5等)
2、该变量没有包含在具有其它变量的不变式中
3、volatile关键字另一个作用就是禁止指令重排优化
参考:https://www.cnblogs.com/xuwenjin/p/9051179.html
https://www.cnblogs.com/chengxiao/p/6528109.html
补充可以看看CAS:https://blog.csdn.net/v123411739/article/details/79561458
java----static关键字(包括final)的更多相关文章
- 详解详解Java中static关键字和final关键字的功能
摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...
- static关键字和final关键字
static关键字和final关键字 static(静态) 作用 用来修饰属性.方法.代码块.内部类 static修饰属性 表示静态变量(类变量) 按是否使用static修饰,属性的分类 静态属性 当 ...
- Java SE 第二十三讲----static关键字and final关键字
1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...
- java static关键字
方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static可以用来修饰类的 ...
- Java static 关键字详解
引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- Java——static关键字
前言 static关键字算是Java中比较复杂的关键字之一,它可以修饰变量.方法.类以及代码块.下面将介绍static的具体使用. static引入的目的 static的作用 static修饰变量 s ...
- Java static 关键字学习
static:意为静态的,简单理解就是公共的.独立于实例变量之外的1.概述:static是Java中常用的关键字,一般用于变量.方法.静态代码块.内部类上.静态导包2.用法: a.用于变量上表示该变量 ...
随机推荐
- mysql查询反斜杠字符串问题
马上上线发现一个问题,太坑了 写一个查询语句,明明数据库中有,但是就是查不到,后来发现是反斜杠的问题 比如 数据库中有一个字段名称为 name 存储的值为 “海尔厨电\洗碗机” 当我使用如下sql查 ...
- Git坑点——remote: error: GH007: Your push would publish a private email address.
使用命令:git push -u origin master ,把本地库的内容推送到远程库的过程中,出现了问题 ——remote: error: GH007: Your push would pu ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- Java开发环境配置(3)--eclipse汉化插件安装、卸载 中遇到的问题
eclipse汉化中遇到的问题 网上汉化的帖子很多 如: Eclipse超级完美汉化教程_百度经验http://jingyan.baidu.com/article/e75057f28401a8ebc9 ...
- 同步&异步+阻塞&非阻塞(理解)
0 - 同步&异步 同步和异步关注的是消息通信机制. 0.1 - 同步 由“调用者”主动等待这个“调用”结果.即是,发出一个“调用”时,在没有得到结果之前,该“调用”不返回,一旦调用返回,则得 ...
- bootstrap-table前端修改后台传来的数据重新进行渲染
使用bootstrap-table显示数据,后台传回数据以后,可能需要对其做调整,如需要前端为数据添加单位 回到顶部 调整数据代码 $("#"+tableId).bootstrap ...
- Python 面向对象【2】
组合 [适合没干系的横向类,比如池塘,乌龟,鱼] 把类的实例化放到新类里面 属性名和方法名相同,属性会覆盖掉方法 绑定 方法需要实例才能被调用!! 这种限制即绑定 用self接受绑定 ...
- Maya API Test
import maya.OpenMaya as OpenMaya import maya.OpenMayaMPx as OpenMayaMPx sl = OpenMaya.MSelectionList ...
- python下载mp4 同步和异步下载支持断点续下
Range 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式: Range:(unit=first byte pos)-[last byte pos] Range 头部的格式有以下几种 ...
- 用vue+element-ui开发后台笔记
1.前端通过 formData: new FormData(), 构造对象传数值给后台! 当传给后台的参数中有图片的时候,需要把需要传输的数据通过构造对象new FormData()的形式存数据,并且 ...