java 给对象创建实例_Java中创建(实例化)对象的五种方式
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反射機制(創建Class對象的三種方式)
1:SUN提供的反射機制的類: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Fi ...
Java反射機制(創建Class對象的三種方式)
1:了解什么是反射機制? 在通常情況下,如果有一個類,可以通過類創建對象:但是反射就是要求通過一個對象找到一個類的名稱: ? 2:在反射操作中,握住一個核心概念: 一切操作都將使用Object完成,類 ...
Java反射02 : 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的內省(Introspection)小結
內省(Introspection)是面向對象語言和環境的一個強大特性,Objective-C和Cocoa在這個方面尤其的豐富.內省是對象揭示自己作為一個運行時對象的詳細信息的一種能力.這些詳細信息包括 ...
sed刪除空行和注釋行
最近在看前輩們寫的代碼,他們把沒有用的代碼是注釋掉而不是刪掉.沒用的代碼和注釋很亂,看著心煩,就把注釋刪掉來解讀,頓時爽快多了. 不多說了,直接舉例子 比如一個文本文件 data 里的內弄為 cat ...
Opencv關于滑動條bar操作的實例
代碼如下: // // 該程序產生一個窗口10s 如果 ...
Scrapy爬蟲實例——?;ňW
學習爬蟲有一段時間了,今天使用Scrapy框架將?;ňW的圖片爬取到本地.Scrapy爬蟲框架相對于使用requests庫進行網頁的爬取,擁有更高的性能. Scrapy官方定義:Scrapy是用于抓取網 ...
Structs復習 Structs標簽
如果類型是object Structs會把它默認解析為OGNL表達式 想取字符串的話就 ‘’ ‘ ’ ‘’ jar包 web.xml. <?xml version="1.0" ...
[轉]@PathVariable和@RequestParam的區別
請求路徑上有個id的變量值,可以通過@PathVariable來獲取? @RequestMapping(value = "/page/{id}", method = Request ...
【深度學習的實用層面】(一)訓練,驗證,測試集(Train/Dev/Test sets)
在配置訓練.驗證.和測試數據集的過程中做出正確的決策會更好地創建高效的神經網絡,所以需要對這三個名詞有一個清晰的認識. 訓練集:用來訓練模型 驗證集:用于調整模型的超參數,驗證不同算法,檢驗哪種算法更 ...
Python 正則:前后界定和前后非界定
在用正則去匹配識別手機號.QQ.微信號的時候,往往由于輸入的文本可能非常的另類,比如,沒有標點和隔斷,這時`^`和`$`就用不上了. 不用其實也可以識別的,但是有個問題,手機后是11位數字,QQ是5~ ...
Tkinter Entry
Python - Tkinter輸入(Entry): 用于接受用戶Entry小窗口部件單行文本字符串. ? 用于接受用戶Entry小窗口部件單行文本字符串. 如果你想顯示多行文本可以編輯,那么你應該使 ...
ZigBee設備入網流程之關聯方式
ZigBee設備入網流程 ZigBee設備入網有關聯方式和直接方式兩種,我所熟悉的是關聯方式,這也是最常用的方式. 關聯方式 step1 設備發出Beacon Request 設備會在預先設置的幾個信 ...
總結
以上是生活随笔為你收集整理的java 给对象创建实例_Java中创建(实例化)对象的五种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python入门基础篇(四)字符串的常用
- 下一篇: 做一个关于我和她微信聊天记录的爱心词云图