- 浏览: 1020034 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1060调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1085Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18331、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 943“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9481、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 1000概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 896下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 931<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1657安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1163Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1027///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1070J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1276六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1593HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2128最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 978Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 979在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1053maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 132324小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 108313.9. 使用Spring的 ...
相关推荐
本文将详细介绍两种主要的XML与Java对象互相转换的方法:DOM(Document Object Model)解析和JAXB(Java Architecture for XML Binding)。 1. DOM解析: DOM是一种W3C标准,它将XML文档解析成一棵由节点组成的树,...
通过逐行读取文件,然后按逗号分割每一行得到字段,我们可以轻松地将数据映射到Java对象。 然后,提到的"jaxb"技术,全称Java Architecture for XML Binding,是Java标准中用于XML到Java对象和Java对象到XML的绑定...
通过以上讨论,我们可以看到,Java中子类对象赋值给父类对象是一种强大且灵活的设计模式,它允许我们在代码中使用抽象的父类引用,从而简化编程,增加代码的通用性和可维护性。在实际项目中,合理利用这一特性,能够...
2. **DOM解析**:解析XML文件得到DOM树,然后遍历树并创建相应的Java对象。这通常需要手动编写解析代码,比较繁琐。 3. **SAX解析**:Simple API for XML(SAX)是一种事件驱动的解析方式,适合处理大型XML文件。当...
然后,调用`toArray()`方法将`JSONArray`转换为指定类型的Java对象数组`mProperties`。最后,遍历数组并打印出每个对象的属性值。 ### 使用`org.json`库 在上述代码片段中,虽然使用了`org.json`库,但实际上`org....
函数重载是Java中允许同一方法名但参数列表不同的多个方法存在,这在`Rectangle`类中得到了体现,我们创建了两个方法:`getLength()`和`getArea()`,它们虽然都无参数,但返回类型不同,实现了功能上的区分。...
### Java对象和类 最详细说明 #### 一、Java中的对象 在面向对象编程中,对象是核心概念之一。对象可以被理解为现实世界中事物的抽象表示,它具有特定的状态(属性)和行为(方法)。例如,一辆汽车可以被视为一个...
complexAdd(ComplexNumber c):当前复数对象与形式参数复数对象相加,所得的结果也是复数值,返回给此方法的调用者。 complexAdd(double c):当前复数对象与形式参数实数对象相加,所得的结果仍是复数值,返回给此...
JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许开发者轻松地在Java对象和XML文档之间进行映射。在这个过程中,`JAXBContext`和`Marshaller`扮演了关键角色。 `JAXBContext`是JAXB的...
在Java中,面向对象编程得到了广泛的应用和支持,以下将深入探讨类、对象以及构造方法在Java中的实现。 ### 1. 面向对象的基本概念 #### 1.1 属性与方法 在面向对象中,我们关注的是对象的状态和行为。**属性**...
Java面向对象编程是一种重要的软件开发方法,它基于“对象”的概念,强调数据和操作数据的方法紧密结合,使得代码更易于理解和维护。在这个名为“Java面向对象五子棋”的项目中,我们有两个使用Java实现的五子棋小...
4. **转换为Java对象**:使用`JSONSerializer.toJava()`方法将`JSONArray`转换为指定类型的Java对象数组。 下面是一个示例代码: ```java import org.json.JSONArray; import net.sf.json.JsonConfig; import ...
Java面向对象程序设计是计算机科学中的一个重要领域,尤其在软件开发中占据核心地位。第二版的《Java面向对象程序设计》课件旨在深入浅出地介绍这一关键概念,帮助学习者掌握Java语言的基础以及面向对象编程的核心...
《实用Java教程(书上源代码)基于BlueJ的对象优先方法(第三版)》是一本深受Java初学者欢迎的教材,由David J. Barnes和Michael Kolling共同编写,并得到了Java之父James Gosling的倾情推荐。这本书的核心理念是通过...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。通过反射,我们可以在不知道具体类名或方法名的情况下,动态地调用对象的方法或访问其属性。在...
例如,使用`net.sf.json.JSONObject.fromObject()`方法可以将Java对象转换成JSONObject,再调用`toString()`即可得到JSON字符串。 2. **json-lib库介绍**: - json-lib是Java平台上的一个开源项目,用于处理JSON...
"java面向对象理解" Java 面向对象编程是 Java 语言的核心概念之一。...Java 面向对象编程是一种强大的编程范式,能够帮助程序员更好地模拟现实世界中的对象交互,提高代码的可维护性和可重用性。
在Java编程语言中,构造方法(Constructor)是一个特殊的方法,它的主要作用是初始化新创建的对象。构造方法与类名相同,没有返回类型,也不需要在方法签名中声明void。了解和熟练使用构造方法是Java面向对象编程的...
5. **观察者模式(Observer)**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 在实际的Java应用程序开发中,理解并熟练运用这些面向对象的概念...
1. **子类继承父类就拥有了父类的属性和方法**:当一个类(子类)继承另一个类(父类)时,子类自动获得了父类的所有非私有的成员变量和成员方法,这种机制极大地提高了代码的复用性和维护性。 2. **父类的构造...