博文

Java对象序列化所引起的循环引用的思考(2012-12-19 15:40:00)

摘要: Java对象序列化所引起的循环引用的思考 解决问题 既然需要引擎更聪明,那就没办法,就得烧香拜佛,希望制造商的产品扩展性足够好,考虑了足够多的情况。 幸运的是,jaxb提供了有这种扩展。(CycleRecoverable接口) 行军打仗(例子先行):(将以上的例子改下) @Entity public class Company implements CycleRecoverable{ @Id @Column(…) private String id; @OneToMany(…) private Employee employee; //当遇到循环引用时,java培训用temp替代this,返给jaxb解析。 public Object onCycleDetected(Context arg0) { Company temp = new Company (); temp.setId(id); return temp; } //setters/getters …… } @Entity public class Employee implements CycleRecoverable{ @Id @Column(…) private String id; @ManyToOne private Company company; public Object onCycleDetected(Context arg0) { Employee temp = new Employee(); temp.setId(id); return temp; } //setters/getters …… } 注意到onCycleDetected方法就是一个回调方法,当遇到循环引用时,jaxb引擎会调用这个方法,用return对象来替换this.所以在这个过程中,就可以将引......

阅读全文(2533) | 评论:0

Java对象序列化使用基础(2012-12-19 15:35:00)

摘要: 所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过网络实现,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新"装配"。像RMI、Socket、JMS、EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。 Java对象序列化机制一般来讲有两种用途: Java的JavaBeans: Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息,这需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态。 RMI允许象在本机上一样操作远程机器上的对象;或使用套接字在网络上传送对象的程序来说,这些都是需要实现serializaiton机制的。 我们通过让类实现Java.io.Serializable 接口可以将类序列化。这个接口是一个制造者(marker)接口。也就是说,对于要实现它的类来说,该接口不需要实现任何方法。它主要用来通知Java虚拟机(JVM),需要将一个对象序列化。 对于这个,有几点我们需要明确: 并非所有类都可以序列化,在cmd下,我们输入serialver Java.net.Socket,可以得到socket是否可序列化的信息,实际上socket是不可序列化的。 Java有很多基础类已经实现了serializable接口,比如string,vector等。但是比如hashtable就没有实现serializable接口。 将对象读出或者写入流的主要类有两个: ObjectOutputStream与ObjectInputStream .ObjectOutputStream 提供用来将对象写入输出流的writeObject方法, ObjectInputStream提供从输入流中读出对象的readObject方法。使用这些方法的对象必须已经被序列化的。也就是说,必须已经实现 Serializable接口。如果你想writeobject一个hashtable对象,那么,会得到一个异常。 序列化的过程就是对象写入字节流和从字节流中读取对象。将对......

阅读全文(1885) | 评论:0

JAVA类的方法调用和变量(2012-12-14 11:39:00)

摘要:一、累的分类:         1.普通类         2.抽象类(含有抽象方法的类)         3.静态类(不需要实例化,就可以使用的类)         二、方法的分类:         1、私有方法(只有类的内部才可以访问的方法)         2、保护方法(只有类的内部和该该类的子类可以访问的方法)         3、公共方法(无论内部或外部均可访问的方法)         4、静态方法(可以不实例化对象,通过类名。方法就可以调用的方法)         5、抽象方法(只有方法的签名而没有实现的方法)         三、方法的调用:         1.普通类:实例化一个该类的对象,然后通过对象访问。例如:         classs A{         public void method 1(){         System.out.println(“我是A类的方法1”);         }}public static void main(String[] args){       &......

阅读全文(1886) | 评论:0

如何在Java中进行图片剪裁(2012-12-14 11:37:00)

摘要: 在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中。 我们将通过以下步骤来学习: 输入图像,指定要处理的图像路径 允许用户拖放要剪裁的部分 选择后使用 Robot 类来确定剪裁部分的坐标 剪裁所选图像并保持 接下来我们开始编码部分。 Listing1: 引入的类 import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Robot; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; 说明: Graphics 类包含绘制矩形的方法 我们使用 Rectangle 类作为拖拉的矩形区域以作剪裁 Robot 类用于捕获屏幕截图 使用鼠标侦听器来获取鼠标的拖拉时间 Robot 类使用 BufferedImage 来做图像处理 File 类用于打开图像文件 ImageIO 类用于将图像写到 png 或者 jpg 图像文件中 JFrame 用于显示界面 现在我们编写包含 main 方法的入口类 Listing2: 入口类 public class CropImage extends JFrame implements MouseListener, MouseMotionListener { int drag_status=0,c1,c2,c3,c4; public static voi......

阅读全文(2314) | 评论:0

Eclipse快捷键与使用技巧总结(2012-12-14 11:29:00)

摘要: 此文档主要介绍个人认为比较实用的技巧,常用技巧不做介绍。资料来源于网络,自己再集中整理的。 一、实用类快捷键 1 常用熟悉的快捷键 CTRL+C(复制)、CTRL+X(剪切)、CTRL+Z(撤销)、CTRL+F(查找)、CTRL+H(搜索文件或字符串)、CTRL+Y(重做)、CTRL+/(双斜杠注释)、ALT+/(提示)、CTRL+SHIFT+F(格式化代码) 2 编码辅助类 1)CTRL+D 删除当前行。 2)CTRL+ALT+Down(Up) 复制当前行到下(上)一行中。比CTRL+C单纯的复制功能要方便好用(省掉了粘贴步骤),主要是用在编写代码时,需要移动代码的地方。 3)ALT+Down、ALT+Up. 移动单行(多行)代码。也是比CTRL+C更好的快捷键。 4)ALT+SHIFT+J(建议要使用) 给类,方法,变量添加注释,在类,方法,变量首行,按下此组合键。之所以要建议使用,是为了代码的规范性。现在很多人都没有给自己写的类,方法,变量加上doc文档注释,根本无法生成api 文档。因此每个人在添加一个类、方法时,必须给它加上标准的doc文档注释。(添加类注释有更简便的方法,看后面的配置章节) 5)CTRL+1 Fixed 的快捷键,提示代码错误原因以及处理办法。跟双击代码中的红叉一样的功能。这是一个很常用功能。一般用于修改语法错误。但是个人觉得用在增加接口方法(或参数),类方法(或参数),更能体现出它的便捷之处。比如当你想为一个接口或类增加一个方法,只许在要调用的地方写上你的方法和参数(先不要定义),CTRL+1,选择 create method…就可以自动为你增加想要的方法,省了很多要写的代码。本质是先制造一个错误的语法,让系统自动修复功能帮我们完成代码。 6)CTRL+2 修改变量名,定义变量。按下快捷键,会弹出一个快捷键列表(窗口右下角),在选择你要的操作。 3 快速定位---快捷键 1)CTRL+SHIFT+R(非常好用) 在eclipse中快速定位文件(任何类型)。有了这个,只要记得文件的大概名字,就可以通过模糊查询,搜......

阅读全文(2942) | 评论:0