Java关键字如下:
以上是java specifications中定义的keywords,一共48个,其中常见的三个看似是关键字的true, false, null,都不是关键字,而是作为一个单独标识类型。
其中,不常用到的关键字有:const,goto,native,strictfp,transient,volatile。
const和goto为java中的保留字。
native
简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。
标识符native可以与所有其它的java标识符连用,但是abstract除外。这是合理的,因为native暗示这些方法是有实现体的,只不过这些实现体是非java的,但是abstract却显然的指明这些方法无实现体。
strictfp
strictfp, 即 strict float point (精确浮点)。
strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp。
transient
变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
volatile
就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。
final
final可以修饰非抽象变量,非抽象方法,非抽象类
final修饰的类:
- final类不能被继承
- final类中的变量和方法默认是final的
final修饰的变量:
- final变量即常量,不可被赋值
- final变量(如果不是private的)可以被继承
final修饰的方法:
- final方法(如果不是private的)可以被继承
- final方法不可以被复写
(private方法默认是final的,因为private方法不可以被继承,不可以被复写。但是你可以对private方法增加final修饰符,但是这并没有意义)
static
static是在内存中分配一块区域,供整个类使用。也就是说,不管这个类有多少个实例,这些实例的static类型的变量都是共用的。
static定义的变量和方法也可以直接通过类来调用,不需要通过类的一个实例来调用。
static可以修饰变量,方法,代码块,类。(static修饰类比较特殊,static不可以修饰外部类,只可以修饰内部类)
this和super
- this代表本对象,super代表父对象
- 调用本/父对象的属性和方法可以通过this./super.的形式
- 调用本/父类的构造方法可以用this()/super()的形式(注意:这两种形式只能出现在构造方法的首行)
- 静态方法中不能使用this和super。因为静态方法是类方法,不和类的具体实例打交道,而this和super是代表的对象实例。
overide和overload
Override:
重写
发生在父类和子类之间,子类重写父类的方法
方法的名称、参数、返回值要一模一样
Overload:
重载
发生在同一个类中
方法的名称一样,参数的个数、类型、顺序不一样
(注意:返回值、方法的作用域不一样的方法不叫Overload,否则编译报错)