理解封裝:封裝指的是將對象的內部狀態信息隱藏在對象內部,不允許外部程序直接訪問對象的內部信息,而是要通過該類所提供的方法來實現對內部信息的訪問和操作。
舉例:若不將類的屬性封裝,那麼就可以通過對象來訪問類的屬性,比如在下面的例子裏面,可以通過Person對象將年齡age直接賦值爲1000,這樣是非常不好的,而對屬性進行封裝了以後,可以在方法裏面加入控制語句,控制年齡的範圍,限制對屬性的不合理的訪問。而且可以進行數據檢查,保證數據的完整性。
public class Person {
public int age;
public String name;
}
經過封裝以後:
public class Person {
public int age;
public String name;
//把這些方法暴露出來,讓這些方法來操作或訪問屬性
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
if(age > 0 && age < 100)
{
this.age = age;
}
else
{
System.out.println("年齡範圍不正確");
}
}
public void setName(String name)
{
this.name = name;
}
}
封裝要考慮兩個方面:1、將對象的屬性和實現細節封裝起來,不允許外部直接訪問。
2、將方法暴露出來,讓方法或操作來訪問這些屬性。
訪問控制符:private、default、protected、public
java中提供了三種訪問控制符:private、protected、public,(default爲不加任何訪問控制符的訪問級別)。它們的訪問控制級別由小到大依次是:
private----->default------->protected------->public
private:被private修飾的只能被該類內部訪問。
default:(包訪問權限)只能被同一個包中的類訪問。
ptotected:(子類訪問權限)被protected修飾的屬性或方法,既可以被同一包中的其他類訪問,也可以被不同包中的子類訪問。如果使用protected來修飾方法,通常是希望子類來重寫這個方法。
public:可以被任何包中的類訪問。
頂級類只能用public或者default修飾,不能使用private或protected修飾。
javac -d . Hello.java中-d是用於設置編譯生成.class文件的位置,.表示當前位置。
java com.Hello運行的時候要把包名也加上。
java默認導入了java.lang包下的所有類。所以像那些System、Boolean、Double、Integer、String、Math、Thread等類,可以直接使用,無需導入包。
如果兩個包中含有相同的類名,那麼只能用包名.類名來使用這兩個類,不然即使導入了兩個包,使用該類的時候系統還是沒法分清是那個包裏面的。
import不但可以導入一個包中的類,而且可以導入一個類中的靜態屬性,這就可以用到import static方法。例如:import static com.edu.Text.count;導入了com.edu包下的類Text中的靜態屬性count。
import static java.lang.System.*;導入System中的所有靜態屬性
java中對象的屬性系統會默認初始化的。
構造器:若構造器B中包含了構造器A,那麼可以通過this來初始化B中的構造器A。代碼如下:
public class Apple {
public String name;
public String color;
public double weight;
public Apple(String name,String color)
{
this.name = name;
this.color = color;
}
public Apple(String name,String color,double weight)
{
//若把上面的構造器的代碼在這裏重寫一遍,也可以實現構造器初始化,但是這樣
//很不好,因爲代碼重複,以後修改很麻煩
//通過this調用另一個重載構造器的初始化代碼
this(name,color);
this.weight = weight;
}
}