自定義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.由於是私有的,類的設計者可以根據情況改變或刪除私有方法
內存分配及程序運行過程