(接上篇Java关键字(一) :http://java--hhf.iteye.com/blog/1722260 )
6.访问修饰5个:这些关键字相信大家都早就见过而且很熟悉了,但是它们
牵涉到的些关于在不同包不同类创建对象后权限的问题就很容易混淆,
值得注意下。
同类 | 同包 | 不同包 | 父子类同包 | 父子类不同包 | |
public | 可见 | 可见 | 可见 | 可见 | 可见 |
protected | 可见 | 可见 | 不可见 | 可见 | 不可见 |
private | 可见 | 不可见 | 不可见 | 不可见 | 不可见 |
final
1.final修饰类:表示该类不可继承
final不能修饰interface接口
2.final修饰方法:表示该方法不能被子类覆盖(即子类不能重写父类
的final方法,可以继承)
final不能修饰构造函数
3.final修饰字段属性:表示属性值第一次初始化后不能被修改
final属性可以直接初始化或在构造函数中初始化
如果属性是直接初始化,则其值不能被其它函数(包括构造函数)
修改
4.final修饰函数参数 ,参数值不能被函数修改
5.final修饰函数中的局部变量,变量第一次初始化后不能被修改
static
1.static修饰成员函数:该成员函数不能使用this对象
static不能修饰构造函数
static不能修饰函数参数
static不能修饰局部成员变量
2.static修饰成员字段,当类被虚拟机加载时,首先按照字段声明的
先后顺序对static成员字段进行初始化
3.static修饰语句块,当类被虚拟机加载时,按照声明顺序先后初始
化static成员字段和static语句块
static所修饰的方法和字段是只属于类,所有对象共享。
在static所修饰的函数和语句块中不能使用非static成员字段。
在Java不能直接定义全局变量,是通过static来实现的
在Java中没有const,不能直接定义常量,通过static final来实现
它可以通俗的叫做全局常量。
7.不经常使用的关键字7个;
instanceof 一个二元操作符,和==,>,<是同一类东西。由于它是由
字母组成的,所以也是Java的保留关键字。它的作用是测
试它左边的对象是否是它右边的类的实例,返回boolean类
型的数据。可以用在继承中的子类的实例是否为父类的实
现。相当于c#中的is操作符。
boolean isobject = s instanceof Object;
serialization 提供了一种持久化对象实例的机制。当持久化对象
时,可能有一个特殊的对象数据成员,我们不想用
serialization机制来保存它。为了在一个特定对象的一个
域上关闭serialization,可以在这个域前加上关键字
transient。当一个对象被序列化的时候,transient型变
量的值不包括在序列化的表示中,然而非transient型的变
量是被包括进去的。
assert 编写代码时,我们总是会做出一些假设,断言就是用于在
代码中捕捉这些假设,可以将断言看作是异常处理的一种
高级形式。断言表示为一些布尔表达式,程序员相信在程
序中的某个特定点该表达式值为真。可以在任何时候启用
和禁用断言验证,因此可以在测试时启用断言,而在部署
时禁用断言。同样,程序投入运行后,最终用户在遇到问
题时可以重新起用断言
//断言只有在Debug模式下才有效,它可以有两种形式
2.assert Expression1:Expression2
volatile 就像大家更熟悉的const一样,volatile是一个类型修饰符
它是被设计用来修饰被不同线程访问和修改的变量。如果没
有volatile,基本上会导致这样的结果:要么无法编写多线
程程序,要么编译器失去大量优化的机会
native Native Method就是java调用非java代码的接口。
strictfp, 即 strict float point (精确浮点)。
可应用于类、接口或方法。使用 strictfp 关键字声明一个方
法时,该方法中所有的float和double表达式都严格遵守FP-
strict的限制,符合IEEE-754规范.当对一个类或接口使用
strictfp 关键字时,该类中的所有代码,包括嵌套类型中的
初始设定值和代码,都将严格地进行计算。严格约束意味着所
有表达式的结果都必须是 IEEE 754算法对操作数预期的结
果,以单精度和双精度格式表示。
如果你想让你的浮点运算更加精确,而且不会因为不同的硬件
平台所执行的结果不一致的话,可以用关键字strictfp.
public static void main(String[] args){
float aFloat = 0.6710339f;
double aDouble = 0.04150553411984792d;
double sum = aFloat + aDouble;
float quotient = (float)(aFloat / aDouble);
System.out.println("float: " + aFloat);
System.out.println("double: " + aDouble);
System.out.println("sum: " + sum);
System.out.println("quotient: " + quotient);
}
}
float: 0.6710339
double: 0.04150553411984792
sum: 0.7125394529774224
quotient: 16.167336
synchronized 代表这个方法加锁,相当于不管哪一个线程(例如线程
A),运行到这个方法时,都要检查有没有其它线程B(或者
C、 D等)正在用这个方法,有的话要等正在使用
synchronized方法的线程B(或者C 、D)运行完这个方法
后再运行此线程A,没有的话,直接运行。它包括两种用法:
synchronized 方法和 synchronized 块。
----(完结)