1.transient (暂时的)
变量修饰符。标记为transient的变量,在对象存储时,这些变量状态不会被持久化。当对象序列化的保存在存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient。
class T {
transient int a; //不需要维持
int b; //需要维持
}
这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。
2.native(本地的)
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于接口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
public interface TestInterface {
void doMethod();
}
public class Test implements TestInterface {
public native void doMethod();
private native int doMethodB();
public native synchronized String doMethodC();
static native void doMethodD();
}
3.volatile (易失的)
volatile修饰变量。在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。volatile有时 可以代替synchronized。
看看Java Language Specification中的例子。
条件:一个线程不停的调用方法one(),一个线程不停的调用方法two()。我测试过多次,这种情况好像一直没有出现。
class Test {
static int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}
class Test {
static int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}
结果偶尔会出现j大于i的情况,因为方法没有同步,所以会出现i和j可能不是一次更新。一种防止这种情况发生的办法就是声明两个方法为synchronized 的。
class Test {
static int i = 0, j = 0;
static synchronized void one() { i++; j++; }
static synchronized void two() {
System.out.println("i=" + i + " j=" + j);
}
}
class Test {
static int i = 0, j = 0;
static synchronized void one() { i++; j++; }
static synchronized void two() {
System.out.println("i=" + i + " j=" + j);
}
}
这样可以防止两个方法同时被执行,还可以保证j和i被同时更新,这样一来i和j的值一直是一样的。
另外一种途径就是把i和j声明为volatile。
class Test {
static volatile int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}
4.strictfp(精确浮点)
参看http://zhoujingxian.iteye.com/admin/blogs/698205
分享到:
相关推荐
native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...
其中,修饰符可以是static、abstract、final、native、strictfp、synchronized等,结果类型是方法的返回类型,方法名是方法的名称,参数列表是方法的参数列表,throws子句是方法可能抛出的异常。 成员方法的修饰符...
Java 语言中有多种修饰词,总共定义了 11 种,包括 public、protected、private、abstract、static、final、native、strictfp、synchronized、volatile 和 transient。这些修饰词可以应用于类、接口、成员、方法、...
介绍:strictfp 修饰的类中所有的方法都隐藏了 strictfp 修饰词,方法执行的所有浮点计算遵守 IEEE 754 标准,所有取值包括中间的结果都必须表示为 float 或 double 类型,而不能利用由本地平台浮点格式或硬件提供的...
Java 中的关键字有 native、strictfp、transient 和 volatile 等。 1. native 修饰符,表示方法是由另外一种语言(如 c/c++,FORTRAN,汇编)实现的本地方法。 2. strictfp 修饰符,表示类或方法遵守 IEEE-754 规范...
private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...
- `strictfp`修饰符确保浮点计算遵循IEEE 754标准,避免因平台差异导致的精度问题。 - 适用于需要严格一致性的科学计算场景。 9. **synchronized**: - `synchronized`用于方法或代码块,用于控制多线程环境中的...
它确保了线程间的可见性和有序性,即任何线程对`volatile`字段的修改对其他线程立即可见,且不会发生指令重排序。 11. **transient**: - 使用对象:字段 - 介绍:`transient`修饰符用于指定在序列化过程中不应被...
- 修饰符顺序:public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。 - 类和接口的声明顺序应遵循一定的结构,包括静态字段、静态初始化块、字段、初始...
2. 类、方法和变量修饰符:abstract、final、static、transient、volatile - abstract表示抽象类或方法,抽象类不能实例化,抽象方法必须在子类中实现。 - final表示最终的,用于类表示不可继承,用于方法表示不可...
99乘法表java源码 ls 查看目录下文件 java规则 代码都定义在类中,用class...char fianlly native strictfp void class float new super volatile continue for null switch while default if package enum synchroniz
* transient * native * strictfp * ... 四、运算符 Java中的运算符是用于执行数学运算、逻辑运算、赋值运算等操作的符号。Java中的运算符有: * 算术运算符:+、-、\*、/、%、++、-- * 赋值运算符:=、+=、-=、\...
方法修饰符如`static`、`abstract`、`final`、`native`、`strictfp`和`synchronized`分别表示静态方法、抽象方法、不可覆盖的方法、本地方法、浮点计算精确度和同步方法。 - 非`private`的方法可以被子类继承,方法...
- **native**:声明方法是原生方法,其实现由C/C++或其他本地库提供,通过JNI(Java Native Interface)调用。 - **synchronized**:同步方法,确保同一时间只有一个线程可以执行该方法,用于线程安全。 - **...
- **方法、变量和类修饰符**:private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native和transient,这些修饰符用于控制访问权限、确定变量和方法的特性,以及类的实现方式...
6. native, strictfp和transient: - `native`: 用于表示方法是用其他语言(如C++)实现的,Java本身不提供实现。 - `strictfp`: 用于确保浮点运算的精确性,遵循IEEE 754标准,避免平台差异带来的计算结果不一致。...
- `strictfp`: 严格浮点,确保浮点计算在所有平台上具有可预测的结果,避免由于平台差异导致的浮点运算精度问题。 - `interface`: 接口,定义了一组抽象方法,用于实现多继承。Java 8引入了默认方法(用`default`...
1. 有效代码:`^[\t ]*(class|interface|void|public|private|protected|import|static|final|abstract|transient|volatile|synchronized|native|strictfp|default|yield|async|await)[\t ]+.+` 2. 注解:`^[\t ]*@...
9. 其他关键字:包括native、strictfp、transient、volatile、assert、goto、const和enum等8个关键字。 标识符是用户在编程时给类、变量、常量、方法(函数)、语句块等起的名字。Java语言中标识符不包括关键字,而...