類
類的定義
[類修飾詞] class 類名{
聲明成員變量; //類的屬性
成員方法(函數); //定義方法的內容
}
類名:應遵循標識符的命名規則,習慣類名的首字母大寫。
**實例化:**由類構造對象的過程稱爲創建類的實例。
類修飾詞:限定了訪問和處理類的方式。
public:被public修飾的類對所有類都是可見的,並且必須定義在以該類名爲名字的java文件中。
flnal:被final修飾的類不能被繼承,或者說不能作爲超類也不可能有子類。
abstract:被abstract修飾的類是抽象類。因爲抽象類至少有一個成員方法需要在其子類中給出完整定義,所以抽象類不能被實例化。
默認:如果沒有指定的類修飾詞,就表示使用默認類修飾詞。在這種情況下,其他類可以繼承此類,同時在同一個包下可以訪問引用此類。
定義Student類如下
pubilc class Student{//定義一個公開的類,類名Student
String name; //聲明姓名屬性
int age; //聲明年齡屬性
public void getStuInfo() { //取得學生信息的方法
System.out.println("姓名:"+ name +“年齡:”+ age);
}
}
類之間的關係
- 依賴:一個類的方法操縱另一個類的對象
- 聚合:類A的對象包含類B的對象
- 繼承:
圖1-1 繼承關係
圖1-1中頂端是範圍較大的類,向下詳細分成幾個小類,這樣的分類關係稱爲繼承關係,上面的大類爲父類,下面的小類爲子類。
子類繼承了父類的所有特徵,同時子類在父類的基礎上還增加了自己的特徵。
繼承的語法格式如下:
[修飾符] class 子類名 extends 父類名
對象
構造器:
構造器是在Java中創建新對象時執行的操作。
對象的創建
使用new關鍵字
//方法一
類名 對象名稱 = null; //聲明對象
對象名稱 = new 類名(); //實例化對象
//方法二
類名 對象名稱(引用變量) = new 類名();
訪問對象中屬性和方法格式如下:
訪問屬性:對象名稱.屬性名。
訪問方法:對象名稱.方法名()。
下面的例子是爲上面定義的Student類創建對象。
pubilic class ClassDem01{
public static void main(String[] args){
Student student = new Student(); //創建一個student對象
student.name = "張三";
student.age = 11; //設置student對象屬性內容
}
}
關鍵字
this
作用:
(1)表示類中屬性。
public calss Hero{
String name;
int hp;
float armor;
int moveSpeed;
public void setName(String name){
name = name;
}
public static void main(String[] args){
Hero h1 = new Hero();
System.out.println(h.name);
h.setName("蓋倫");
System.out.println(h.name);
}
}
//運行結果爲 null null
//因爲類的作用域和參數的作用域重疊
public calss Hero{
String name;
int hp;
float armor;
int moveSpeed;
public void setName(String name){
this.name = name; //把屬性的引用指向參數的引用
}
public static void main(String[] args){
Hero h1 = new Hero();
System.out.println(h.name);
h.setName("蓋倫");
System.out.println(h.name);
}
}
(2)調用本類的方法(成員方法和構造方法)。
public calss Hero{
String name;
int hp;
float armor;
int moveSpeed;
public Hero(String name){
this.name = name;
}
public Hero(String name, int hp){
this(name); //直接引用第一段方法來初始化name
this.hp = hp;
}
}
(3)表示當前對象。
public calss Hero{
String name;
int hp;
float armor;
int moveSpeed;
public void printAdress(){
System.out.println(this);
}
public static void main(String[] args){
Hero h1 = new Hero();
System.out.println(h1);
h.printAdress();
}
public static void main(String[] args){
Hero h2 = new Hero();
System.out.println(h2);
h.printAdress();
}
}
//此段代碼運行結果是分別打印h1,h2的地址
static
用來修飾成員變量和成員方法。
static關鍵字聲明的屬性和方法稱爲類屬性和類方法,被所有對象共享,直接進行調用。
靜態變量
public calss He{
//定義了一個靜態變量a
static String a = "123";
public static void main(String[] args){
//靜態變量可以直接用類名來訪問,無需創建類的對象。
System.out.println(He.a);
He hello = new He(); //創建類的對象
System.out.println(hello.a); //使用對象名來訪問靜態變量
hello.a = "456"; //使用對象名形式修改靜態變量的值
System.out.println(He.a); //再次使用類名訪問靜態變量,值已改變
}
}
成員變量和局部變量
成員變量 | 局部變量 | |
---|---|---|
在類中的位置 | 類中方法外 | 方法定義中或方法聲明上 |
在內存中的位置 | 堆中 | 棧中 |
生命週期 | 隨着對象的創建而存在,隨着對象的消失而消失 | 隨着方法的調用而存在,隨着方法的調用完畢而消失 |
初始化值 | 有默認值 | 無默認值,必須定義,賦值,纔可使用 |
靜態方法
public calss He{
public static void print(){
System.out.println("哈哈哈");
}
public static void main(String[] args){
He.print(); //直接用類名調用靜態方法
}
}
注意:
1.靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員。
2.在普通成員方法中,可以直接訪問同類的非靜態變量和靜態變量。
3.靜態方法中不能直接調用非靜態方法,需要通過對象來訪問非靜態方法。
super
super關鍵字代表當前超類的對象。super表示從子類調用父類中的指定操作。
如果在子類B中重寫了父類的方法,若在重寫的方法中我們需要調用父類的該方法,則必須使用super關鍵字。否則按照子類優先原則,則會一直調用子類的方法,造成死循環。
final
用途:
變量,方法,類
變量
對於一個final變量,必須賦初始值,並且只能初始化一次。
若是基本數據類型的變量,則在其初始化後,值不可再更改。
若是引用類型的變量,則在其初始化後,不能再讓其指向另一個對象。
類
被final修飾的類不能被繼承。
方法
被final修飾的方法名不能被重寫。【父類中若有被final修飾的方法,則子類不能再重寫。】
保留字
保留字是爲java預留的關鍵字, 標誌符包含關鍵字而關鍵字裏面又包含兩個保留字,具體的保留字:goto、const。
包(package)
爲了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。
包的作用
- 1、把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。
- 2、如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。
- 3、包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類。
包的語法格式
package pkg1[.pkg2[.pkg3...]];
輸入
1.使用Scanner類
2.使用java.io.BufferedReader和java.io.InputStreamReader
3、使用java.io.Console
輸出
Java中輸出語句有以下四種
1.System.out.println(1234); //換行打印
2.System.out.print(1234); //不換行打印
3.System.out.write(4567); //字節輸出
4.System.out.printf(“%+8.3f、n”,3.14); //通過格式化文本和參數列表輸出