java基础之创建对象的方式
来源:互联网 发布:电子科大网络教育学费 编辑:程序博客网 时间:2024/05/04 10:06
一星期前我只知道2种方式创建对象,第一种是new 第二种是反射,后来遇到了个蚂蚁金服面试,牛B的大神问我java创建对象的方式有几种,瞬间进了坑。
这里引用了一个哥们的文章http://www.cnblogs.com/wxd0108/p/5685817.html
java创建对象有5种方式:
1、 new,最常见的方式 Test t=new Test();
2、使用Class类反射:
Thread thread = (Thread) Class.forName("org.http.ThreadA").newInstance();
或者 Thread thread =ThreadA.class.newInstance();
3、使用Constructor类反射:
ThreadA thread =ThreadA.class.getConstructor().newInstance();
这两种的区别被许多开源框架底层使用,具体区别在哪得再找个空研究研究
4、使用clone方法: 就是实现一个Cloneable 接口,使用clone()方法创建
无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数
注:引用的哥们的文章上有一个地方不对,我试了1.6到1.8的jdk:并不需要在实体中实现或定义clone()方法,也能正常创建对象
如果不实现Cloneable 接口 直接运行mian方法会抛出java.lang.CloneNotSupportedException异常
代码==========================
这里引用了一个哥们的文章http://www.cnblogs.com/wxd0108/p/5685817.html
java创建对象有5种方式:
1、 new,最常见的方式 Test t=new Test();
2、使用Class类反射:
Thread thread = (Thread) Class.forName("org.http.ThreadA").newInstance();
或者 Thread thread =ThreadA.class.newInstance();
3、使用Constructor类反射:
ThreadA thread =ThreadA.class.getConstructor().newInstance();
这两种的区别被许多开源框架底层使用,具体区别在哪得再找个空研究研究
4、使用clone方法: 就是实现一个Cloneable 接口,使用clone()方法创建
无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数
注:引用的哥们的文章上有一个地方不对,我试了1.6到1.8的jdk:并不需要在实体中实现或定义clone()方法,也能正常创建对象
如果不实现Cloneable 接口 直接运行mian方法会抛出java.lang.CloneNotSupportedException异常
代码==========================
public class T1 implements Cloneable {
private int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
5、使用反序列化:
T1类实现Serializable
我的理解:
public static void main(String[] args) throws Exception
{
T1 t1=new T1();
T1 t=(T1) t1.clone();
System.out.println("创建完成");
} 5、使用反序列化:
当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。
为了反序列化一个对象,我们需要让我们的类实现Serializable接口 T1类实现Serializable
ObjectInputStream in = new ObjectInputStream(new FileInputStream("对象流"));
T1 t=(T1) in.readObject(); 我的理解:
类被加载的时候jvm自动创建Class对象,无需new,无需反射
执行一个类的时候(main方法),会自动创建一个String数组作为参数,无需new,无需反射
有人说String a="";也是创建对象的一种方法,好像是那么回事
有人说String a="";也是创建对象的一种方法,好像是那么回事
0 0
- java基础之创建对象的方式
- java对象的创建方式
- Java创建对象的方式
- Java创建对象的方式
- java创建对象的方式
- java创建对象的方式
- java创建对象的方式
- java 创建对象的方式
- Java创建对象的方式
- java创建对象的方式
- 【Java语言学习】之创建对象的方式种类
- Java基础:多线程之线程创建的两种方式
- JAVA基础笔记之String的创建方式
- Java多线程基础学习之线程的创建方式总结
- Java基础之获取Class对象的三种方式
- java创建对象方式
- JAVA对象创建方式
- C++之创建对象的方式详解
- 关于数据库事务隔离级别与锁
- android基础知识----时间戳
- FreeImage例子
- java 获得对象几种方法
- 策略管理
- java基础之创建对象的方式
- PHP递归写入MySQL无限级分类数据
- pyqt信号和槽传递额外参数
- python创建字典多种方式
- WebService到底是什么?
- ONLY_FULL_GROUP_BY简记
- 转载的文章列表,有空多看看
- Java动态代理的两种实现方法
- CentOS6.X升级Python