java學習(六)——自定義類、內存分配

自定義Student類 

public class StudentTest
{
	public static void main(String[] args)
	{
		//如何使用類
		/*1.創建對象		
			格式:  類名 對象變量名=new 類構造器();	類構造器也稱類構造方法
			注:創建的對象位於堆內存中
		*/
		Student s1=new Student();		//這裏的Student是默認的構造器
		System.out.println("名字:"+s1.name+" 年齡:"+s1.age+"\t住址:"+s1.add);
		/*2.使用成員變量 
			格式: 對象.成員變量
		*/
		s1.name="葉葉";
		s1.age=17;
		s1.add="甘肅省**********";
		System.out.println("名字:"+s1.name+"年齡:"+s1.age+"\t住址:"+s1.add);
		/*3.調用成員方法 
			格式: 對象.成員方法名(參數列表);		//前面的對象也稱爲該方法的隱式參數
		*/
		System.out.println(s1.name+s1.sleep());

		/*4.使用匿名對象
		匿名對象:沒有名字的對象,即沒有任何對象變量指向它
			常用於只使用一次對象的情況和作爲實際參數進行傳遞
		*/
		System.out.println(new Student().name);	//new Student()就是一個匿名對象
	}
}

/*
	定義一個類就是定義該類的成員變量和成員方法
	類:
		成員變量:		對應事物的屬性
		成員方法:		對應事物的行爲
*/
//定義一個Student類
class Student
{
	//定義變量(也可以稱爲實例域(必須創建對象才能使用)或數據域)
		String name;	//成員變量
		int age;		//成員變量
		String add;		//成員變量

		//定義成員方法(也成爲實例方法)
		public String sleep()
		{
			return "睡覺";
		}
		public void eat(String food)
		{
			System.out.println(name+"吃"+food);
		}
		
		//以下三個方法用於返回實例域的值,因此又被稱爲域訪問器
		public String getName()
		{
			return name;
		}
		public int getAge()
		{
			return age;
		}
		public String getAdd()
		{
			return add;
		}
		//以下三個方法用於修改實例域的值,因此又被稱爲域更改器
		public void setName(String name)
		{
			this.name=name;
		}
		public void setAge(int age)
		{
			this.age=age;
		}
		public void setAdd(String add)
		{
			this.add=add;
		}
}

定義域更改器和域訪問器的優點

 1.可以改變類內部的實現,除了該類的方法外,不會影響其他代碼

    如:將                 String name; 
      
        改爲              Strint xing;    //表示姓
                         String ming;    //表示名
       
        將方法            public String getName(){
                               return name;
                         }
      
        改爲              public String getName(){
                                return xing+ming;
                         }

   如果改變類後想要獲得name時,主方法中就要使用    對象.xing+對象.ming
   而如果使用域訪問器,主方法中就不需要做任何改變。

2.域更改器方法可以進行錯誤檢查


                直接對域進行賦值時        對象.age=-12;        //
很明顯age的值不能小於0,但是並不會報錯   
                而使用域更改器可以判斷age是否小於0,從而進行錯誤處理

注意:

不要編寫返回可變對象的訪問器方法,如:

class Student{
    private Date day;
    ……
    public Date getDay()
    {
        return day;
    }
    ……
}
public class Student{
    public static void main(String[] args)
    {
        Student st1=new Student();
        Date d1=st1.getDay();
        //d1和st1.day所引用的是同一個Date類對象;修改d1就會影響到st1的實例域,破壞了類的封裝性
    }
}

 如果需要返回一個可變對象的引用,應該首先對其進行克隆(clone)。即將對象在別處拷貝一份副本。然後將副本的引用返回。改進後如下。

class Student
{
    private Date day;
    ……
    public Date getDay(){
        return (Date)day.clone();
    }
}

在實現一個類時

1.常常將所有的數據域設置私有的private,確保只有類自身的方法纔可以訪問這些數據域,從而保證了類的封裝性。
2.常常將方法設置爲公有的public,public意味着任何類任何方法都可以調用這些方法

私有方法

有時,可能希望將一個計算機代碼劃分爲若干個獨立的輔助方法,而這些輔助方法不應該成爲公有接口的一部分。(它們往往與當前的實現機制非常緊密,或者需要一個特別的協議以及一個特別的調用次序)這時可以把這些方法設置爲私有方法

 實現私有方法的方式使用關鍵字 private 訪問修飾符修飾方法
 特點1.只有類自身的方法纔可以調用這些方法。
             2.由於是私有的,類的設計者可以根據情況改變或刪除私有方法

     

內存分配及程序運行過程

 

 

返回目錄 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章