- 浏览: 991865 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
new一个对象可能非常熟悉,但由于反序列化,反射,克隆在开发中用得不多,有些会生疏。
先定义一个简单的HelloBean,他有一个接口IHelloBean,还有会抛出异常NullNameException。
package
com.kompakar.tutorial.object.common;
import java.io.Serializable;
// 接口继承Cloneable,Serializable,可以用来克隆和序列化
public interface IHelloBean extends Cloneable,Serializable {
String echoHello(String name) throws NullNameException;
IHelloBean clone() throws CloneNotSupportedException;
String getName();
}
import java.io.Serializable;
// 接口继承Cloneable,Serializable,可以用来克隆和序列化
public interface IHelloBean extends Cloneable,Serializable {
String echoHello(String name) throws NullNameException;
IHelloBean clone() throws CloneNotSupportedException;
String getName();
}
HelloBean实现IHelloBean实现方法
package
com.kompakar.tutorial.object.common.impl;
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
public class HelloBean implements IHelloBean {
private static final long serialVersionUID = 7694044778894190986L ;
private String name ;
public HelloBean() {
}
public HelloBean(String name) {
this .name = name;
}
// 具体的业务方法
@Override
public String echoHello(String name) throws NullNameException {
if (name != null && name.length() > 0 ) {
return " Hello, " + name + " ! " ;
} else {
throw new NullNameException( " Null Name Exception " );
}
}
// 利用Object.clone()实现克隆
@Override
public HelloBean clone() throws CloneNotSupportedException {
return (HelloBean) super .clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
public class HelloBean implements IHelloBean {
private static final long serialVersionUID = 7694044778894190986L ;
private String name ;
public HelloBean() {
}
public HelloBean(String name) {
this .name = name;
}
// 具体的业务方法
@Override
public String echoHello(String name) throws NullNameException {
if (name != null && name.length() > 0 ) {
return " Hello, " + name + " ! " ;
} else {
throw new NullNameException( " Null Name Exception " );
}
}
// 利用Object.clone()实现克隆
@Override
public HelloBean clone() throws CloneNotSupportedException {
return (HelloBean) super .clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
自定义的业务异常,和得到对象没有关系
package
com.kompakar.tutorial.object.common;
public class NullNameException extends Exception {
private static final long serialVersionUID = - 8862603561913984398L ;
public NullNameException(String message) {
super (message);
}
}
public class NullNameException extends Exception {
private static final long serialVersionUID = - 8862603561913984398L ;
public NullNameException(String message) {
super (message);
}
}
我想new一个对象不用说,在这里还是写一下:
package
com.kompakar.tutorial.object.newo;
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class NewObjectTest {
/**
* @param args
*/
public static void main(String[] args) {
// 得到对象
IHelloBean helloBean = new HelloBean();
try {
// 调用业务方法
String msg = helloBean.echoHello( " Allen " );
// 打印出返回的消息
System.out.println(msg);
} catch (NullNameException e) {
System.out.println(e.getMessage());
}
}
}
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class NewObjectTest {
/**
* @param args
*/
public static void main(String[] args) {
// 得到对象
IHelloBean helloBean = new HelloBean();
try {
// 调用业务方法
String msg = helloBean.echoHello( " Allen " );
// 打印出返回的消息
System.out.println(msg);
} catch (NullNameException e) {
System.out.println(e.getMessage());
}
}
}
序列化/反序列化的过程是先将对象按照特定的规范,将对象序列化,形成一个可以存储传输的流。反序列化就是将该流转变成对象。
package
com.kompakar.tutorial.object.objectstream;
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.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class SerializTest {
/**
* @param args
*/
public static void main(String[] args) {
// 得到对象
IHelloBean helloBean = new HelloBean( " Benewu " );
try {
// 将对象写到本地,可以在磁盘中发现HelloBean.dat文件
ObjectOutputStream objout = new ObjectOutputStream( new FileOutputStream( " HelloBean.dat " ));
objout.writeObject(helloBean);
objout.close();
// 将本地的HelloBean.dat文件取出来并且转成对象
ObjectInputStream objin = new ObjectInputStream( new FileInputStream( " HelloBean.dat " ));
IHelloBean aHelloBean = (IHelloBean) objin.readObject();
objin.close();
String msg = aHelloBean.echoHello( " Allen " );
System.out.println(aHelloBean.getName());
System.out.println(msg);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NullNameException e) {
e.printStackTrace();
}
}
}
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.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class SerializTest {
/**
* @param args
*/
public static void main(String[] args) {
// 得到对象
IHelloBean helloBean = new HelloBean( " Benewu " );
try {
// 将对象写到本地,可以在磁盘中发现HelloBean.dat文件
ObjectOutputStream objout = new ObjectOutputStream( new FileOutputStream( " HelloBean.dat " ));
objout.writeObject(helloBean);
objout.close();
// 将本地的HelloBean.dat文件取出来并且转成对象
ObjectInputStream objin = new ObjectInputStream( new FileInputStream( " HelloBean.dat " ));
IHelloBean aHelloBean = (IHelloBean) objin.readObject();
objin.close();
String msg = aHelloBean.echoHello( " Allen " );
System.out.println(aHelloBean.getName());
System.out.println(msg);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NullNameException e) {
e.printStackTrace();
}
}
}
利用Object.clone()可以得到一个深度克隆的对象。
package
com.kompakar.tutorial.object.cloneo;
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class CloneTest {
/**
* @param args
*/
public static void main(String[] args) {
IHelloBean helloBean = new HelloBean();
try {
IHelloBean helloBeanClone = helloBean.clone();
System.out.println(helloBeanClone.echoHello( " Bene " ));
} catch (CloneNotSupportedException e) {
e.printStackTrace();
} catch (NullNameException e) {
System.out.println(e.getMessage());
}
}
}
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
import com.kompakar.tutorial.object.common.impl.HelloBean;
public class CloneTest {
/**
* @param args
*/
public static void main(String[] args) {
IHelloBean helloBean = new HelloBean();
try {
IHelloBean helloBeanClone = helloBean.clone();
System.out.println(helloBeanClone.echoHello( " Bene " ));
} catch (CloneNotSupportedException e) {
e.printStackTrace();
} catch (NullNameException e) {
System.out.println(e.getMessage());
}
}
}
反射使用得比较多, 可以利用XML定义类型和参数,在使用的时候再动态加载。
package
com.kompakar.tutorial.object.reflectiono;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
public class ReflectionTest {
/**
* @param args
* @throws InvocationTargetException
* @throws
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void main(String[] args) {
try {
// 定义对象类型
Class c = Class.forName( " com.kompakar.tutorial.object.common.impl.HelloBean " );
Object obj;
// 得到对象实例并且直接调用业务方法
obj = c.newInstance();
IHelloBean helloBean = (IHelloBean)obj;
String msg = helloBean.echoHello( " Baby " );
System.out.println(msg);
// 在这里可能永远都不知道方法名字是什么,而是动态加载进来,并进行访问
// 动态调用业务方法
Class sc = Class.forName( " java.lang.String " );
Method m = c.getMethod( " echoHello " , new Class[] {sc} );
Object returnObj = m.invoke(helloBean, " GIGI " );
System.out.println((String)returnObj);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NullNameException e) {
System.out.println(e.getMessage());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.kompakar.tutorial.object.common.IHelloBean;
import com.kompakar.tutorial.object.common.NullNameException;
public class ReflectionTest {
/**
* @param args
* @throws InvocationTargetException
* @throws
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void main(String[] args) {
try {
// 定义对象类型
Class c = Class.forName( " com.kompakar.tutorial.object.common.impl.HelloBean " );
Object obj;
// 得到对象实例并且直接调用业务方法
obj = c.newInstance();
IHelloBean helloBean = (IHelloBean)obj;
String msg = helloBean.echoHello( " Baby " );
System.out.println(msg);
// 在这里可能永远都不知道方法名字是什么,而是动态加载进来,并进行访问
// 动态调用业务方法
Class sc = Class.forName( " java.lang.String " );
Method m = c.getMethod( " echoHello " , new Class[] {sc} );
Object returnObj = m.invoke(helloBean, " GIGI " );
System.out.println((String)returnObj);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NullNameException e) {
System.out.println(e.getMessage());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1022调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1027Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 17861、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 908“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 8811、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 960概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 856下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 888<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1629安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1129Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 996///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 986J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1229六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1549HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2086最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 935Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 936在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1015maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 127224小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 104013.9. 使用Spring的 ...
相关推荐
complexAdd(ComplexNumber c):当前复数对象与形式参数复数对象相加,所得的结果也是复数值,返回给此方法的调用者。 complexAdd(double c):当前复数对象与形式参数实数对象相加,所得的结果仍是复数值,返回给此...
Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方 enum Season { ...也是说,使用name()方法和valueOf(String)方法能够在枚举类型对象和字符串之间方便得转换。当然,假设valu
Struts2获得Response对象的四种方法 Struts2 是一个基于MVC 模式的 Web 应用程序框架,它提供了多种方式来获取 Response 对象,以下是四种获得 Response 对象的方法: 方法 1:使用 Struts2 Aware 拦截器 在 ...
《Java面向对象程序设计》(第版)课后答案 39 / 39 《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。《Java面向对象程序设计》(第版)课后答案全文共39页,当前为第1页。Java面向对象程序设计 《Java...
java集合对象 介绍集合对象 Set:集----存储数据无序,所以不能存储相同的数据,set在存储数据方面有优势 List:列表-----存储数据有序,所以可以存储相同的数据,list在向集合对象中的指定位置添加数据和得到...
第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式...
本文将讨论基于反射机制实现Java对象向Json数据的转换的原理和方法。 一、JSON概述 JSON是一种轻量级的数据交换格式,易于人阅读和编写。它是JavaScript的一个子集,采用完全独立于编程语言的文本格式。JSON的特性...
第四章 类和对象 [习题] 1.类及类成员的访问控制符有哪些? 2.为什么说构造函数是一种特殊的方法?特殊在哪里?构造函数什么时候执行?被谁调 用? 3.关键字static可以修饰哪些类的组成部分? 4.静态属性有什么特点?...
○3创建分别获得各域(学号,姓名,性别和年龄)的public方法,以及分别设置各域(学号,姓名,性别和年龄)值的public方法(即get、set方法);另外还要创建获取静态域count值的get方法; ○4创建public型的...
Java面向对象程序设计知识点总结 ...本文详细介绍了Java面向对象程序设计的基本概念和方法,包括对象、类、封装、继承、多态、类的使用方法、对象的创立与使用方法、包的创立与使用方法等知识点。
Java是真正面向对象的编程语言 面向对象编程主要体现下列三个特性: ◇封装性 (Encapsulation) ... 学习面向对象编程首先就要学习怎样通过抽象得到类,即怎样将某些数据以及和数据有关的操作封装在一起。
Java编程就是设计类,可以采用自定义方法或继承方法设计一个类,然后使用它的实例对象完成具体的功能。 5. 继承 继承是面向对象编程的基本特性之一,继承使父类的代码得到重用,在继承父类提供的共同特性基础上...
Java 生成 PublicKey 方法 Java 生成 PublicKey 方法是 Java 开发语言中一个重要的知识点,本文将对其进行详细的讲解。 首先,需要了解什么是 PublicKey?PublicKey 是一种加密算法中使用的公钥,用于加密和解密...
Java反射机制,万物皆对象,class也是一个类的对象,通过类类型,反射获得类的成员属性,构造方法,成员方法,并调用类中的方法,也可以调用私有方法。
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
java 通过反射获取类上注解,方法上注解,注解里的值及方法参数,项目为maven项目。导入时记得选择maven项目
在上面的方法中,我们使用了 BeanUtil 工具类将 Java 对象转换为 XMLStreamReader,然后使用 StAXOMBuilder 将其转换为 OMElement。这样,我们就可以将 Java 对象转换为 OMElement,以便在 AXIS2 中使用。 AXIOM 还...
在 Java 中,面向对象程序设计(Object-Oriented Programming, OOP)是一种编程范式,它将程序视为一组相互作用的对象集合。每个对象都代表一个实体,具有其属性和方法。面向对象程序设计的主要特征包括封装、继承、...
这里有很全的java基础知识的详细讲解,通俗易懂,很适合初学者的学习。工作中的java工程师参考也会从中得到收益。