不用new新建对象的方式有哪些 不用new新建对象的方式有哪些? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Student student=(Student)class.forname("com.model.student");我目前知道两种再一个就是new了,或者就是到工厂里面取得了?(工厂模式) 可以通过class类public T newInstance() throws InstantiationException, IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化之。 注意,此方法传播 nullary 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。 返回:此对象所表示的类的一个新分配的实例。 抛出: IllegalAccessException - 如果此类或其 nullary 构造方法是不可访问的。 InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 nullary 构造方法; 或者由于某种其他原因导致实例化过程失败。 ExceptionInInitializerError - 如果该方法引发的初始化失败。 SecurityException - 如果存在安全管理器 s,并满足下列任一条件: 调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例 调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包 还有个反序列化 ObjectInputStream 目前就两种吧?new 和 反射!工厂方法之类的其本质还是new一个出来,ObjectInputStream本质还是反射... 还有另外两种方法创建对象,从网上找到的。2.clone若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).Java代码 1. public class Something implements Cloneable{ 2. private Something obj; 3. public Something cloneSomething() 4. { 5. try { 6. obj = (Something)this.clone(); 7. // obj = (Something)clone(); 8. } catch (CloneNotSupportedException e) { 9. e.printStackTrace(); 10. } 11. return obj; 12. 13. } 14. } public class Something implements Cloneable{ private Something obj; public Something cloneSomething() { try { obj = (Something)this.clone();// obj = (Something)clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return obj; }} 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。但是为什么不直接使用somethingNew.clone()呢?JDK中Object# clone()方法的原型是:protected native Object clone() throws CloneNotSupportedException;方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。所以,必需重写Object的clone方法后才能使用。Java代码 1. public Object clone()throws CloneNotSupportedException 2. { 3. Something obj; 4. obj= (Something)super.clone(); 5. return obj; 6. } public Object clone()throws CloneNotSupportedException{ Something obj; obj= (Something)super.clone(); return obj;} 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝". 3.newInstance利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。Java代码 1. somethingNew.getClass().newInstance(). somethingNew.getClass().newInstance(). 或者使用下面的语句(只需要存在相应的.class文件即可)Java代码 1. Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。 反射机制 Student student=(Student)class.forname("com.model.student"); 静态的类就不用new 了 直接可以调用方法 java.lang.String可以这么来:java.lang.String str = "string" ;一些如Integer之类的可以这么来:Long l = 12L;哈哈哈 1.clone2.Class或者java.lang.reflect.Constructor对象的newInstance()3.java.io.ObjectInputStream类的getObject()反序列化具体的可以看8楼,讲得挺清楚 1.clone 2.Class或者java.lang.reflect.Constructor对象的newInstance() 3.java.io.ObjectInputStream类的getObject()反序列化 4,用自定义的classloader从.class文件中load二进制数据,得到Class定义,然后再通过newInstance实例化.container就是这样做的,比如servlet的初始化. java中一共有4种显示地创建对象的方式:1,用new2,运用放射的手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法3,调用对象的clone()方法4,运用反序列化的手段,调用java.io.ObjectInputStream对象的readObject()方法。 哦 单子模式吧~~ package class7_3;public class Singleton { /** * 单子模式 【Singleton】 * 创建一个类,要满足: * * 1.构造器私有。 * 2.用一个私有、静态变量引用实例。 * 3.提供一个共有、静态方法获得实例。 */ //way 1.构造器私有。 private Singleton(){ r = java.lang.Math.random(); } //way 2.定义一个私有、静态的引用变量。 private static Singleton s; //way 3.提供一个共有、静态方法获得唯一实例。 public static Singleton getInstance(){ if(s==null){ s = new Singleton(); } return s; } //********************************************************************************** private double r; public double getR() { return r; } public void setR(double r) { this.r = r; } public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1.getR()); System.out.println(s2.getR()); } } 我只知道三种:newclone反射 请达人看一下我的java程序!帮忙呀 向Jlist里面添加面板会重复显示 线程问题,请高手支招!谢谢! java -cp 和java -classpath有什么区别? 接口里面的方法必须是public吗? 在java中怎么用代码实现按了某个按键 JNI的中文问题? 怎样动态创建按钮 一个关于“继承”的问题!!! 请问学习java入门后,该学些什么,看那些书?谢谢!! 这个代码哪里不对 跟applet相关 在applet中怎么把一个图像文件嵌入图像图标 然后把图像图标置于标签label中
我目前知道两种
再一个就是new了,或者就是到工厂里面取得了?(工厂模式)
public T newInstance()
throws InstantiationException,
IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化之。
注意,此方法传播 nullary 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。
返回:
此对象所表示的类的一个新分配的实例。
抛出:
IllegalAccessException - 如果此类或其 nullary 构造方法是不可访问的。
InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 nullary 构造方法; 或者由于某种其他原因导致实例化过程失败。
ExceptionInInitializerError - 如果该方法引发的初始化失败。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝创建该类的新实例
调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包
工厂方法之类的其本质还是new一个出来,
ObjectInputStream本质还是反射...
2.clone若程序写成如下,则可以根据当前对象(this)建立一个新实例对象(没有调用构造函数).
Java代码 1. public class Something implements Cloneable{
2. private Something obj;
3. public Something cloneSomething()
4. {
5. try {
6. obj = (Something)this.clone();
7. // obj = (Something)clone();
8. } catch (CloneNotSupportedException e) {
9. e.printStackTrace();
10. }
11. return obj;
12.
13. }
14. } public class Something implements Cloneable{
private Something obj;
public Something cloneSomething()
{
try {
obj = (Something)this.clone();
// obj = (Something)clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
} 如果需要复制上面的那个obj指向的对象实例时,调用somethingNew.cloneSomething()方法就ok了。但是为什么不直接使用somethingNew.clone()呢?JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。所以,必需重写Object的clone方法后才能使用。
Java代码 1. public Object clone()throws CloneNotSupportedException
2. {
3. Something obj;
4. obj= (Something)super.clone();
5. return obj;
6. } public Object clone()throws CloneNotSupportedException
{
Something obj;
obj= (Something)super.clone();
return obj;
} 值得注意的是 :如果需要使用clone方法,必需实现java.lang.Cloneable接口,否则会抛出java.lang.CloneNotSupportedException。另外clone方法所做的的操作是直接复制字段的内容,换句话说,这个操作并不管该字段对应的对象实例内容。像这样字段对字段的拷贝(field to field copy)就成为"浅拷贝",clone方法所做的正是"浅拷贝". 3.newInstance利用java.lang.Class类的newInstance方法,则可根据Class对象的实例,建立该Class所表示的类的对象实例。创建Something类的对象实例可以使用下面的语句(这样需要一个已经存在的对象实例)。
Java代码 1. somethingNew.getClass().newInstance(). somethingNew.getClass().newInstance(). 或者使用下面的语句(只需要存在相应的.class文件即可)
Java代码 1. Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance(); 如果包下不存在相应.class文件,则会抛出ClassNotFoundException。注意 :newInstance创建对象实例的时候会调用无参的构造函数,所以必需确保类中有无参数的构造函数,否则将会抛出java.lang.InstantiationException异常。无法进行实例化。
静态的类就不用new 了 直接可以调用方法
java.lang.String str = "string" ;一些如Integer之类的可以这么来:
Long l = 12L;哈哈哈
2.Class或者java.lang.reflect.Constructor对象的newInstance()
3.java.io.ObjectInputStream类的getObject()反序列化具体的可以看8楼,讲得挺清楚
2.Class或者java.lang.reflect.Constructor对象的newInstance()
3.java.io.ObjectInputStream类的getObject()反序列化
4,用自定义的classloader从.class文件中load二进制数据,得到Class定义,然后再通过newInstance实例化.container就是这样做的,比如servlet的初始化.
1,用new
2,运用放射的手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法
3,调用对象的clone()方法
4,运用反序列化的手段,调用java.io.ObjectInputStream对象的readObject()方法。
package class7_3;public class Singleton {
/**
* 单子模式 【Singleton】
* 创建一个类,要满足:
*
* 1.构造器私有。
* 2.用一个私有、静态变量引用实例。
* 3.提供一个共有、静态方法获得实例。
*/
//way 1.构造器私有。
private Singleton(){
r = java.lang.Math.random();
}
//way 2.定义一个私有、静态的引用变量。
private static Singleton s;
//way 3.提供一个共有、静态方法获得唯一实例。
public static Singleton getInstance(){
if(s==null){
s = new Singleton();
}
return s;
}
//**********************************************************************************
private double r; public double getR() {
return r;
} public void setR(double r) {
this.r = r;
}
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1.getR());
System.out.println(s2.getR());
}
}
new
clone
反射