java 中不常见的关键字:strictfp,transient
1.strictfp, 即 strict float point (精确浮点)。
strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.
示例 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: \n " + "user: " + uid +
"\n logging date : " + loggingDate.toString() +
"\n 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: \n " + "user: " + uid +
"\n logging date : " + loggingDate.toString() +
"\n 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();
}
}
}
java 中不常见的关键字:strictfp,transient相关推荐
- Java中不常见的关键字 / 修饰符(volatile , native , transient)
既然是不常见的 , 那public , private , static , final等之类的关键字都不在本次讨论范围之内了 . 如果这几个还不能理解的话 , 不妨重新温习一下Java基础 . 1 ...
- Java中的50个关键字
2019独角兽企业重金招聘Python工程师标准>>> Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式 ...
- [转载] Java中的50个关键字
参考链接: Java平台如何独立 Java中的50个关键字 关键字也称为保留字,是指java语言中规定了特定含义的标示符.对于保留字,用户只能按照系统规定的方式使用,不能自行定义.Java中有50个常 ...
- Java中的两个关键字——super、this
Java中的两个关键字--super.this 神话丿小王子的博客主页 一.super super 是java中方的一个关键字,用它可以引用父类中的成员: super可用于访问父类中定义的属性 sup ...
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...
- java中定义类的关键字是_java中定义类的关键字是什么?
java中定义类的关键字是:"class".在Java中定义一个类,需要使用"class"关键字.一个自定义的类名和一对表示程序体的大括号. 类是 Java 中 ...
- java下面哪些定义正确,请问,以下哪些是java中定义的合法关键字?请选择所有正确答案:...
请问,以下哪些是java中定义的合法关键字?请选择所有正确答案: 答:interface sizeof volatile "凡是亲眼所见的都是对客观事实的真实反映",这个命题 答: ...
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...
- 一语点破 Java 中的静态 static 关键字
来源 | blog.csdn.net/ju_362204801/article/details/90738966 思考:大家有没有想过一个问题,静态它为什么叫静态?因为书上或者别的文章里这么写的都这么 ...
最新文章
- 让Windwos Server 2008 R2 SP1的FTP真正能访问
- Linux入门之常用命令(15) lsof
- MySQL 可重复读,差点就让我背上了一个 P0 事故!
- Pi 3B+编译安装python3.6.8
- 加密货币交易所Gemini已支持新加坡元(SGD)
- 蓝桥杯2019年第十届C/C++国赛B组 题B-质数拆分(素数筛选+01背包问题)
- 华为U2000网管研究实录 (3) - 运行分析(服务端进程)
- 修改AspNetPager的CustomInfoHTML,添加自定义样式
- 计算机上怎么在表格输入分秒,excel2010中如何设置分秒格式显示单元格或数据?...
- win10系统优化计算机,win10系统必做优化,让你的电脑告别卡顿,运行速度至少提升20%...
- 程序员有必要掌握 TDD 吗?
- java正态分布随机数产生方法
- 手游开发神器 cocos2d-x editor 教程聚合和代码下载(持续更新中)
- java计算机毕业设计BS用户小票系统(附源码、数据库)
- STM32F407的时钟
- RGBD相机的标定和图像配准
- 消息称苹果最快将于2022年推出折叠屏iPhone
- 阿里巴巴三面总结,讲一讲从P5到P8需要掌握的知识点,本人已成功入职。
- 软件测试:保障软件质量的关键性关口——记中国工商银行软件开发中心北京研发_manok_新浪博客...
- oracle 数据库精简,Oracle角色精简总结
热门文章
- python列表求平均值_python与统计概率思维
- dos命令行设置网络优先级_计算机网络故障及其维修方法
- hibernate oracle boolean 数据类型,用hibernate向oracle读取blob数据类型为并下载到本地...
- 全排列—leetcode46
- UNIX 高手的 20 个习惯
- java list 排序_Java中List的排序
- XHTML行内描述性元素(持续更新中)
- 概率论-2.7 分布的其他特征函数
- Windows平台下 vscode清理Java工程项目的缓存、相关快捷键设置
- [BUUCTF-pwn]——picoctf_2018_are you root