java关键词
private 私有的
private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。
只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。
在类的外部或者对于子类而言,它们是不可见的。 所有类成员的默认访问范围都是 package 访问,
也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
protected 受保护的
protected 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。
可以在声明 protected 类、方法或字段的类、
同一个包中的其他任何类以及任何子类(无论子类是在哪个包中声明的)中引用这些类、方法或字段。
所有类成员的默认访问范围都是 package 访问,
也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
public 公共的
public 关键字是可以应用于类、方法或字段(在类中声明的变量)的访问控制修饰符。
可能只会在其他任何类或包中引用 public 类、方法或字段。
所有类成员的默认访问范围都是 package 访问,
也就是说,除非存在特定的访问控制修饰符,否则,可以从同一个包中的任何类访问类成员。
类、方法和变量修饰符
abstract 声明抽象
abstract关键字可以修改类或方法。abstract类可以扩展(增加子类),
但不能直接实例化。abstract方法不在声明它的类中实现,
但必须在某个子类中重写。采用 abstract方法的类本来就是抽象类,并且必须声明为abstract。
class类
class 关键字用来声明新的 Java 类,该类是相关变量和/或方法的集合。
类是面向对象的程序设计方法的基本构造单位。类通常代表某种实际实体,
如几何形状或人。类是对象的模板。每个对象都是类的一个实例。要使用类,
通常使用 new 操作符将类的对象实例化,然后调用类的方法来访问类的功能。
extends 继承、扩展
extends 关键字用在 class 或 interface 声明中,
用于指示所声明的类或接口是其名称后跟有 extends 关键字的类或接口的子类。
子类继承父类的所有 public 和 protected 变量和方法。
子类可以重写父类的任何非 final 方法。一个类只能扩展一个其他类。
final 最终、不可改变
final 关键字可以应用于类,以指示不能扩展该类(不能有子类)。
final 关键字可以应用于方法,以指示在子类中不能重写此方法。
一个类不能同时是 abstract 又是 final。abstract 意味着必须扩展类,
final 意味着不能扩展类。
一个方法不能同时是 abstract 又是 final。abstract 意味着必须重写方法,
final 意味着不能重写方法。
implements实现
implements 关键字在 class 声明中使用,
以指示所声明的类提供了在 implements 关键字后面的名称所指定的接口中所声明的所有方法的实现。
类必须提供在接口中所声明的所有方法的实现。一个类可以实现多个接口。
interface 接口
interface 关键字用来声明新的 Java 接口,接口是方法的集合。
接口是 Java 语言的一项强大功能。任何类都可声明它实现一个或多个接口,
这意味着它实现了在这些接口中所定义的所有方法。
实现了接口的任何类都必须提供在该接口中的所有方法的实现。一个类可以实现多个接口。
native 本地
native 关键字可以应用于方法,以指示该方法是用 Java 以外的语言实现的。
new 新,创建
new 关键字用于创建类的新实例。
new 关键字后面的参数必须是类名,并且类名的后面必须是一组构造方法参数(必须带括号)。
参数集合必须与类的构造方法的签名匹配。
= 左侧的变量的类型必须与要实例化的类或接口具有赋值兼容关系。
static 静态
static 关键字可以应用于内部类(在另一个类中定义的类)、方法或字段(类的成员变量)。
通常,static 关键字意味着应用它的实体在声明该实体的类的任何特定实例外部可用。
static(内部)类可以被其他类实例化和引用(即使它是顶级类)。
在上面的示例中,另一个类中的代码可以实例化 MyStaticClass 类,
方法是用包含它的类名来限定其名称,如 MyClass.MyStaticClass。
static 字段(类的成员变量)在类的所有实例中只存在一次。
可以从类的外部调用 static 方法,而不用首先实例化该类。这样的引用始终包括类名作为方法调用的限定符。
模式:public final static <type> varName = <value>;
通常用于声明可以在类的外部使用的类常量。
在引用这样的类常量时需要用类名加以限定。在上面的示例中,
另一个类可以用 MyClass.MAX_OBJECTS 形式来引用 MAX_OBJECTS 常量。
strictfp 严格,精准
strictfp的意思是FP-strict,也就是说精确浮点的意思。
在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,
Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,
以致于得到的结果往往无法令人满意。而一旦使用了strictfp来声明一个类、接口或者方法时,
那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。
因此如果想让浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,
那就请用关键字strictfp。
可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法
以及构造函数声明strictfp关键字
synchronized线程、同步
synchronized 关键字可以应用于方法或语句块,并为一次只应由一个线程执行的关键代码段提供保护。
synchronized 关键字可防止代码的关键代码段一次被多个线程执行。
如果应用于静态方法,那么,当该方法一次由一个线程执行时,整个类将被锁定。
如果应用于实例方法,那么,当该方法一次由一个线程访问时,该实例将被锁定。
如果应用于对象或数组,当关联的代码块一次由一个线程执行时,对象或数组将被锁定。
transient 短暂
transient 关键字可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。
当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,
然而非transient型的变量是被包括进去的。
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,
可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。
为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。
当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,
然而非transient型的变量是被包括进去的。
volatile 易失
volatile 关键字用于表示可以被多个线程异步修改的成员变量。
注意:volatile 关键字在许多 Java 虚拟机中都没有实现。
volatile 的目标用途是为了确保所有线程所看到的指定变量的值都是相同的。
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;
与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,
但是它所能实现的功能也仅是 synchronized 的一部分。