1. 程式人生 > >java與js物件的建立及使用

java與js物件的建立及使用

java與js物件的建立與使用

我們知道類構造器是建立Java物件的途徑之一,通過new 關鍵字呼叫構造器完成物件的例項化,還能通過構造器對物件進行相應的初始化。一個類必須要有一個構造器的存在,如果沒有顯示宣告,那麼系統會預設創造一個無參構造器,在JDK的Object類原始碼中,是看不到構造器的,系統會自動新增一個無參構造器。我們可以通過:

Object obj = new Object();構造一個Object類的物件。

java建立物件的五種方式

①、通過 new 關鍵字

  這是最常用的一種方式,通過 new 關鍵字呼叫類的有參或無參構造方法來建立物件。比如 Object obj = new Object();

  ②、通過 Class 類的 newInstance() 方法

  這種預設是呼叫類的無參構造方法建立物件。比如 Person p2 = (Person) Class.forName("com.ys.test.Person").newInstance();

  ③、通過 Constructor 類的 newInstance 方法

  這和第二種方法類時,都是通過反射來實現。通過 java.lang.relect.Constructor 類的 newInstance() 方法指定某個構造器來建立物件。

  Person p3 = (Person) Person.class.getConstructors()[0].newInstance();

  實際上第二種方法利用 Class 的 newInstance() 方法建立物件,其內部呼叫還是 Constructor 的 newInstance() 方法。

  ④、利用 Clone 方法

  Clone 是 Object 類中的一個方法,通過 物件A.clone() 方法會建立一個內容和物件 A 一模一樣的物件 B,clone 克隆,顧名思義就是建立一個一模一樣的物件出來。

  Person p4 = (Person) p3.clone();

 Object 類的 clone() 方法在 Object.class 類中,原始碼為:

protected native Object clone() throws CloneNotSupportedException;

native 修飾的方法就是告訴作業系統,這個方法我不實現了,讓作業系統去實現。具體怎麼實現我們不需要了解,只需要知道 clone方法的作用就是複製物件,產生一個新的物件。

  ⑤、反序列化

  序列化是把堆記憶體中的 Java 物件資料,通過某種方式把物件儲存到磁碟檔案中或者傳遞給其他網路節點(在網路上傳輸)。而反序列化則是把磁碟檔案中的物件資料或者把網路節點上的物件資料,恢復成Java物件模型的過程。

基本型別和引用型別的區別。

一般我們知道Java分為兩種資料型別,一種是基本資料型別,有八個分別是 byte  short  int  long  float  double  char boolean,一種是引用型別,包括類,介面,陣列等等。而Java中還有一種特殊的 null 型別,該型別沒有名字,所以不可能宣告為 null 型別的變數或者轉換為 null 型別,null 引用是 null 型別表示式唯一可能的值,null 引用也可以轉換為任意引用型別。我們不需要對 null 型別有多深刻的瞭解,我們只需要知道 null 是可以成為任意引用型別的特殊符號

  在 Java 中資料型別可以分為兩大類:基本型別和引用型別。

  基本型別也稱為值型別,分別是字元型別 char,布林型別 boolean以及數值型別 byte、short、int、long、float、double。

  引用型別則包括類、介面、陣列、列舉等。

  Java 將記憶體空間分為堆和棧。基本型別直接在棧中儲存數值,而引用型別是將引用放在棧中,實際儲存的值是放在堆中,通過棧中的引用指向堆中存放的資料

 ②、利用序列化

序列化是將物件寫到流中便於傳輸,而反序列化則是把物件從流中讀取出來。這裡寫到流中的物件則是原始物件的一個拷貝,因為原始物件還存在 JVM 中,所以我們可以利用物件的序列化產生克隆物件,然後通過反序列化獲取這個物件。

  注意每個需要序列化的類都要實現 Serializable 介面,如果有某個屬性不需要序列化,可以將其宣告為 transient,即將其排除在克隆屬性之外。

js建立物件

一、通過”字面量“方式建立。

方法:將成員資訊寫到{}中,並賦值給一個變數,此時這個變數就是一個物件。
例如:
var person = (name:'dongjc', work:function() {console.log('write coding')});
如果{}中為空,則將建立一個空物件:
var person = {} //建立空物件
1 <script type="text/javascript">
2 var person = {
3     name: "dongjc",
4     age: 32,
5     Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
6 };
7 person.Introduce();  
8 </script>

 我們還可以給物件豐富成員資訊。

  物件.成員名稱 = 值;

  物件[成員名稱] = 值;

也可以獲取物件的成員資訊。

  物件.成員名稱;

  物件[成員名稱];

1 <script type="text/javascript">
2     var person = {
3     name: "dongjc",
4     age: 32,
5     Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }
6 };
7 person.worker = 'coding'; //豐富成員資訊
8 </script>

二、通過”建構函式“方式建立。

 方法:

var obj = new 函式名();

這與通過類建立物件有本質的區別。通過該方法建立物件時,會自動執行該函式。建立對像時,會自動呼叫建構函式,因此該方法稱為通過"建構函式“方式建立物件。

 1 <script type="text/javascript">
 2 function Person() {
 3     this.name = "dongjc";    //通過this關鍵字設定預設成員
 4     var worker = 'coding';    //沒有this關鍵字,物件建立後,該變數為非成員
 5     this.age = 32;
 6     this.Introduce = function () {
 7         alert("My name is " + this.name + ".I'm " + this.age);
 8     };
 9     alert("My name is " + this.name + ".I'm " + this.age);
10 };
11 var person = new Person();
12 person.Introduce();
13 </script>

此程式碼一共會兩次跳出對話方塊,原因在於建立物件是自動執行了該函式。

注意:this關鍵字的使用。這裡的this與php中話法意思類似,指呼叫該函式的物件,這裡指的是person。

三、通過object方式建立。

方法:先通過object構造器new一個物件,再往裡豐富成員資訊。

var obj = new Object();
1 <script type="text/javascript">
2 var person = new Object();
3 person.name = "dongjc";
4 person.age = 32;
5 person.Introduce = function () {
6         alert("My name is " + this.name + ".I'm " + this.age);
7     };
8 person.Introduce();
9 </script>