对于绝大部分JAVA工程师而言,大部分的关键字也是能够看懂的,但还是相当一部分比较不常见的关键字,妨碍了代码阅读。
本文力图收集一些个人认为在CRUD机械工作中可能比较少见的一些关键字/保留字。
此类关键字主要用于修饰方法和类。
收集过程会持续一段时间,现在暂时没有时间也没有必要找出个人为人需要整理的,只会遇到就更新一下。
一、概述
需要注意的是,不同的版本中,关键字包含的内容不是一样的。
大体而言:
- 随着版本的发展,关键字越来越多
- 增长的幅度不定,有的版本还是相当克制的,甚至可能有些版本没有出现新的关键字;有的版本会新增许多
- 大部分的关键字,在java1.0的时候已经确定下来
如果想知道具体有哪些,最好阅读官方的文档,地址是:https://docs.oracle.com/javase/specs/index.html
当前有从6~23有关版本的文档。
我们看下几个关键版本的关键字差别
JAVA8
50个。
JAVA17
67个,注意下划线也算,比J8多了很多
JAVA23
68个,比J17多了一个when
可以看到,不同的版本,有差异。
本文主要讨论截止JAVA23的部分关键字:
- assert
- default
- transient
- strictfp
- volatile
- native
- exports
- opens
- requires
- yield
- module
- permites
- sealed
- var
- provides
- to
- when
除了这些语言中的关键字(保留字),我们还会在javaDoc中看到许多专业词语,虽然使用翻译软件能够解决一些问题,但毫无疑问
如果能够直接阅读无疑能提高效率,并避免翻译过程中的曲解问题。
二、关键字细节
2.1、assert
释义:断言;生效;维护自己的权利(或权威);坚持自己的主张;明确肯定;表现坚定
说明:这个东西主要是为了辅助开发调试用的-如果条件不成立那么会终端运行。
用法:
a. assert 布尔表达式:条件不成立后的警告
b.需要在运行时候设置vm选项 -ea
示例:
assert 1!=1:"1等于1";
这个东西有助于开发调试。
2.2、default
释义:默认
说明:
a.default关键字用于接口,从J9开始出现的,允许定义一个默认的实现
b.在注解中为属性提供默认值
示例:
例一、接口默认函数
/** * 接口特性示例,包含了j7~j17 */ public interface ITool {/** * @apiNote 收起来 * 这是默认方法 * 实现类可以覆盖,也可以不覆盖。 * 可以调用其它四种类型的方法 * 如果每个子类实现的都是一样的,就可以用这个。这样可以节约代码,也好维护 * @since J8 */ default void putAway() { //调用 private static //decay(); //调用 private //flash(); //调用 public abstract //repair(); //调用 public static //show(); } default void putAway(String msg) { } }
例二、注解
@Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {ValidMessage.class}) @Documented public @interface ValidIsPositive { String message() default ""; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
2.3、transient
释义:短暂的;临时的;转瞬即逝的;暂住的;过往的;倏忽;临时工;过往旅客;暂住某地的人;
说明:申明某个字段/属性不能被序列化(指的是java自身,非JSON系列化)
对象序列化的时候,部分属性不需要/无法序列化,通过这个标记告诉序列化操作,不要处理。
和JACKSON等序列化比较,java的默认序列化主要用于内部交流和网络传输,重点在于内部。
而后者强调展示和跨程序交流。
示例:
package study.base.serialize; import java.io.*; public class SerializeTest implements Serializable { private static final long serialVersionUID = 1L; private String name; // 这个字段不会被序列化 private transient String password; public SerializeTest(String name, String password) { this.name = name; this.password = password; } @Override public String toString() { return "{" + "name='" + name + '\'' + ", password='" + (password != null ? "******" : "null") + '\'' + '}'; } public static void main(String[] args) { SerializeTest test = new SerializeTest("中国❤ 标签:线程,之十,JAVA,示例,关键字,volatile,java,public,保留字 From: https://www.cnblogs.com/lzfhope/p/18454841