从事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;
}
}
分享到:
相关推荐
冷僻字指的是在日常使用中不常见或者使用频率极低的汉字,它们往往不在标准字符集中,如GB2312或GBK,但可能在Unicode等更全面的字符集里有所涵盖。这些字因为其罕见性,在计算机处理时可能会遇到问题,比如显示不全...
在中国的汉字文化中,"冷僻字库"是一个专门收录那些使用频率较低、不常见或者在日常交流中很少使用的汉字集合。这些字往往具有独特的形态和深远的文化含义,但因为其特殊性,一般字库可能无法完全覆盖。本文将深入...
Java是一种广泛使用的编程语言,它有许多特性需要程序员深入理解才能有效避免编程中的一些陷阱和冷僻问题。从给定的文件内容中,我们可以提炼出以下几个知识点: 1. 取余操作符(%)的特性与陷阱 在Java中,取余...
本输入法能直观地输入汉字,特别是输入生僻字,不需要记忆任何字根或编码,便于普通用户的学习和掌握。 本输入法以电脑鼠标为输入工具,根据汉字的部首、笔画、笔顺、笔画数等特征作输入汉字的检索条件,采用交互式...
《398个冷僻字读音、解释完整版》文档涵盖了众多罕见汉字的发音及其含义,这些字在日常生活中不常出现,但对于扩展词汇量和深入理解中华文化具有重要意义。以下是一些字的具体解读: 1. "觊觎"(jì yú):意为...
文档"生僻字、冷僻字选录和注释.doc"是关于中文中不常见或者较为罕见的汉字的集合,包含这些字的读音、含义和一些相关的历史文化背景。这些生僻字和冷僻字在日常生活中并不常用,但它们丰富了中文的词汇库,反映了...
生僻字,也被称为罕用字或冷僻字,是指在日常生活中不常使用的汉字,它们在语言交流中出现频率较低,但在某些专业领域或古籍中却常见。处理生僻字是信息技术中的一个特殊挑战,因为这些字符的编码复杂,且在不同的...
生僻字又称冷僻字,指不常见的或人们不熟悉的汉字。 自从有汉字以来,汉字也是在不断发展和变化的。中国最早的文字是商代的甲骨文,约为3500至4500字,因为其中有些符号,现在也不能确定是不是文字,或者那个时代的...
在IT领域,有时候我们会遇到需要使用到系统未包含的特殊字符或冷僻字的情况,这时候“手工造字”就显得尤为重要。手工造字是一种通过特殊软件或者编程技术创建自定义字符的过程,尤其对于设计师、排版人员以及对个性...
- **现代汉语**:选择现代汉语中的常用词汇,避免使用冷僻或文言文词语。 - **正确的“的”、“地”、“得”**:根据语法正确使用“的”、“地”、“得”,以增强语言的准确性和流畅性。 - **明确的代词**:使用...
在实际应用中,可能还需要考虑一些特殊情况,比如多音字、冷僻字等。`pinyin4j`库提供了丰富的配置选项,可以处理这些复杂情况。例如,针对多音字,可以选择返回所有可能的拼音,或者根据上下文确定最合适的读音。 ...
- **避免过于专业或冷僻词汇**:确保大多数用户能理解标题含义,避免使用过于生僻的术语,保持语言的通俗易懂。 - **避免误导性标题**:标题应准确反映视频内容,防止用户因标题误导而产生负面反馈。 - **适度...
通过学习和使用这些近义词,学生可以更细腻地描绘场景,丰富他们的语言表达,提高写作水平。比如:"在那偏僻的小山村,母亲在等待,在等待",这句话中的"偏僻"传达了山村的偏远,而如果替换为"荒僻",可能更强调环境...
在用 Ctrl M 键切换到GBK扩展字符集输入时(状态条“极品五笔”变红色),可避免传统五笔对于“碁”、“囍”、“囧”、“気”、“焗”、“冇”等冷僻汉字不能输入的尴尬,其实用性能是相当不错的。 极品五笔通用型...
【部分内容】讨论了对高难度、冷僻汉字在比赛和文化意义上的价值。 这篇内容探讨了“僻字”的文化意义,主要涉及以下几个方面: 1. **僻字的出现与文化记录**:僻字虽然在现代汉语中较少使用,但它们存在于古代...
"蓝帆五笔输入法"是一款专为中文输入设计的软件,它以其完全免费、支持冷僻字和海量词汇等特点,赢得了广大用户的喜爱。这款输入法不仅具备基础的五笔编码功能,还优化了用户体验,使得输入过程更为简单快速。在操作...
1、使用halcon绘制圆环roi;2、圆环roi使用比较冷僻;3、圆环的定义主要有5个参数;4、圆环的交互绘制和圆环的显示,共封装了两个函数;
可避免传统五笔对于“碁”、“囍”、“囧”、“焗”、“冇”等冷僻汉字不能输入的尴尬,其实用性能是相当不错的。 极品五笔 2018 v4.2.26.28 更新日志 ①在Win8|10系统下,就加词、删词、重码调序、智能句点等功能...
1、使用halcon绘制圆环roi;2、圆环roi使用比较冷僻;3、圆环的定义主要有5个参数;4、圆环的交互绘制和圆环的显示,共封装了两个函数;
第三,如果检索词过于专业或冷僻,可能会限制检索结果,此时可以尝试使用更通用的词汇。第四,未使用截词符可能导致检索不全面,截词符如“?”可以帮助检索词根变化的形式。第五,过度使用位置算符和字段算符会使得...