java 构建对象实例有几种方法? java 构建对象实例有几种方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 两种.1.通过构造方法,new2.通过反射Class 类的newInstance方法 都是由構造函數來的吧,你問的是design pattern? 1、new2、clone3、方法返回值 1、new 2、clone 有4种的,记不得了。 方法一:new方法二:使用工厂模式,引入工厂类方法三:使用反射:Class.forName方法四:对象克隆 有4种显示地创建对象的方式 1 用new语句创建,这事最常用的创建对象的方式 2 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor类的newInstance() 3 用对象的clone()方法4 运用反序列化手段,调用java.io.ObjectInputStream 对象的readObject()方法 我问的是JAVA的一条面试题:请列出构建一个对象实例的几种方法。 1、使用关键字new2、使用java反射:class.forName("类名").newInstance() 注意:类名为:包名+类名3、使用工厂模式,定义一个工厂类 1、通过构造方法,new2、反序列化3、通过反射动态创建对象 说白了就一种 new ,无非是你程序代码 new ,还是JDK代码 new 的.clone 还是调用了 new.newInstance 里面还是new. 方法一:new 方法二:使用工厂模式,引入工厂类 这里主要是指接口方法三:使用反射:Class.forName 方法四:对象克隆 一共有5种1.new2.反射newInstance3.克隆clone4.序列化Serializable5.使用Spring的DI例子如下1.new通常都是使用java的关键字new来创建对象实例。若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。Java代码 Student stu=new Student();2.反射 newInstance利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。Java代码 Student stu= Student Class.forName("cn.test.Student").newInstance();如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。3.克隆cloneJDK中Object# clone()方法的原型是: protected native Object clone() throws CloneNotSupportedException; 方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。 所以,必需重写Object的clone方法后才能使用。package cn.test;public class Student implements Cloneable { private String username; private String password; //重写clone方法 public Object clone() throws CloneNotSupportedException { Student stu; stu = (Student) super.clone(); return stu; } //类的空构造函数 public Student() { } //类的带参数构造函数 public Student(String username, String password) { this.username = username; this.password = password; } /** * get set 方法 * * */ 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 static void main(String[] args) { Student student1 = new Student("aa", "11"); /** * 克隆时必须捕获CloneNotSupportedException异常 * */ try { Student student2 = (Student) student1.clone(); if (student1 != null) { System.out.println(student2); } else { System.out.println("Clone Not Supported"); } } catch (CloneNotSupportedException c) { c.printStackTrace(); } }}4.序列化 Serializable序列化之前必须先实现类的Serializable接口同时序列化类private static final long serialVersionUID = 1L;测试代码java 因为序列化是输出输入流,所以要先抛出IO异常public static void main(String[] args)throws IOException { try { Student stu=new Student("aa","11"); //创建一个对象输出流 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("d:/obj.dat")); oos.writeObject(stu); oos.close(); //创建一个对象输入流 ObjectInputStream ois=new ObjectInputStream(new FileInputStream("d:/obj.dat")); Object obj=ois.readObject(); Student stuBak=(Student)obj; //打印数据在控制台,检查序列化和反序列化是否成功 System.out.println("stu name is: "+stuBak.getUsername()); System.out.println("stu pass is: "+stuBak.getPassword()); } catch (ClassNotFoundException e) { e.printStackTrace(); } }5.使用Spring的DI一、定义:Spring 是一个开源的控制反转(Inversion of Control,IoC/DI)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发二、实例化Spring容器: 方法一:在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{“beans.xml”}); 方法二:在文件系统路径下寻找配置文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:""beans.xml”});注:文件可指定多个可建立单元测试来测试Spring容器的初始化http://www.blogjava.net/jzone/articles/321967.html(spring的DI创建实例详细文档)至于还有其他就不知道了,我知道的就是这些。欢迎互相探讨 BufferImage 部分 变化 如何访问一个类的静态内部类 如何读取自身Jar包中的文件.? java的API中的函数没有类似MSDN的例子请问是否有这类在线文挡 Java内部使用的是utf-8吗? 请问JFrame与JDialog的区别以及Runnable与thread的区别 请各位大侠帮忙JOptionPane的显示问题 请各位指点一下 有两个问题,每个15分 不是说hashset对元素的存储是无序的吗?那为什么输出是有序的? 股票曲线匹配 哪位达人帮小弟看一下那个地方出错了
1.通过构造方法,new
2.通过反射Class 类的newInstance方法
2、clone
3、方法返回值
2、clone 有4种的,记不得了。
方法二:使用工厂模式,引入工厂类
方法三:使用反射:Class.forName
方法四:对象克隆
1 用new语句创建,这事最常用的创建对象的方式
2 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor类的newInstance()
4 运用反序列化手段,调用java.io.ObjectInputStream 对象的readObject()方法
1、使用关键字new2、使用java反射:class.forName("类名").newInstance()
注意:类名为:包名+类名3、使用工厂模式,定义一个工厂类
2、反序列化
3、通过反射动态创建对象
newInstance 里面还是new.
方法二:使用工厂模式,引入工厂类 这里主要是指接口
方法三:使用反射:Class.forName
方法四:对象克隆
1.new
2.反射newInstance
3.克隆clone
4.序列化Serializable
5.使用Spring的DI例子如下1.new
通常都是使用java的关键字new来创建对象实例。若有一个Something类,则可以通过下面的语句创建Something类的对象实例并指定到变量obj。Java代码
Student stu=new Student();2.反射 newInstance
利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。Java代码 Student stu= Student Class.forName("cn.test.Student").newInstance();
如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。3.克隆clone
JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException; 方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。 所以,必需重写Object的clone方法后才能使用。package cn.test;public class Student implements Cloneable {
private String username;
private String password;
//重写clone方法
public Object clone() throws CloneNotSupportedException {
Student stu;
stu = (Student) super.clone();
return stu;
}
//类的空构造函数
public Student() {
}
//类的带参数构造函数
public Student(String username, String password) {
this.username = username;
this.password = password;
}
/**
* get set 方法
*
* */
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 static void main(String[] args) {
Student student1 = new Student("aa", "11");
/**
* 克隆时必须捕获CloneNotSupportedException异常
* */
try {
Student student2 = (Student) student1.clone();
if (student1 != null) {
System.out.println(student2);
} else {
System.out.println("Clone Not Supported");
}
} catch (CloneNotSupportedException c) {
c.printStackTrace();
}
}}4.序列化 Serializable
序列化之前必须先实现类的Serializable接口
同时序列化类
private static final long serialVersionUID = 1L;
测试代码
java
因为序列化是输出输入流,所以要先抛出IO异常
public static void main(String[] args)throws IOException {
try {
Student stu=new Student("aa","11");
//创建一个对象输出流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("d:/obj.dat"));
oos.writeObject(stu);
oos.close();
//创建一个对象输入流
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("d:/obj.dat"));
Object obj=ois.readObject();
Student stuBak=(Student)obj;
//打印数据在控制台,检查序列化和反序列化是否成功
System.out.println("stu name is: "+stuBak.getUsername());
System.out.println("stu pass is: "+stuBak.getPassword());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
5.使用Spring的DI
一、定义:Spring 是一个开源的控制反转(Inversion of Control,IoC/DI)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发二、实例化Spring容器: 方法一:在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{“beans.xml”}); 方法二:在文件系统路径下寻找配置文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:""beans.xml”});注:文件可指定多个可建立单元测试来测试Spring容器的初始化
http://www.blogjava.net/jzone/articles/321967.html(spring的DI创建实例详细文档)至于还有其他就不知道了,我知道的就是这些。欢迎互相探讨