Java中创建(实例化)对象的五种方式1、用new语句创建对象,这是最常见的创建对象的方法。

2、通过工厂方法返回对象,如:String str = String.valueOf(23);

3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName("java.lang.Object").newInstance();

4、调用对象的clone()方法。

5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

/*

*测试Cloneable接口的使用

*包含第一种和第三种方法clone()

*不过要注意在clone()中深复制和潜复制的理解

*实例化对象

*/

class Person implements Cloneable{

private String name;

private int age;

public Person( String name,int age) {

this.name = name;

this.age = age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name){

this.name =name;

}

@Override

public Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

return super.clone();

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "姓名是:"+name+"; 年龄是:"+age;

}

}

public class TestClone{

public static void main(String[] args){

Person p1 = new Person("是的发个",25);

System.out.println(p1);

Person p2 =null;

try {

p2 = (Person)p1.clone();

} catch (CloneNotSupportedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

p2.setName("对方过后");

p2.setAge(56);

System.out.println(p2);

}

}

/*

*通过反射对对象进行初始化

*注意必须有无参数的Constructor

*实例化Class类然后调用newInstance()方法

*

*/

class Person{

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String toString(){

return "年龄是:"+this.age+" 姓名是:"+this.name;

}

}

public class TestClass {

public static void main(String[] args){

Class< ?> c1 = null;

try{

c1 = Class.forName("org.whb.test.demo715.Person");

}catch(ClassNotFoundException e){

e.printStackTrace();

}

Person p1 = null;

try {

p1 =(Person)c1.newInstance();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

p1.setAge(12);

p1.setName("haobo");

System.out.println(p1);

}

}

import java.io.*;

import java.util.Date;

/**

* 对象的序列化和反序列化测试类.

*1、序列化是干什么的?

简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自 己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

*2、什么情况下需要序列化

a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

b)当你想用套接字在网络上传送对象的时候;

c)当你想通过RMI传输对象的时候;

*

*3、相关注意事项

a)序列化时,只对对象的状态进行保存,而不管对象的方法;

b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;

d)并非所有的对象都可以序列化,,至于为什么不可以,有很多原因了,比如:

1.安全方面的原因,比如一个对象拥有private,public等field,对于一个要传输的对象,比如写到文件,或者进行rmi传输 等等,在序列化进行传输的过程中,这个对象的private等域是不受保护的。

2. 资源分配方面的原因,比如socket,thread类,如果可以序列化,进行传输或者保存,也无法对他们进行重新的资源分 配,而且,也是没有必要这样实现。

*/

public class ObjectSaver {

public static void main(String[] args) throws Exception {

ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream("D:/objectFile.swf"));

//序列化对象

Customer customer = new Customer("haobo", 24);

out.writeObject("你好!");

out.writeObject(new Date());

out.writeObject(customer);

out.writeInt(123); //写入基本类型数据

out.close();

//反序列化对象

ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:/objectFile.swf"));

System.out.println("obj1=" + (String) in.readObject());

System.out.println("obj2=" + (Date) in.readObject());

Customer obj3 = (Customer) in.readObject();

System.out.println("obj3=" + obj3);

int obj4 = in.readInt();

System.out.println("obj4=" + obj4);

in.close();

}

}

class Customer implements Serializable {

/**

*

*/

private static final long serialVersionUID = -88175599799432325L;

private String name;

private int age;

public Customer(String name, int age) {

this.name = name;

this.age = age;

}

public String toString() {

return "name=" + name + ", age=" + age;

}

}

/*

* obj1=你好!

obj2=Sat Jul 24 21:18:19 CST 2010

obj3=name=haobo, age=24

obj4=123

*/

Java中,类的实例化方法有四种途径:

1)使用new操作符

2)调用Class对象的newInstance()方法

3)调用clone()方法,对现有实例的拷贝

4)通过ObjectInputStream的readObject()方法反序列化类

无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。

Java中创建实例化对象的几种方式

Java中创建实例化对象有哪些方式? ①最常见的创建对象方法,使用new语句创建一个对象.②通过工厂方法返回对象,例:String s =String.valueOf().(工厂方法涉及到框架)③动用 ...

spring中创建bean对象的三种方式以及作用范围

时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

java 中创建线程有哪几种方式?

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

Java反射机制&lpar;创建Class对象的三种方式&rpar;

1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Fi ...

Java反射机制(创建Class对象的三种方式)

1:了解什么是反射机制? 在通常情况下,如果有一个类,可以通过类创建对象:但是反射就是要求通过一个对象找到一个类的名称:   2:在反射操作中,握住一个核心概念: 一切操作都将使用Object完成,类 ...

Java反射02 &colon; Class对象获取的三种方式和通过反射实例化对象的两种方式

1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

Java中创建的对象多了,必然影响内存和性能

1, Java中创建的对象多了,必然影响内存和性能,所以对象的创建越少越好,最后还要记得销毁.

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

随机推荐

Objective-C的内省&lpar;Introspection&rpar;小结

内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富.内省是对象揭示自己作为一个运行时对象的详细信息的一种能力.这些详细信息包括 ...

sed删除空行和注释行

最近在看前辈们写的代码,他们把没有用的代码是注释掉而不是删掉.没用的代码和注释很乱,看着心烦,就把注释删掉来解读,顿时爽快多了. 不多说了,直接举例子 比如一个文本文件 data 里的内弄为 cat ...

Opencv关于滑动条bar操作的实例

代码如下: // // 该程序产生一个窗口10s 如果 ...

Scrapy爬虫实例——校花网

学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地.Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有更高的性能. Scrapy官方定义:Scrapy是用于抓取网 ...

Structs复习 Structs标签

如果类型是object Structs会把它默认解析为OGNL表达式 想取字符串的话就 ‘’ ‘ ’ ‘’ jar包 web.xml. <?xml version="1.0" ...

&lbrack;转&rsqb;&commat;PathVariable和&commat;RequestParam的区别

请求路径上有个id的变量值,可以通过@PathVariable来获取  @RequestMapping(value = "/page/{id}", method = Request ...

【深度学习的实用层面】(一)训练,验证,测试集(Train&sol;Dev&sol;Test sets)

在配置训练.验证.和测试数据集的过程中做出正确的决策会更好地创建高效的神经网络,所以需要对这三个名词有一个清晰的认识. 训练集:用来训练模型 验证集:用于调整模型的超参数,验证不同算法,检验哪种算法更 ...

Python 正则:前后界定和前后非界定

在用正则去匹配识别手机号.QQ.微信号的时候,往往由于输入的文本可能非常的另类,比如,没有标点和隔断,这时`^`和`$`就用不上了. 不用其实也可以识别的,但是有个问题,手机后是11位数字,QQ是5~ ...

Tkinter Entry

Python - Tkinter输入(Entry): 用于接受用户Entry小窗口部件单行文本字符串.   用于接受用户Entry小窗口部件单行文本字符串. 如果你想显示多行文本可以编辑,那么你应该使 ...

ZigBee设备入网流程之关联方式

ZigBee设备入网流程 ZigBee设备入网有关联方式和直接方式两种,我所熟悉的是关联方式,这也是最常用的方式. 关联方式 step1 设备发出Beacon Request 设备会在预先设置的几个信 ...

java 给对象创建实例_Java中创建(实例化)对象的五种方式相关推荐

  1. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  2. java反射创建实例_Java反射创建实例

    Java反射创建实例 package com.wkcto.chapter08.demo02; import java.lang.reflect.Constructor; import java.lan ...

  3. java resultset 映射到实例_Java中,将ResultSet映射为对象和队列及其他辅助函数

    关于对象关系映射(ORM)在数据库访问中用到的最多,在Java中,很多库都试图将一个ResultSet映射为一个自定义的Java Bean对象或队列,下面是我的实现 1 从ResultSet中读取数据 ...

  4. java在linux创建文件_Java中创建并写文件的5种方式

    导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...

  5. java 怎么创建窗体_java中创建窗体的方法

    java中创建窗体的方法 发布时间:2020-06-16 11:26:04 来源:亿速云 阅读:102 作者:Leah 这篇文章给大家分享的是有关java中创建窗体的方法,小编觉得挺实用的,因此分享给 ...

  6. java 对象的交互_Java中什么是对象的交互?解释一下交互怎么操作?

    其实并没有那个复杂.java中对象是什么,你要明白一点就是: 在java中万物皆对象 比如,实体类之间的互相调用,不想访问以及访问其他属性及其方法等. 不论你是线程,还是异步任务,还是...都可以用以 ...

  7. java中map类型_Java中Map类型遍历的两种方式对比

    Java中Map类型是存储键值对数据的类型,在编程过程经常使用,进行遍历操作对于每个Java程序员都不会模式,下面总结两种常用的遍历方式(一种keySet,一种entrySet),通过对比让你明白使用 ...

  8. JAVA中的arraylist集合_java中遍历ArrayList集合的四种方式

    详细内容 ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双 ...

  9. java中遍历集合_java中遍历ArrayList集合的四种方式

    ArrayList遍历:取出ArrayList集合中的数据 方式一:for循环 方式二:增强for循环:foreach 方式三:Iterator:迭代器 方式四:ListIterator:双向迭代器 ...

最新文章

  1. R语言str_starts函数和str_ends函数检查在字符串的开头或者结尾是否存在特定字符串或者字符串模式
  2. 怎样不让Dreamweaver中HTML源代码不自动换行??
  3. 前端学习(2471):vue-echarts和echarts的区别:
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]51.基于ID的加密安全模型,描述IBE方案
  5. spring mvc 配置解析之xml
  6. 互联网企业安全之端口监控
  7. 日期控件的用法 winform
  8. FFMpeg编译支持NVidia CODEC(成功)
  9. 这是你所了解的FaaS 么?——无服务计算的10个思考
  10. 怎样用计算机制作漫画,用电脑绘制漫画需要些什么?步骤是什么?
  11. Web框架-SSM框架
  12. epicor数据表增加字段
  13. 短信链接复制搜索公众号,短信如何推广公众号?
  14. 重新连接 到 时出错 Microsoft Windows Network:本地设备名已在使用中
  15. 如何用python计算excel两行之间的差值_excel表格求两列数据差值-怎样在EXCEL表格中求两列数的差?...
  16. bitcoin(1)
  17. 视频拼接剪辑怎么弄?分享三个小妙招给你们
  18. 1月5日 负数的十六进制如何表示。
  19. HTTP与HTTPS是啥?
  20. 1032 挖掘机技术哪家强 (20分) 测试点4

热门文章

  1. 搜狐视频怎么开启自动连播
  2. 百度地图API实现地图应用
  3. 学计算机激励标语口号,激励学习的口号
  4. oracle导致的负载高,Oracle 11g 数据库服务器CPU、IO负载高的故障排除流程
  5. Springboot中@ComponentScan 注解
  6. 预处理prepareStatement是怎么防止sql注入漏洞的?
  7. 使用Jedis连接远程服务器的redis
  8. linux查看正在运行的窗口,获取linux中打开的应用程序窗口的数量
  9. c mysql web开发实例教程_Web开发(六)MySql
  10. python 递归函数例子_python函数递归的几个例子