• java中不常见的keyword:strictfp,transient


     

    1.strictfp, 即 strict float point (精确浮点)。
      strictfp keyword可应用于类、接口或方法。使用 strictfp keyword声明一个方法时,该方法中全部的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp keyword时,该类中的全部代码,包含嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着全部表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
      假设你想让你的浮点运算更加精确,并且不会由于不同的硬件平台所运行的结果不一致的话,能够用keywordstrictfp.
    演示样例 1
      以下的演示样例演示了一个使用 strictfp 修饰符声明的类。
    Java代码 
    package com.magical;  
     
    // Example of precision control with strictfp  
    public strictfp class MyClass {  
        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);  
        }  

    package com.magical;

    // Example of precision control with strictfp
    public strictfp class MyClass {
     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

    2.transient

    当串行化某个对象时,如果该对象的某个变量是transient,那么这个变量不会被串行化进去。也就是说,如果某个类的成员变量是transient,那么当通过

    ObjectOutputStream把这个类的某个实例

    保存到磁盘上时,实际上transient变量的值是不会保存的。由于当从磁盘中读出这个对象的时候,对象的该变量会没有被赋值。

        另外这篇文章还提到,当从磁盘中读出某个类的实例时,实际上并不会运行这个类的构造函数,而是读取这个类的实例的状态,而且把这个状态付给这个类的对象。

     

     

      import java.util.*;
    public class LoggingInfo implements java.io.Serializable

    {

    private Date loggingDate = new Date();

    private String uid;

    private transient String pwd;

    LoggingInfo(String user, String password)

    {

    uid = user;

    pwd = password;

    }

    public String toString()

    {

    String password=null;

    if(pwd == null)

    {

    password = "NOT SET";

    }

    else

    {

    password = pwd;

    }

    return "logon info: " + "user: " + uid +

    " logging date : " + loggingDate.toString() +

    " password: " + password;

    }

    }

    import java.io.*;
    public class Serializable{
     
     
     public static  void main(String args[]){
     
     
     
     
      LoggingInfo logInfo = new LoggingInfo("小徐", "不知道");

      System.out.println(logInfo.toString());

      try

      {

      ObjectOutputStream o = new ObjectOutputStream(

      new FileOutputStream("logInfo.out"));

      o.writeObject(logInfo);

      o.close();

      }

      catch(Exception e) {//deal with exception
     
      e.printStackTrace();
      }

     // To read the object back, we can write

      try

      {

      ObjectInputStream in =new ObjectInputStream(

      new FileInputStream("logInfo.out"));

      LoggingInfo logInfo1 = (LoggingInfo)in.readObject();

      System.out.println(logInfo1.toString());
     
      }
     
      catch(Exception e)
       {//deal with exception
        e.printStackTrace();
       } 
      
     }
    }

    import java.util.*;
    public class LoggingInfo_ implements java.io.Serializable

    {

    private Date loggingDate = new Date();

    private String uid;

    private transient String pwd;

    public  LoggingInfo_()

    {

    this.uid = "小徐";

    this.pwd = "不知道";

    }

    public String toString()

    {

    String password=null;

    if(pwd == null)

    {

    password = "NOT SET";

    }

    else

    {

    password = pwd;

    }

    return "logon info: " + "user: " + uid +

    " logging date : " + loggingDate.toString() +

    " password: " + password;

    }

    }

    import java.io.*;
    public class Serializable_{
     
     
     public static  void main(String args[]){
     
     
      LoggingInfo_ logInfo_ = new LoggingInfo_();

      System.out.println(logInfo_.toString());

      try

      {

      ObjectOutputStream o = new ObjectOutputStream(

      new FileOutputStream("logInfo_.out"));

      o.writeObject(logInfo_);

      o.close();

      }

      catch(Exception e) {//deal with exception
     
      e.printStackTrace();
      }

     // To read the object back, we can write

      try

      {

      ObjectInputStream in =new ObjectInputStream(

      new FileInputStream("logInfo_.out"));

      LoggingInfo_ logInfo_1 = (LoggingInfo_)in.readObject();

      System.out.println(logInfo_1.toString());
     
      }
     
      catch(Exception e)
       {//deal with exception
        e.printStackTrace();
       }  
     }
     
    }

  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4049229.html
Copyright © 2020-2023  润新知