Java是物件導向的語言。 作為具有物件導向功能的語言,Java支援以下基本概念 -
在本節中,我們將學習兩個概念 - 類和物件。
下面將深入了解什麼是物件。 如果考慮現實世界,可以在我們周圍找到許多物件,如:汽車,狗,人等等。所有這些物件都有狀態和行為。
如果考慮一隻狗,那麼它的狀態是 - 名稱,品種,顏色,並且它的行為是 - 吠叫,搖尾巴,跑步。
如果將軟體物件與實際物件進行比較,則它們具有非常相似的特徵。
軟體物件也具有狀態和行為。 軟體物件的狀態儲存在欄位中,行為通過方法顯示。
因此,在軟體開發中,方法對物件的內部狀態進行操作,並且物件到物件的通訊是通過方法完成的。
類是建立單個物件的藍圖(模板)。以下是一個類的範例程式碼。
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
類可以包含以下任何變數型別。
static
關鍵字修飾,它是在類中的方法之外宣告的變數。一個類可以有任意數量的方法。 在上面的例子中,barking()
,hungry()
和sleeping()
都是類的方法。
以下是在學習Java語言類和物件時,需要了解的一些重要主題內容。
在討論類時,最重要的子主題之一是建構函式。 每個類都有一個建構函式。 如果沒有為類顯式編寫建構函式,Java編譯器會自動為該類構建一個預設建構函式。
每次建立新物件時,都將至少呼叫一個建構函式。建構函式的主要規則是它與類具有相同的名稱。 一個類可以有多個建構函式。
以下是建構函式的範例 -
public class Dog {
// 無引數建構函式
public Dog() {
}
// 有引數建構函式
public Dog(String name) {
// 此建構函式有一個引數:name。
}
}
Java還支援單範例類,它是一種建立一個類只有一個範例設計模式。
注意 - 有兩種不同型別的建構函式。 我們將在後續章節中詳細討論建構函式。
如前所述,類提供了物件的藍圖。一個物件是從一個類建立的。 在Java中,new
關鍵字用於建立新物件。
從類建立物件時有三個步驟 -
new
關鍵字用於建立物件。new
關鍵字後跟對建構函式的呼叫,此呼叫初始化新物件。以下是建立物件的範例程式碼 -
public class Dog {
public Dog(String name) {
// 這個建構函式有一個引數:anem
System.out.println("傳入的引數值是: " + name );
}
public static void main(String []args) {
// 以下語句將建立一個物件: myDog
Dog myDog = new Dog( "小屁狗" );
}
}
編譯並執行上面範例程式碼,得到以下結果:
傳入的引數值是: 小屁狗
通過建立的物件存取範例變數和方法。 要存取範例變數,以下是完全限定的路徑 -
/* 首先建立一個物件 */
ObjectReference = new Constructor();
/* 呼叫變數如下 */
ObjectReference.variableName;
/* 現在,可以按如下方式呼叫類方法 */
ObjectReference.MethodName();
下面範例說明如何存取類的範例變數和方法。
public class Dog {
int dogAge;
public Dog(String name) {
// 此建構函式有一個引數:name
System.out.println("設定的小狗名字是: " + name);
}
public void setAge(int age) {
dogAge = age;
}
public int getAge() {
System.out.println("小狗的年齡是: " + dogAge);
return dogAge;
}
public static void main(String[] args) {
/* 建立物件 */
Dog myDog = new Dog("小屁狗");
/* 呼叫方法來設定狗的年齡 */
myDog.setAge(2);
/* 呼叫另一個方法來獲取狗的年齡 */
myDog.getAge();
/* 也可以按如下方式存取範例變數:dogAge */
System.out.println("變數的值是:" + myDog.dogAge);
}
}
編譯並執行上面範例程式碼,得到以下結果:
設定的小狗名字是: 小屁狗
小狗的年齡是: 2
變數的值是:2
在原始檔中宣告類,import
語句和package
語句時,這些規則是必不可少的。
public
類。public
類。public
類名稱也應該是原始檔的名稱,最後以.java
作為擴充套件名。 例如:類名是public class Employee{}
,那麼原始檔應該是:Employee.java
。package
語句應該是原始檔中的第一個語句。import
語句,則必須在package
語句和類宣告之間寫入它們。如果沒有package
語句,則import
語句應該是原始檔中的第一行。類具有多個存取級別,並且有不同型別的類; 抽象類,final
類等。我們將在存取修飾符章節中解釋所有這些。
除了上面提到的類型別之外,Java還有一些特殊類:內部類和匿名類。
簡而言之,它是一種對類和介面進行分類的方法。 在Java中開發應用程式時,將編寫數百個類和介面,因此必須對這些類進行分類,以使生活變得更加容易。Java包也是用於解決命名衝突的問題。
在Java中,如果給出了包含包和類名的完全限定名稱,則編譯器可以快速地找到原始碼或類。 import
語句是一種為編譯器提供正確位置以查詢特定類的方法。
例如,以下行將要求編譯器載入目錄java_installation/java /io
中可用的所有類 -
import java.io.*;
在這個學習案例中,將建立兩個類。 它們是:Employee
和EmployeeTest
。
首先開啟記事本並新增以下程式碼。Employee
類是公共(public
)類。因此使用檔案名稱為:Employee.java 儲存此原始檔。
Employee
類有四個範例變數 - name
, age
, designation
和 salary
。 該類有一個顯式定義的建構函式,它接受一個引數。
import java.io.*;
public class Employee {
String name;
int age;
String jobPosition;
double salary;
// 這是Employee類別建構函式
public Employee(String name) {
this.name = name;
}
// 設定員工的年齡,將empAge的分配給變數:age。
public void empAge(int empAge) {
age = empAge;
}
/* 設定員工的工作崗位. */
public void setJobPosition(String jobPosit) {
jobPosition = jobPosit;
}
/* 設定員工的薪水,將empSalary的分配給變數:salary。 */
public void empSalary(double empSalary) {
salary = empSalary;
}
/* 列印員工詳細資訊 */
public void printEmployee() {
System.out.println("------------------------------------");
System.out.println("姓名:" + name);
System.out.println("年齡:" + age);
System.out.println("工作崗位:" + jobPosition);
System.out.println("薪水:" + salary);
}
}
如本教學前面所述,程式從main
方法開始執行。 因此,要執行這個Employee
類,應該有一個main
方法,並且應該建立物件。接下來將為這些任務建立一個單獨的類:EmployeeTest
。
在EmployeeTes
t類中,它建立Employee
類的兩個範例,並為每個物件呼叫方法以為每個變數賦值。將以下程式碼儲存在EmployeeTest.java 檔案中。
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
/* 使用建構函式建立兩個物件 */
Employee empOne = new Employee("Maxsu");
Employee empTwo = new Employee("張小龍");
// 為每個建立的物件呼叫方法
empOne.empAge(26);
empOne.setJobPosition("高階軟體工程師");
empOne.empSalary(15999);
empOne.printEmployee();
empTwo.empAge(42);
empTwo.setJobPosition("產品經理");
empTwo.empSalary(999999);
empTwo.printEmployee();
}
}
現在,編譯這兩個類,然後執行得到結果如下 -
D:/worksp/java> javac Employee.java
D:/worksp/java> javac EmployeeTest.java
D:/worksp/java> java EmployeeTest
------------------------------------
姓名:Maxsu
年齡:26
工作崗位:高階軟體工程師
薪水:15999.0
------------------------------------
姓名:張小龍
年齡:42
工作崗位:產品經理
薪水:999999.0