`
zhaomingzm_23
  • 浏览: 33049 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA冷僻关键字使用详解

阅读更多
从事Java开发也已经差不多快一年了,说来惭愧,有很多很基础的知识到现在才弄明白。废话不多说,我们从几个小例子说起。

assert & transient 关键字
volatile 关键字

程序清单:

Student.java
package com.ue.zm.test.po; 
import java.io.Serializable; 
public class Student implements Serializable { 
private static final long serialVersionUID = 3976535276585232757L; 
private String username; 
private transient String password; 
public Student(String username, String password) { 
  super(); 
  this.username = username; 
  this.password = password; 
  assert !"".equals(username); 
//当被 assert 修饰的值为false的时候抛出"java.lang.AssertionError" 注意是错误而非异常 
/*关于这一点,专家组也进行了长期的讨论。Error代表一些异常的错误,通常是不可以恢复的,而RuntimeException强调该错误在运行时才发生的特点。AssertionError通常为非常关键的错误,这些错误往往是不容易恢复的,而且assertion机制也不鼓励程序员对这种错误进行恢复。因此,为了强调assertion的含义,Java专家小组选择了让AssertError为Error的子类。 
PS:如果你能看到这一行,说明你还挺细心的。呵呵~~ 
*/
} 
public String getUsername() { 
  return username; 
} 
public void setUsername(String username) { 
  this.username = username; 
} 
public String getPassword() { 
  return password; 
} 
public void setPassword(String password) { 
  this.password = password; 
} 
public String toString(){ 
  return username + ":" + password; 
} 
} 

MainTest.java
package com.ue.zm.test; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import com.ue.zm.test.po.Student; 
/** 
* 
* @作者: 赵明 
* @类作用:测试java序列化对象transient关键字和assert关键字功能。 
* @日期:Jun 9, 2008 
* @时间:1:55:31 AM 
*/ 
public class MainTest { 
private static String FIlE_PATH_C = "c:/data.dat"; 
public static void writer() { 
  try { 
   Student stu = new Student("","123456"); 
   //这里此时!"".equals(username)为fasle,会抛出AssertionError错误。 
   //而当给一个"zhaoming"时就使!"".equals(username)为true。 
   FileOutputStream fos = new FileOutputStream(new File(FIlE_PATH_C)); 
   ObjectOutputStream oos = new ObjectOutputStream(fos); 
   oos.writeObject(stu); 
  } catch (FileNotFoundException e) { 
   e.printStackTrace(); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
} 
public static void main(String[] args) { 
  writer(); 
  try { 
   FileInputStream fis = new FileInputStream(new File(FIlE_PATH_C)); 
   ObjectInputStream ois = new ObjectInputStream(fis); 
   Student stu = (Student)ois.readObject(); 
   System.out.println(stu); 
  } catch (FileNotFoundException e) { 
   e.printStackTrace(); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } catch (ClassNotFoundException e) { 
   e.printStackTrace(); 
  } 
} 
} 

本例子要执行需要用到java虚拟机的一个参数 -ea (其他参数详见:点我打开该内容)

以下是命令行执行MainTest类的结果:
C:\workspace\Test\bin>java -ea com.ue.zm.test.MainTest
Exception in thread "main" java.lang.AssertionError
        at com.ue.zm.test.po.Student.<init>(Student.java:13)
        at com.ue.zm.test.MainTest.writer(MainTest.java:24)
        at com.ue.zm.test.MainTest.main(MainTest.java:35)
C:\workspace\Test\bin>java -ea com.ue.zm.test.MainTest
zhaoming:null
C:\workspace\Test\bin>

从这个小例子我们可以得到两个重要的信息:

1、被assert关键字修饰的对象或值,可以在程序运行的时候动态的调整检测与否,这个取决与jvm的参数,而不用测试和发布软件的时候编写两个版本的程序。虽然那样做可以提高性能,但java没有这样做的目的在于,付出一点点性能上的损失(java开发组称:微乎其微的性能损失)可以换得灵活的调整检测比开发时编写繁多的测试代码要划算的多的多。

2、被transient关键字修饰的对象或者值,在序列化的时候不被保存到字节码中,这样可以使用到一些重要的信息不被反序列化时被显示出来,比如密码等一些敏感信息。

  这两个关键字都是java 1.4 以后才加入的新功能 ,故不被该版本以前的jdk支持,也通不过编译。使用中应当注意。

PS:关注Java,关注互联网技术。学习永无至尽。

================ volatile关键字 ====================
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


public class Singleton {
	private Lock lock = new ReentrantLock();
	private volatile Singleton uniqueInstance;
	private String userName;
	private transient String passWord;
	private Singleton() {
	}
	public Singleton getInstance(){
		if (uniqueInstance == null) {
			try {
				lock.lock();
				if (uniqueInstance == null) {
					uniqueInstance = new Singleton();
				}
			}finally{
				lock.unlock();
			}
		}
		return uniqueInstance;
	}
}
分享到:
评论

相关推荐

    冷僻字.rar

    常用冷僻字.rar常用冷僻字.rar

    冷僻字库

    冷僻字库,

    Java解惑(中文+书签).pdf

    介绍了Java中很多冷僻的陷阱,大部分是很少遇到的。但用来激发学习的兴趣,探索Java的奥秘还是很不错的。(顺手加了个书签)

    冷僻字输入法 不需要记忆任何字根或编码

    本输入法能直观地输入汉字,特别是输入生僻字,不需要记忆任何字根或编码,便于普通用户的学习和掌握。 本输入法以电脑鼠标为输入工具,根据汉字的部首、笔画、笔顺、笔画数等特征作输入汉字的检索条件,采用交互式...

    生僻字、冷僻字选录和注释.doc

    生僻字、冷僻字选录和注释.doc

    生僻字安装包.zip

    生僻字又称冷僻字,指不常见的或人们不熟悉的汉字。 自从有汉字以来,汉字也是在不断发展和变化的。中国最早的文字是商代的甲骨文,约为3500至4500字,因为其中有些符号,现在也不能确定是不是文字,或者那个时代的...

    最强Zinnia手写模型汉字库

    此手写模型库是我自己花费近3年时间训练的,...对于使用基于zinnia和tomoe算法开发汉字输入法的人具有研究和很好的参考意义!尤其是这两年很多行业开始对冷僻字输入要求的系统,应该有很好的帮助,希望对你有所帮助!

    极品五笔 2015 Win10兼容版.zip

    在用 Ctrl M 键切换到GBK扩展字符集输入时(状态条“极品五笔”变红色),可避免传统五笔对于“碁”、“囍”、“囧”、“気”、“焗”、“冇”等冷僻汉字不能输入的尴尬,其实用性能是相当不错的。 极品五笔通用型...

    手工造字-全动画演示

    关于如何制造出系统中没有汉字,冷僻字。全过程动画演示

    test_annular - final.hdev

    1、使用halcon绘制圆环roi;2、圆环roi使用比较冷僻;3、圆环的定义主要有5个参数;4、圆环的交互绘制和圆环的显示,共封装了两个函数;

    极品五笔 2018 v4.2.26.28.zip

    可避免传统五笔对于“碁”、“囍”、“囧”、“焗”、“冇”等冷僻汉字不能输入的尴尬,其实用性能是相当不错的。 极品五笔 2018 v4.2.26.28 更新日志 ①在Win8|10系统下,就加词、删词、重码调序、智能句点等功能...

    annular - final.hdev

    1、使用halcon绘制圆环roi;2、圆环roi使用比较冷僻;3、圆环的定义主要有5个参数;4、圆环的交互绘制和圆环的显示,共封装了两个函数;

    极品五笔 2017 春兰版.zip

    4、Ctrl M 切换到GBK字符集输入冷僻字(之后请切换回GB2312). 5、Ctrl 序号 可实现重码手动调序. 6、简化了回车清除输入框/候选框/换行操作. 7、新增特殊编码:──DRK 二○FGLI 〇LING (GBK字符)8、此版特征词:...

    公安生僻字安装包

    很多输入法中没有的汉字可以从这里输入。源自公安局人民录入系统。

    火星字转换软件 V1.01

    这些火星文用符号、繁体字、日文假名、冷僻字等非正规汉字符号组合而成,乍看起来像是乱码或或者打错的字,用法也不同于汉语规范,从字面上根本无法了解它的意思。但是通过仔细揣摩,火星文的确表达了对应汉语的...

    梦码汉字输入法学习软件

    通过直观的演示,可以在看完之后,对软件的主要特色和十几项专利技术有比较全面的了解,从而可以直接使用梦码汉字输入法软件而不再通过死记硬背等办法学习一种快速输入法。 梦码汉字输入法软件成员: 梦幻组合①...

    极品五笔2015Win10兼容版中文免费安装版(3264位通用型)

    在用 Ctrl M 键切换到GBK扩展字符集输入时(状态条“极品五笔”变红色),可避免传统五笔对于“碁”、“囍”、“囧”、“気”、“焗”、“冇”等冷僻汉字不能输入的尴尬,其实用性能是相当不错的。需要的朋友们可以...

    基于工程图的UG软件应用技术

    使用UG软件进行产品设计,由三维实体转换为二维工程图,使产品设计更加形象、直观;通过提高冷僻视图生成的质量,对视图粗细线型进行充分细化,合理设置线型宽度、标注尺寸等参数,使二维工程图符合我国国标,提高了产品...

    极品五笔7.0(优化版)

    GBK扩展字符集包含全部GB2312字符之外,还增加14139个不常用汉字字符,多是些冷僻字及繁体字、港台用字。由于GBK字库较大,字符不常用(普通人一年里也用不到几个这样的字),为了避免过多的重码,提高输入效率,...

    Windows Phone 7 界面设计与交互指南第二版中英译本

    自微软揭开Windows Phone 7 以来,已经受到外界大量关注。...笔者还对其中出现的一些较为冷僻的概念悉数做了简单介绍以方便大家快速理解。相信这本指南对于未来我们在这个新平台上的产品设计有着极大的帮助。

Global site tag (gtag.js) - Google Analytics