1. 程式人生 > >Java基礎---bat 克隆 記憶體洩漏

Java基礎---bat 克隆 記憶體洩漏

package cn.itcast.bat;
/*
bat處理檔案: bat處理檔案就是可以一次性執行多個命令的檔案。




為什麼要學bat處理檔案, 快速執行一個軟體我一般都會把軟體打包一個jar包。


jar雙擊可以執行僅對於圖形化介面的軟體起作用,對於控制檯的程式是不起作用的。
對於控制檯的程式我們可以使用bat處理檔案快速啟動一個專案。




如何編寫bat處理檔案呢? 
步驟: 編寫一個自定義的文字檔案,然後把字尾名改成bat即可,然後把你所要執行的命令寫在bat處理檔案中即可。

bat處理檔案常用的命令:
echo 向控制檯輸出指定的內容。
echo off 隱藏echo off後面執行過的命令。
@      隱藏當前行執行的命令。
title 改變當前控制檯視窗的標題
color 指定控制檯的背景顏色與前景顏色
%註釋的內容%
pause: 讓當前控制檯停留。
%1~%9:   給bat處理檔案傳入引數。


*/
public class Demo1 {

public static void main(String[] args) {
System.out.println("哈哈...");
}

}



package cn.itcast.copy;
/*
物件的克隆

物件的淺克隆:

物件淺克隆要注意的細節: 
1. 如果一個物件需要呼叫clone的方法克隆,那麼該物件所屬的類必須要實現Cloneable介面。
2. Cloneable介面只不過是一個標識介面而已,沒有任何方法。
3. 物件的淺克隆就是克隆一個物件的時候,如果被克隆的物件中維護了另外一個類的物件,這時候只是克隆另外一個物件的地址,而沒有把
另外一個物件也克隆一份。
4. 物件的淺克隆也不會呼叫到構造方法的。

物件的深克隆:


*/
public class Demo1 {


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

Address address = new Address("廣州");
Person p1 = new Person(110,"狗娃",address);
Person p2 = (Person) p1.clone(); //clone() 克隆了一個物件。

p2.name = "狗剩";
p2.address.city ="長沙";
System.out.println("p1:"+p1);
System.out.println("p2:"+ p2);



}


}




package cn.itcast.copy;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


/*
物件的深克隆: 物件的深克隆就是利用物件的輸入輸出流把物件先寫到檔案上,然後再讀取物件的
資訊這個過程就稱作為物件的深克隆。

ObjectInputStream
ObjectOutputStream 


 */
public class Demo2 {


public static void main(String[] args) throws IOException, ClassNotFoundException {
Address address = new Address("廣州");
Person p1 = new Person(110,"狗娃",address);
writeObj(p1);
Person p2  =readObj();

p2.address.city = "長沙";
System.out.println("p1:"+ p1);
System.out.println("p2:"+ p2);


}


//再從檔案中讀取物件的資訊
public static Person readObj() throws ClassNotFoundException, IOException{
FileInputStream fileInputStream = new FileInputStream("F:\\obj.txt");
//建立物件的輸入流物件
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
return (Person) objectInputStream.readObject();
}


//先要把物件寫到檔案上。
public static void writeObj(Person p) throws IOException{
//建立一個檔案 的輸出流物件
FileOutputStream fileOutputStream  = new FileOutputStream("F:\\obj.txt");
//建立物件的輸出流
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
//把物件寫出
objectOutputStream.writeObject(p);
//關閉資源
objectOutputStream.close();

}



}





package cn.itcast.copy;
import java.io.Serializable;


class Address implements Serializable{

String city;

public Address(String city){
this.city = city;
}

}






public class Person implements Cloneable,Serializable {

int id;

String name;

Address address;


public Person(int id, String name) {
this.id = id;
this.name = name;

}




public Person(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
System.out.println("=======構造方法呼叫了===");
}








@Override
public String toString() {
return "編號:"+ this.id+" 姓名:"+ this.name+" 地址:"+ address.city;
}


@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}



}




package cn.itcast.list;


import java.util.Arrays;


/*
 記憶體洩露
 
需求:編寫一個類使用陣列模擬堆疊的儲存方式。  


堆疊儲存特點: 先進後出,後進先出。




注意: 不再使用的物件,應該不要讓變數指向該物件,要讓該物件儘快的被垃圾回收器回收。




 */
class StackList{

Object[] elements;

int index = 0 ; //當前的索引值

public StackList(){
this.elements = new Object[3];
}

//新增內容
public void add(Object o){
//新增元素之前應該要先檢查是否容量夠用。
ensureCapcity();
elements[index++] = o;
}


//出棧: 刪除集合的元素,並且返回。
public Object pop(){
int tempIndex = --index;
Object o = elements[tempIndex];
elements[tempIndex] = null; //讓該位置不再 引用著指定的物件,讓垃圾回收期趕快回收該垃圾。
return o;
}


//檢查當前的陣列是否夠用。
public void ensureCapcity(){
if(index==elements.length){
//計算一個新的長度
int newLength = elements.length*2;
elements = Arrays.copyOf(elements, newLength);
}
}

//獲取當前的元素 個數
public int size(){
return index;
}


}










public class Demo1 {


public static void main(String[] args) {
StackList list = new StackList();
list.add("狗娃");
list.add("狗剩");
list.add("鐵蛋");
list.add("美美");

int size = list.size();
for(int i = 0 ; i<size ; i++){
System.out.println(list.pop());
}



}

}