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)的更多相关文章

  1. 详解详解Java中static关键字和final关键字的功能

    摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...

  2. static关键字和final关键字

    static关键字和final关键字 static(静态) 作用 用来修饰属性.方法.代码块.内部类 static修饰属性 表示静态变量(类变量) 按是否使用static修饰,属性的分类 静态属性 当 ...

  3. Java SE 第二十三讲----static关键字and final关键字

    1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...

  4. java static关键字

    方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static可以用来修饰类的 ...

  5. Java static 关键字详解

    引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...

  6. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  7. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  8. Java——static关键字

    前言 static关键字算是Java中比较复杂的关键字之一,它可以修饰变量.方法.类以及代码块.下面将介绍static的具体使用. static引入的目的 static的作用 static修饰变量 s ...

  9. Java static 关键字学习

    static:意为静态的,简单理解就是公共的.独立于实例变量之外的1.概述:static是Java中常用的关键字,一般用于变量.方法.静态代码块.内部类上.静态导包2.用法: a.用于变量上表示该变量 ...

随机推荐

  1. Django学习手册 - 基于requests API验证(一)

    验证需要知道requests提交数据的几种方式: GET 方式: # get 方式,传递数值可以直接通过url传递:(服务端接受 GET) requests.get(url='http://127.0 ...

  2. OGG初始化之将数据从文件加载到Replicat

    要使用Replicat建立目标数据,可以使用初始加载Extract从源表中提取源记录,并将它们以规范格式写入提取文件.从该文件中,初始加载Replicat使用数据库接口加载数据.在加载过程中,更改同步 ...

  3. Python笔记 【无序】 【二】

    序列list() ——把一个可迭代对象[可以是字符串,元组]转化为列表,可不带参数——生成空列表,或者带一个迭代器作为参数tuple() ——可迭代对象转化为元组str(obj) ——把obj对象转换 ...

  4. Python open() 函数

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T) 模式 描述 r 以只读方 ...

  5. Path Sum I && II & III

    Path Sum I Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that ad ...

  6. C/C++经典面试题一

    1.变量的声明和定义有什么区别? 常量:在程序执行过程中,不会发生改变的量,不能被改变的量 变量:在程序执行过程中,可以被改变的量 定义变量的方式:数据类型 变量名 = 常量: int num = 1 ...

  7. BIM 3D 数据交换格式 ----张建平(清华女)

    1.collada   EXPORTER 2.FBX    3D MAX 3.DAE 4.3D中的OBJ文件格式详解 (  http://www.cnblogs.com/slysky/p/408130 ...

  8. Shell编程中while与for的区别及用法详解【转】

    在shell编程中经常用到循环,常用的循环有for和while循环两种.while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别. 一.常用 ...

  9. python字典不区分大小写

    from multidict import CIMultiDict dic=CIMultiDict() dic["key"]="1234" print(dic[ ...

  10. .net 项目与网站区别

    背景 .net 的又一个杰作,我作为资深开发人员,好久没搞明白两者关系,后来慢慢总算琢磨明白了.在2003和2005的时候,都是用的网站方式,后来见到某同事用的项目方式,当时还很不理解,真是个傻瓜程序 ...