Java基础---bat 克隆 内存泄漏

来源:互联网 发布:如何上传网站源码 编辑:程序博客网 时间:2024/06/18 06:22
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());
}



}

}

原创粉丝点击