Java是面向物件的語言, 作為具有面向物件功能的語言,Java支持以下基本概念 -
- 多型性
- 繼承
- 封裝
- 抽象化
- 類
- 物件
- 實體
- 方法
- 訊息傳遞
在本節中,我們將學習兩個概念 - 類和物件,
- 物件 - 物件具有狀態和行為, 例如:一只狗的狀態有:顏色,名稱,品種,它的行為有:搖尾巴,吠叫,吃東西, 物件是類的實體,
- 類 - 可以將類定義為描述其型別物件支持的行為/狀態的模板/藍圖,
1. Java物件
下面將深入了解什么是物件, 如果考慮現實世界,可以在我們周圍找到許多物件,如:汽車,狗,人等等,所有這些物件都有狀態和行為,
如果考慮一只狗,那么它的狀態是 - 名稱,品種,顏色,并且它的行為是 - 吠叫,搖尾巴,跑步,
如果將軟體物件與實際物件進行比較,則它們具有非常相似的特征,
軟體物件也具有狀態和行為, 軟體物件的狀態存盤在欄位中,行為通過方法顯示,
因此,在軟體開發中,方法對物件的內部狀態進行操作,并且物件到物件的通信是通過方法完成的,
2. Java類
類是創建單個物件的藍圖(模板),以下是一個類的示例代碼,
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
Java
類可以包含以下任何變數型別,
- 區域變數 - 在方法,建構式或塊中定義的變數稱為區域變數, 變數將在方法中宣告和初始化,并且在方法完成時將銷毀變數,
- 實體變數 - 實體變數是類中的變數,但在方法之外, 在實體化類時初始化這些變數, 可以從類的任何方法,建構式或塊內部訪問實體變數,
- 類變數 - 類變數是使用
static關鍵字修飾,它是在類中的方法之外宣告的變數,
一個類可以有任意數量的方法, 在上面的例子中,barking(),hungry()和sleeping()都是類的方法,
以下是在學習Java語言類和物件時,需要了解的一些重要主題內容,
建構式
在討論類時,最重要的子主題之一是建構式, 每個類都有一個建構式, 如果沒有為類顯式撰寫建構式,Java編譯器會自動為該類構建一個默認建構式,
每次創建新物件時,都將至少呼叫一個建構式,建構式的主要規則是它與類具有相同的名稱, 一個類可以有多個建構式,
以下是建構式的示例 -
public class Dog {
// 無引數建構式
public Dog() {
}
// 有引數建構式
public Dog(String name) {
// 此建構式有一個引數:name,
}
}
Java
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( "小屁狗" );
}
}
Java
編譯并執行上面示例代碼,得到以下結果:
傳入的引數值是: 小屁狗
Shell
訪問實體變數和方法
通過創建的物件訪問實體變數和方法, 要訪問實體變數,以下是完全限定的路徑 -
/* 首先創建一個物件 */
ObjectReference = new Constructor();
/* 呼叫變數如下 */
ObjectReference.variableName;
/* 現在,可以按如下方式呼叫類方法 */
ObjectReference.MethodName();
Java
下面示例說明如何訪問類的實體變數和方法,
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);
}
}
Java
編譯并執行上面示例代碼,得到以下結果:
設定的小狗名字是: 小屁狗
小狗的年齡是: 2
變數的值是:2
Shell
源檔案宣告規則
在源檔案中宣告類,import陳述句和package陳述句時,這些規則是必不可少的,
- 每個源檔案只能有一個
public類, - 源檔案可以有多個非
public類, public類名稱也應該是源檔案的名稱,最后以.java作為擴展名, 例如:類名是public class Employee{},那么源檔案應該是:Employee.java,- 如果在包內定義了類,則
package陳述句應該是源檔案中的第一個陳述句, - 如果存在
import陳述句,則必須在package陳述句和類宣告之間寫入它們,如果沒有package陳述句,則import陳述句應該是源檔案中的第一行,
類具有多個訪問級別,并且有不同型別的類; 抽象類,final類等,我們將在訪問修飾符章節中解釋所有這些,
除了上面提到的型別別之外,Java還有一些特殊類:內部類和匿名類,
Java包
簡而言之,它是一種對類和介面進行分類的方法, 在Java中開發應用程式時,將撰寫數百個類和介面,因此必須對這些類進行分類,以使生活變得更加容易,Java包也是用于解決命名沖突的問題,
import陳述句
在Java中,如果給出了包含包和類名的完全限定名稱,則編譯器可以快速地找到源代碼或類, import陳述句是一種為編譯器提供正確位置以查找特定類的方法,
例如,以下行將要求編譯器加載目錄java_installation/java /io中可用的所有類 -
import java.io.*;
Java
3. 一個簡單學習案例
在這個學習案例中,將創建兩個類, 它們是: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);
}
}
Java
如本教程前面所述,程式從main方法開始執行, 因此,要運行這個Employee類,應該有一個main方法,并且應該創建物件,接下來將為這些任務創建一個單獨的類:EmployeeTest,
在EmployeeTest類中,它創建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();
}
}
Java
現在,編譯這兩個類,然后運行得到結果如下 -
D:/worksp/java> javac Employee.java
D:/worksp/java> javac EmployeeTest.java
D:/worksp/java> java EmployeeTest
------------------------------------
姓名:Maxsu
年齡:26
作業崗位:高級軟體工程師
薪水:15999.0
------------------------------------
姓名:張小龍
年齡:42
作業崗位:產品經理
薪水:999999.0
完整的Java初級,高級對應的學習路線和資料!專注于java開發,分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源專案,助力開發者成長!
歡迎關注微信公眾號:碼邦主

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/205040.html
標籤:Java
