Java常用关键字的原理及用法
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843135.html
一:transient
用途:Java中一个类在定义时如果实现了Serilizable接口,那么这个类的对象就可以被序列化。(序列化:把对象内容转化为byte数组。反序列化:从byte数组提取信息重构出对象),但是我们考虑到类中的某些重要属性(如:密码)不想被序列化,那么我们可以用transient关键字修饰它。
用法:在声明成员变量时作为修饰符。
举例:
private transient InputStream is;
二:instanceof
用途:指出对象是否是特定类的一个实例,返回一个布尔值作为结果,以判断这个对象是否是这个特定类或者是它的子类的一个实例。
用法:result = object instanceof class
举例:
if p instanceof Person:
....
else:
....
三:final
用途:可以用于声明成员变量、方法、类以及静态变量。final声明的内容不允许被更改。
1)final类:用final去修饰一个类的时候,表示这个类不能被继承,因此就不存在被子类修改的可能了。
2)final方法:父类中定义的被final修饰的方法,不能在子类中被重写。
3)final变量:必须要在声明的同时赋予初始值;并且之后不允许更改变量的值(如果修饰的成员变量是基本类型,则表示这个变量的值不能改变;如果修饰的成员变量是一个引用类型,则是说这个引用类型变量所保存的地址不能变,但是这个引用所指向的对象里面的内容还是可以改变的。)
四:static
用途:static的主要作用在于创建独立于具体对象的域变量或者方法。
用法:作为关键字用于变量声明、方法定义、代码块前修饰。
特点:
1)static可以修饰变量、方法、代码块
2)被static修饰的内容是独立于该类的任何对象的,不属于任何一个实例对象,而是被类的实例对象所共享
3)在类被加载的时候,就会自动去加载被static修饰的部分
4)当一个类加载完毕之后,即便没有创建对象,也可以去访问静态内容
注意事项:
1)静态方法中没有this关键字,因为静态是随着类的加载而加载,而this是随着对象的创建而存在的。
2)静态比对象优先存在,因此静态可以访问静态的内容,但是静态不能访问非静态的内容。
3)非静态的可以去访问静态的内容,因为静态的内容已存在。
五:volatile
用途:volatile只能修饰变量。该变量对于所有线程可见,所有作用在该变量上的操作引起变量的值的变化都会第一时间通知到所有使用它的线程。
原理:每个线程在使用volatile变量时,如果对变量的值作出了改变,则CPU强制线程立刻把新的值写入主存中。而其他线程在使用到这个变量时,不是从缓存中读取过期值而是直接从主存中读取最新值。
用法:修饰成员变量。
六:synchronized
用途:可以把任何一个非null 对象 作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为 Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁;当synchronized作用于某一代码域时,锁住的便是对应的代码块。
原理:syncrhoized实现时使用了自旋锁,当一个线程进入竞争队列前,先自旋(等一等看锁会不会释放,一旦释放立刻获得锁对象),自旋期间线程可以做一些无意义的操作来实现暂时占用CPU而不是阻塞。线程自旋超过一定时间还没获得锁,就进入竞争队列被筛选。
用法:修饰 方法、代码块。
与volatile比较:
1)volatile比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度,也不会引发线程阻塞。
2)volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized(和lock)则可以保证变量的修改可见性和原子性。(原子性:操作不可被分割执行)
七:const
const是java中的预留关键字(java中预留关键字还有goto),现在没有作为关键字。常见于C,C++中,类似于Java的final。
Java中定义常量是通过static final组合来实现的,不是const。
Java常用关键字的原理及用法的更多相关文章
- JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- JAVA常用关键字
Java 中常用关键字: 一一解释(先以印象注明含义,若有错误或未填写的待用到后补充.更新):(蓝色为不确定部分) abstract : 虚类 boolean : 类型定义——布尔型 break : ...
- 【转载】java final 关键字的几种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]final关键字的几种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...
- Java线程池ThreadPoolExecutor原理和用法
1.ThreadPoolExecutor构造方法 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAli ...
随机推荐
- Linux性能优化实战学习笔记:第十一讲
一.性能指标 1.性能指标思维导图 2.CPU使用率 3.CPU平均负载 4.CPU缓存的命中率 CPU 在访问内存的时候,免不了要等待内存的响应.为了协调这两者巨大的性能差距,CPU 缓存(通常是多 ...
- [LeetCode] 880. Decoded String at Index 在位置坐标处解码字符串
An encoded string S is given. To find and write the decoded string to a tape, the encoded string is ...
- [LeetCode] 719. Find K-th Smallest Pair Distance 找第K小的数对儿距离
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...
- ios 信任自签名证书
1. 通过html 网络地址的方式(eg. <a href="172.26.167.82.crt">证书安装</a>)[或者通过邮件附件的方式]2. 设置- ...
- 热情组——项目冲刺 Day2
项目相关 作业相关 具体描述 班级 班级链接 作业要求 链接地址 团队名称 热情组 作业目标 实现软件的生成,以及在福大的传播 Github链接 链接地址 SCRUM部分: 成员昵称 昨日目标 开始时 ...
- 二进制安装K8S集群V1.16.3
centos linux7.5 cat > /etc/hosts << EOF 192.168.199.221 master 192.168.199.222 node1 192.16 ...
- pom中更换阿里云仓库时不要忽略了pluginRepositories
用maven也大几年了,也一直在用阿里云的中央仓库. 不喜欢在maven的settings.xml里改,更喜欢直接在pom.xml里改,因为受git管理,小伙伴们拉下来即可. 然而网上的大部分技术文章 ...
- 【02】Jenkins:第一个项目
写在前面的话 通过上一节我们成功的搭建起来 Jenkins,那么接下来就是体验如何构建我们的第一个项目了.当然在这之前我们得专门针对 Java 环境就行简单的配置. 全局工具配置 其实这次配置的主要还 ...
- .net core vue+wangEditor (双向绑定) 上传图片和视频功能
最终效果,是这样的,现在开始记录怎么做: 开始 npm 安装 wangEditor 安装好后, 因为要用vue 双向绑定 ,所以 我就把wangwangEditor 做成了一个封装组件,先看一下目录 ...
- 制作一个SSRS的ORACLE数据库报表,使用了时间类型的参数。
需求:我们这个报表是以月为单位,呈现的数据为查询为当前月的第一天到最后一天.条件类似于:time_day > 20140601 and time_day < 20140630 因为是让用 ...