`
alex1960
  • 浏览: 63708 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

transient、volatile、strictfp关键字

    博客分类:
  • JAVA
阅读更多

一、transient

        如果用声明一个实例变量,当对象存储时,它的值不需要维持,当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
二、volatile

用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。volatile很容易被误用,用来进行原子性操作。
注意:在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制
二、strictfp

    一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。注意:可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字。

或者通过java.math.BigDecimal;

public class Arith {
    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;

    //这个类不能实例化
    private Arith()
    {
        ;
    }
    /**
    * 提供精确的加法运算。
    * @param v1 被加数
    * @param v2 加数
    * @return 两个参数的和
    */
    public static double add(double v1,double v2)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2).doubleValue();
    }
    /**
    * 提供精确的减法运算。
    * @param v1 被减数
    * @param v2 减数
    * @return 两个参数的差
    */
    public static double sub(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }
    /**
    * 提供精确的乘法运算。
    * @param v1 被乘数
    * @param v2 乘数
    * @return 两个参数的积
    */
    public static double mul(double v1,double v2)
    {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }
    /**
    * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
    * 小数点以后10位,以后的数字四舍五入。
    * @param v1 被除数
    * @param v2 除数
    * @return 两个参数的商
    */
    public static double div(double v1,double v2)
    {
        return div(v1,v2,DEF_DIV_SCALE);
    }
    /**
    * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
    * 定精度,以后的数字四舍五入。
    * @param v1 被除数
    * @param v2 除数
    * @param scale 表示表示需要精确到小数点以后几位。
    * @return 两个参数的商
    */
    public static double div(double v1,double v2,int scale)
    {
        if(scale<0)
        {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    /**
    * 提供精确的小数位四舍五入处理。
    * @param v 需要四舍五入的数字
    * @param scale 小数点后保留几位
    * @return 四舍五入后的结果
    */
    public static double round(double v,int scale)
    {
        if(scale<0)
        {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}

 

 

 

 

分享到:
评论

相关推荐

    java学习_java语法基础

    浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient关键字用于标记一个成员变量,表示该变量不应被序列化,即不会被保存在持久...

    JAVA常见面试题及解答

    1. **`transient` 和 `volatile` 关键字**: - `transient` 关键字用于标记一个实例变量,表明该变量在序列化时不应被持久化。这意味着当对象被序列化并存储到持久化存储中时,`transient`修饰的变量不会被保存,而...

    Java面试宝典2015

    strictfp关键字的使用 - `strictfp`关键字用于确保浮点运算的一致性和准确性。当一个类或方法被声明为`strictfp`时,其内部所有的浮点运算都将遵循IEEE-754标准,从而保证跨平台的运算结果一致性。这对于依赖于...

    java中的关键字大全

    `volatile`关键字用于声明变量在多线程环境下的可见性。 ```java class Counter { volatile int count = 0; } ``` ##### const 虽然`const`被定义为关键字,但在Java中并未使用。 ```java // 不正确的用法 // ...

    java 关键字查询文档

    50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`enum`、`...

    源码关键字统计.rar

    `switch`, `synchronized`, `this`, `throw`, `throws`, `transient`, `try`, `void`, `volatile`, `while`。可以创建一个关键字列表,然后遍历每行代码,检查是否包含这些关键字。 为了提高效率,我们可以使用...

    Java关键字的用法

    `strictfp`关键字用于保证浮点运算的一致性和精确度。 **示例:** ```java public strictfp class Calculator { public float multiply(float a, float b) { return a * b; } } ``` #### 39. `super` `super`...

    JAVA笔试总结 -- 非常全面

    native,transient,volatile,strictfp,CMM,synchronized,java socket,压缩与解压缩,多线程,垃圾回收算法,JVM ClassLoader,IO流,反射机制,JNDI, GUI布局管理器,JMS, Java Mail, JNDI reference,java事件处理...

    Java基础标识符关键字数据类型PPT教案学习.pptx

    private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...

    Java关键字

    50. **volatile** - 用于共享变量,确保多线程环境中的可见性和顺序一致性。 51. **while** - 循环结构,先检查条件再执行循环体。 以上就是Java的48个关键字的概述,它们构成了Java编程的基础,理解并熟练掌握...

    java编程全部关键字解释

    这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...

    java关键字

    10. **volatile**: 用于标记变量,确保多线程环境中的可见性和有序性。 11. **native**: 用于标记本地方法,即用其他语言编写的方法。 12. **synchronized**: 用于实现同步控制,保证线程安全。 #### 其他关键字 ...

    Java标识符、关键字和保留字

    - 修饰方法、类、属性和变量关键字:如`static`、`final`、`native`、`synchronized`、`transient`、`volatile`、`strictfp`,用于提供额外的信息来修饰类、方法和变量。 - 异常处理关键字:如`try`、`catch`、`...

    java面试题大全

    1. **关键字 transient 和 volatile**: - `transient` 是Java的关键字,用于标记字段,表明该字段的值不会在序列化过程中被持久化。这意味着当对象被序列化后,被`transient`修饰的变量将不会包含在序列化的表示中...

    Java的关键字与保留字

    38. **strictfp**:用于强制浮点计算遵循IEEE 754标准。 39. **super**:用于引用父类的对象。 40. **switch**:用于基于不同条件执行不同的代码块。 41. **synchronized**:用于同步代码块,确保线程安全。 42. **...

    java关键字,适合新手的ppt

    修饰符如`private`, `public`, `protected`定义了访问权限,`final`, `static`, `abstract`, `native`, `synchronized`, `volatile`, `strictfp`, `transient`分别用于定义不可变对象、静态成员、抽象方法、本地方法...

    java关键字.pdf

    2. 类、方法和变量修饰符:abstract、final、static、transient、volatile - abstract表示抽象类或方法,抽象类不能实例化,抽象方法必须在子类中实现。 - final表示最终的,用于类表示不可继承,用于方法表示不可...

    java关键字、保留字

    46. **transient** - **用途**:用于标注对象序列化过程中不需要保存的变量。 47. **try** - **用途**:用于尝试执行一段代码,并捕获可能发生的异常。 48. **void** - **用途**:表示空类型,用于声明无...

    JAVA关键字

    49. **volatile**:修饰字段,确保多线程环境下的可见性和不被优化。 50. **while**:用于循环,只要条件为真就继续执行。 了解并熟练掌握这些关键字对于编写高质量的Java代码至关重要。HTML制作的文档使得这些...

    01-Java语言基础(关键字)

    以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...

Global site tag (gtag.js) - Google Analytics