- 浏览: 218288 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (110)
- java (111)
- c# winform tablelayoutpanel学习 合并行的布局及动态增加删除内部控件 (1)
- javascript常用正则 (1)
- 认识Java程序 (1)
- UniqTask for android (1)
- JAX-RS 从傻逼到牛叉 2:开发一个简单的服务 (1)
- Spring MVC 数据绑定的扩展 (1)
- 手机分辨率 (1)
- tomcat的favicon.ico的用法 (1)
- Cookie读写demo (1)
- hive相关操作文档收集 (1)
- 测试开发工程师的发展 (1)
- JSF入门十(自定义转换器) (1)
- 《你能行:微软精英的职场心里话》 (1)
- JNI程序如何检测C代码的内存泄漏 (1)
- 做了几天的调研工作 (1)
- 使用Microsoft Web Application Stress进行压力测试 (1)
- 在线共享音乐吧(Online Share Music Bar)解决方案 (1)
- 如何二次压缩RM和RMVB格式文件 (1)
- 突然想起了红色联盟 就去看了看 (1)
- 推荐两个关于DB2认证的站点 (1)
- 安装Microsoft .NET Framework SDK 快速入门、教程和示例 (1)
- 去掉C/C++程序代码中的注释 (1)
- 数据结构之kmp模式匹配 (1)
- JS跨域 (1)
- SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法 (1)
- Android开发之fedora13下编译Android源码 (1)
- Android开发之Linkify (1)
- json学习之三:JSONArray的应用 (1)
- js 数组操作代码集锦 (1)
- jquery跨域调用json数据 (1)
- qtdemo浅析 (1)
最新评论
-
songshuang:
最近怎么都盗我的文
做个小调查,程序员们都是什么星座的?
<span style="color: #000000;">更详细的可以查看:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html</span>
<span style="color: #000000;">volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 <br> <br>java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。 <br> <br>这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。 <br> <br>而volatile关键字就是提示vm:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。 <br> <br>使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。 <br> <br>由于使用volatile屏蔽掉了vm中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。 <br> <br><span style="color: #ff0000;">[b]java关键字transient </span>[/b]<br> <br>转自http:</span><span style="color: #008000;">//</span><span style="color: #008000;">horst.sun.blog.163.com/blog/static/348849612007614494492/ </span><span style="color: #008000;"><br></span><span style="color: #000000;"> <br>翻译自http:</span><span style="color: #008000;">//</span><span style="color: #008000;">www.devx.com/tips/tip/13726。 </span><span style="color: #008000;"><br></span><span style="color: #000000;"> <br><span style="color: #ff0000;">java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想 <br>用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。 <br>transient是java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 <br></span><span style="color: #ff0000;"><strong style="color: red;"><span style="color: #000000;">注意static变量也是可以串行化的 <br></span></strong></span> <br>首先,让我们看一些java serialization的代码: <br></span><span id="codehighlighter1_1941_3009_open_text"><span id="codehighlighter1_2261_3009_open_text"><span style="color: #008000;"><br></span><span style="color: #000000;"> <br>如果我们运行这段代码,我们会注意到从磁盘中读回(read——back (de</span><span style="color: #000000;">-</span><span style="color: #000000;">serializing))的对象打印password为</span><span style="color: #000000;">"</span><span style="color: #000000;">not set</span><span style="color: #000000;">"</span><span style="color: #000000;">。这是当我们定义pwd域为transient时,所期望的正确结果。 <br>现在,让我们来看一下粗心对待transient域可能引起的潜在问题。假设我们修改了类定义,提供给transient域一个默认值, <br>代码如下: <br> <br></span></span></span>
<span style="color: #000000;"></strong></span>
<span style="color: #000000;"><strong>本文转自:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html</span>
<span style="color: #000000;">volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 <br> <br>java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。 <br> <br>这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。 <br> <br>而volatile关键字就是提示vm:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。 <br> <br>使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。 <br> <br>由于使用volatile屏蔽掉了vm中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。 <br> <br><span style="color: #ff0000;">[b]java关键字transient </span>[/b]<br> <br>转自http:</span><span style="color: #008000;">//</span><span style="color: #008000;">horst.sun.blog.163.com/blog/static/348849612007614494492/ </span><span style="color: #008000;"><br></span><span style="color: #000000;"> <br>翻译自http:</span><span style="color: #008000;">//</span><span style="color: #008000;">www.devx.com/tips/tip/13726。 </span><span style="color: #008000;"><br></span><span style="color: #000000;"> <br><span style="color: #ff0000;">java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想 <br>用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。 <br>transient是java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 <br></span><span style="color: #ff0000;"><strong style="color: red;"><span style="color: #000000;">注意static变量也是可以串行化的 <br></span></strong></span> <br>首先,让我们看一些java serialization的代码: <br></span><span id="codehighlighter1_1941_3009_open_text"><span id="codehighlighter1_2261_3009_open_text"><span style="color: #008000;"><br></span><span style="color: #000000;"> <br>如果我们运行这段代码,我们会注意到从磁盘中读回(read——back (de</span><span style="color: #000000;">-</span><span style="color: #000000;">serializing))的对象打印password为</span><span style="color: #000000;">"</span><span style="color: #000000;">not set</span><span style="color: #000000;">"</span><span style="color: #000000;">。这是当我们定义pwd域为transient时,所期望的正确结果。 <br>现在,让我们来看一下粗心对待transient域可能引起的潜在问题。假设我们修改了类定义,提供给transient域一个默认值, <br>代码如下: <br> <br></span></span></span>
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; } }<br>现在我们创建一个这个类的实例,并且串行化(serialize)它 ,然后将这个串行化对象写如磁盘。 <br>
logginginfo loginfo = new logginginfo("mike", "mechanics"); 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} to read the object back, we can write try { objectinputstream in =new objectinputstream( new fileinputstream("loginfo.out")); logginginfo loginfo = (logginginfo)in.readobject(); system.out.println(loginfo.tostring()); } catch(exception e) {//deal with exception}
public class guestlogginginfo implements java.io.serializable { private date loggingdate = new date(); private string uid; private transient string pwd; guestlogginginfo() { uid = "guest"; pwd = "guest"; } public string tostring() { //same as above } }现在,如果我们穿行化guestlogginginfo的一个实例,将它写入磁盘,并且再将它从磁盘中读出,我们仍然看到读回的对象打印password 为 "<span style="color: #000000;">not set</span><span style="color: #000000;">"</span><span style="color: #000000;">。当从磁盘中读出某个类的实例时,实际上并不会执行这个类的构造函数,而是载入了一个该类对象的持久化状态,并将这个状态赋值给该类的另一个对象。 <br></span>
<span style="color: #000000;"></strong></span>
<span style="color: #000000;"><strong>本文转自:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html</span>
发表评论
-
qtdemo浅析
2012-02-07 16:14 1585[size=x-small;]? ? <span ... -
jquery跨域调用json数据
2012-02-03 11:39 1435? <script type="te ... -
js 数组操作代码集锦
2012-02-03 10:59 1144[size=small;]这段时间做的一个项目,用到数 ... -
json学习之三:JSONArray的应用
2012-02-02 15:29 71524从json数组中得到 ... -
Android开发之Linkify
2012-01-31 13:33 2211<h1>Android开发之Linkify ... -
Android开发之fedora13下编译Android源码
2012-01-11 16:04 1153<h1>Android开发之fedora1 ... -
SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法
2011-12-28 14:13 3870<span style="font-f ... -
JS跨域
2011-12-21 16:43 2638原帖地址:http://itgeeker.com/ma ... -
数据结构之kmp模式匹配
2011-12-21 10:04 1185KMP字符串模式匹配详解 KMP字符串模式匹配通俗点说 ... -
去掉C/C++程序代码中的注释
2011-12-20 16:49 3060程序员面试宝典上面的题目有很多是很经典的问题,可供我 ... -
安装Microsoft .NET Framework SDK 快速入门、教程和示例
2011-12-19 10:09 2054Microsoft .NET Framework SD ... -
推荐两个关于DB2认证的站点
2011-12-19 09:59 848关于DB2认证的在线中文教程<br>htt ... -
突然想起了红色联盟 就去看了看
2011-12-17 10:54 1181突然想起了红色联盟,于是就偷偷的爬上红盟站点,看了看红 ... -
如何二次压缩RM和RMVB格式文件
2011-12-16 17:12 1121对RM/RMVB格式文件进行二次压缩,可以用一个软件E ... -
在线共享音乐吧(Online Share Music Bar)解决方案
2011-12-14 19:54 998</span></font>& ... -
使用Microsoft Web Application Stress进行压力测试
2011-12-14 18:33 879<font size="2" ... -
做了几天的调研工作
2011-12-14 17:29 1017</span></span> ... -
JNI程序如何检测C代码的内存泄漏
2011-12-13 14:59 1449Java调用C的JNI程序很容易出现内存泄漏问题,因为 ... -
《你能行:微软精英的职场心里话》
2011-12-12 14:39 961<p class="MsoNorm ... -
JSF入门十(自定义转换器)
2011-12-09 11:00 975本文参考 http://www.javaworld.c ...
相关推荐
### Java中的transient关键字详解 在Java编程语言中,`transient`关键字是一个非常重要的概念,主要用于对象序列化过程中对特定变量的控制。当一个类实现了`Serializable`接口时,其对象可以被序列化为一个持久化的...
在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...
### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...
Java是一种广泛使用的面向对象的编程语言,其语法严谨,其中包括一系列的关键字和保留字,这些关键字在编程中具有特殊含义,不能用作变量名或其他标识符。以下是对Java中一些重要关键字的详细解释: 1. **abstract*...
- 修饰方法、类、属性和变量关键字:如`static`、`final`、`native`、`synchronized`、`transient`、`volatile`、`strictfp`,用于提供额外的信息来修饰类、方法和变量。 - 异常处理关键字:如`try`、`catch`、`...
private、public、protected、final、static、abstract、synchronized、volatile、strictfp、native、transient 等修饰符关键字;try、catch、finally、throw、throws 等异常处理关键字;new、extends、implements、...
### Java关键字总结 Java是一种广泛使用的面向对象编程语言,它具备简单性、可移植性、高性能等特点。在Java中,关键字具有特殊的语法含义,不能用作标识符(例如变量名或方法名)。以下是对给定文件中提到的Java...
Java 共有 50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`...
这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...
21. `transient`:`transient`关键字用于标记变量,表示该变量不应序列化,即在对象序列化和反序列化时不保存这个变量的值。 22. `try-catch-finally`:`try`块包含可能会抛出异常的代码,`catch`处理这些异常,`...
`transient`关键字表明字段不应该序列化。`native`表示方法的实现是在其他地方(如C/C++)完成的,通常与Java的JNI(Java Native Interface)一起使用。 最后,`package`关键字用于组织类和接口,提供命名空间,...
- `public`, `private`, `protected`, `static`, `final`, `abstract`, `synchronized`, `volatile`, `transient`:这些关键字用于定义访问级别和修饰符。 - `try`, `catch`, `finally`, `throw`, `throws`:这些...
Java编程语言中有51个关键字,它们在程序中扮演着至关重要的角色,用来定义类、接口、变量、方法以及控制程序流程。以下是一些主要的关键字及其解释: 1. `abstract`:抽象关键字,用于声明抽象类和抽象方法。抽象...
在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...
### Java关键字详解 #### Abstract `abstract` 是Java中的一个关键字,用于定义抽象类或抽象方法。抽象类是不能被实例化的类,主要用于提供子类一个基础模板,并强制子类去实现某些特定的方法。抽象方法是没有实现...
### Java关键字详解 #### 前言 Java作为一种广泛使用的编程语言,在软件开发领域占据了重要的地位。Java的关键字,即保留字,是Java语言中具有特殊意义的标识符,它们预定义并保留用于语言本身的语法结构。理解这些...
### Java关键字详解 #### 概述 Java是一种广泛使用的面向对象编程语言,它拥有丰富的关键字集,用于控制程序的行为和结构。Java关键字是由Java语言预定义的标识符,具有特殊的含义,不能用作变量名、方法名或类名等...
以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...
Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...
在Java编程语言中,关键字和保留字是具有特殊含义的词汇,它们被编译器识别并用于控制程序的行为。以下是对Java中部分关键字的详细解释: 1. `abstract`:抽象关键字,用于声明类或方法。抽象类不能被实例化,但...