Java关键字总结(一)

static总结:

1、修饰静态变量,通过类名.变量名,不需要实例化对象,属于静态资源,所有类实例共享

2、修饰静态方法,通过类名.方法,不需要实例化对象,属于静态资源,所有类实例共享

3、静态代码块,类初始化的时候引用,只执行一次

4、静态资源的加载顺序,按照定义顺序加载,并且按照父类静态代码块->子类静态代码快顺序执行

5、静态代码块对应定义在它之后的变量可以赋值,但不能访问

6、import static 资源,建议少用,影响代码的可读性

注意:静态方法内不能有非静态资源,非静态方法类可以引用静态资源,static修饰的静态变量不可序列化(原因:静态变量属于类变量,不属于实例变量)

final总结:

1、修饰引用:

a、修饰基本数据类型,则该数据为常量,值无法修改

b、修饰引用数据类型,如对象、数组,则该对象、数组本身可以修改,但指向该对象、数组的引用不可修改

c、修饰类的引用,该引用必须被当场赋值

2、修饰方法:最终的方法,不可被子类重写,但可以继承

3、修饰类:简称断子绝孙类,不可被继承。如String

transient总结:

1、如果想让对象中的某个成员变量不被序列化,可以在成员变量上加上transient关键字

2、只能修饰变量,不能修饰方法和类

3、用户自定义的类变量,如果被transient修饰需要实现serializable接口

4、银行卡、密码等数据适合用transient修饰

注意:本地变量(native)不能被transient修饰

volatile总结:

volatile可见性是通过汇编加上Lock前缀指令,触发底层的MESI缓存一致性协议来实现的,MESI缓存的最小单元是缓存行,当共享的数据长度超过一个缓存行的长度,MESI协议就会失效,会触发总线加锁机制

1、保证内存可见性

2、禁止指令重排序:如单列模式双重锁,并发的情况下会出现指令重排序

3、不能保证原子性

synchronized总结:

保证同一时刻只有一个线程可以执行某个方法或代码块,也可以保证一个线程的变化可见性和共享变量的内存可见性可以代替volatile

1、方法

a、实例方法,锁的是类的实例对象

b、静态方法,锁的是类对象

2、代码块

a、实例对象,锁的是类的实例对象

b、class对象,锁的是类对象

c、任意实例对象中的变量参数,锁的的是实例对象

原理:方法级的同步是隐式的,无需通过字节码指令控制(monitorenter,monitorexit两个指令),取而代之的是字节码中会出现ACC_SYNCHRONIZED标识,指明该方法为同步方法。

Original: https://www.cnblogs.com/nisu-blog/p/15568411.html
Author: Nss、
Title: Java关键字总结(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/576154/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 软件测试基础理论(2)

    一, 为什么要进行软件测试 为了通过软件&amp…

    数据库 2023年6月16日
    087
  • gorm 版本对比

    两个版本 github.com/jinzhu/gorm v1.9.16 gorm.io/gorm v1.21.3 Open // jinzhu func Open(dialect …

    数据库 2023年6月9日
    0116
  • 3_JavaScript

    JavaScript语言诞生主要是完成页面的数据验证, 因此它运行在客户端, 需要运行浏览器来解析执行JavaScript代码 JS是弱类型, Java是强类型 特点 交互性(它可…

    数据库 2023年6月11日
    092
  • 01-MySQL基础

    1、数据库的基本概念 1.1、文件操作数据的缺点 查找,增加,修改,删除数据等操作比较麻烦(特别是txt),效率低 1.2、数据库的介绍 存储和管理数据的仓库 英文单词为Dtaba…

    数据库 2023年5月24日
    059
  • Docker三种文件系统总结

    概述 容器持久化,相比小伙伴都不陌生。通过Docker的volume,我们可以非常方便的实现容器数据的持久化存储。但volume之下的文件系统,相比许多小伙伴并不是非常清楚。因而本…

    数据库 2023年6月11日
    0139
  • 【黄啊码】MySQL入门—1、SQL 的执行流程

    大家好!我是黄啊码,鉴于大家对于学习的热情,从今天起,将连载mysql的相关知识,需要学习的可以注意我的更新学习,后期估计会开启付费专栏,但当前完全可以白嫖,希望大家珍惜! 首先我…

    数据库 2023年6月16日
    080
  • Pisanix v0.2.0 发布|新增动态读写分离支持

    1.动态读写分离介绍 1.1 介绍 读写分离是业界使用 MySQL 高可用最常用的方案之一,在实际场景中可以提高查询性能,降低服务器负载。本次版本在 v0.1.0 静态规则基础上增…

    数据库 2023年6月16日
    097
  • 2022-8-26 jq简单了解

    Query 是一个 JavaScript 函数库。 jQuery 是一个轻量级的”写的少,做的多”的 JavaScript 库。jQuery 库包含以下功能…

    数据库 2023年6月14日
    0120
  • 10、比较Bigdecimal类型是否相等的方法

    一、Bigdecimal.equals()详解: Bigdecimal的equals方法不仅仅比较值的大小是否相等,首先比较的是scale(scale是bigdecimal的保留小…

    数据库 2023年6月6日
    086
  • docker-compose部署rocketmq

    docker-compose安装: Ubuntu下载docker-compose文件 sudo curl -L https:/…

    数据库 2023年6月11日
    081
  • HackerRank第一趴–Basic Select

    ID number NAME VARCHAR2(17) COUNTRYCODE VARCHAR2(3) DISTRICT VARCHAR2(20) POPULATION numbe…

    数据库 2023年6月16日
    092
  • 【StoneDB研发日志】列式存储 delete方案调研

    MySQL删除数据的方式 以MySQL 5.7为例,数据库删除数据的方式一共有以下三种: delete truncate drop 三种方式都可以删除数据,但使用场景有所不同。 […

    数据库 2023年5月24日
    093
  • Shell 第二章《流控》

    前言 无论什么编程语言都离不开条件判断(流控)。SHELL也不例外。例如,用户输入的密码不够长时提示用户,你太短了例如,用户输入了备份的目录,如果有目录继续备份,如果没有目录创建目…

    数据库 2023年6月14日
    097
  • MySQL架构

    1_逻辑架构 1.1.连接层 系统(客户端)访问MySQL服务器前,做的第一件事就是 建立TCP连&#x6…

    数据库 2023年5月24日
    0100
  • SQL Server什么时候启用“锁定内存页”选项 (Windows)

    在SQL Server的配置中,尤其是那些应用服务器和数据库服务器共用/混用的情况下,最好启用”锁定内存页”选项。反而对于单独的SQL Server数据库服…

    数据库 2023年6月11日
    0100
  • 带缓冲的输入/输入流

    BufferedInputStream类 与 BufferedOutputStream类 BufferedInputStream类 可以对所有InputStream的子类进行缓冲区…

    数据库 2023年6月16日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球