Java 對象和類
Java 作為作為一種面向對象語言。支援以下基本概念:
@多态
@繼承
@封裝
@抽象
@類
@對象
@執行個體
@方法
@重載
本節我們重點研究對象和類的概念。
對象:對象是類的一個執行個體(對象不是找個女朋友),有狀态和行為。
例如:一條狗是一個對象,它的狀态有:顔色、名字、品種;行為有:搖尾巴、叫、吃
等。
類:類是一個模闆,它描述一類對象的行為和狀态。
下圖中男孩女孩為類,而具體的每個人為該類的對象:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauM3chx2YtQ3YlpmYv9CXyEzLcNTMwIzLcNHZh9GbwV3LcRnblRnbvNWLwd3Lc12bj5iYv9mb1JnL3d3dvw1LcpDc0RHaiojIsJye.jpg)
一、Java中的類
類的定義:即類可以看成是建立Java對象的模闆,是一個獨立的程式機關,它描述一類對象的行為和狀态。類是具有相同屬性和服務的一組對象的集合。
類名一般首字母大寫,遵循駝峰命名法。即辨別符是由多個單詞組成的,每個單詞的首字母大寫。
例如:MaxValue、AlarmClock都符合駝峰命名法。
類聲明的文法:
[修飾符] class 類名{ }
例如:
public class Student{
String name;
String sex;
int age;
}
public class Dog{
// 成員變量
String breed;
int age;
String color;
public Dog() {
//構造方法
}
//成員方法
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
一個類包含三種屬性:成員變量、構造方法、成員方法。
1.類的變量類型:
局部變量:在方法、構造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結束後,變量就會自動銷毀。
成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在建立對象的時候執行個體化。成員變量可以被類中方法、構造方法和特定類的語句塊通路。
類變量(也叫靜态變量):類變量也聲明在類中,方法體之外,但必須聲明為static類型。
注:一個類可以擁有多個成員方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog類的成員方法。
2.構造方法:
每個類都有構造方法。如果沒有顯式地為類定義構造方法,Java編譯器将會為該類提供一個預設構造方法(預設的構造方法不帶參數)。
在建立一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法。
下面是一個構造方法示例:
public class Puppy{
public Puppy(){
// 預設構造方法無參數
}
public Puppy(String name){
// 重構一個帶參數的構造方法,這個構造器僅有一個參數:name
}
}
注意:
(1).構造方法名與類名相同。
(2).構造方法沒有傳回類型。
(3).構造方法名的調用必須通過new關鍵字調用。
3.成員方法:
成員方法的定義格式:
void 方法名稱 (){
// 方法内容;
}
需要說明的是成員方法的定義必須在類中。
下面是成員方法的定義執行個體:
class Student{
String name;
String sex;
int age;
void study(){
System.out.println("studying...");
}
void display(){
System.out.println("student name="+name);
System.out.println("student sex="+sex);
System.out.println("student age="+age);
}
}
以上程式定義了Student類,Student類具有name、age和sex這3個成員表量,還具有study和display兩個成員方法(即Student類具有三個靜态的狀态,兩個動态行為)。
定義成員方法後,調用方法時使用“對象名.方法名()”來調用;比如要調用Student類中定義的study()和display()方法,可以寫成:
public class Test{
public static void main(String[] args){
Student stu = new Student();
stu.name = "小明";
stu.sex = "男";
stu.age= 18;
stu.display(); // 方法的調用
stu.study(); // 方法的調用
}
}
二、Java中的對象
現在讓我們深入了解什麼是對象。看看周圍真實的世界,會發現身邊有很多對象,車,狗,人等等。所有這些對象都有自己的狀态和行為。
拿一條狗來舉例,它的狀态有:名字、品種、顔色,行為有:叫、搖尾巴和跑。
對比現實對象和軟體對象,它們之間十分相似。軟體對象也有狀态和行為。軟體對象的狀态就是屬性,行為通過方法展現。在軟體開發中,方法操作對象内部狀态的改變,對象的互相調用也是通過方法來完成。
1.對象的定義:
對象是系統中用來描述客觀事物的一個實體,是構成系統的基本機關。一個對象由一組屬性和對屬性進行操作的一組方法組成。
2.對象的建立:
對象是根據類建立的。在Java中,使用關鍵字new來建立一個新的對象。建立對象需要以下三步:
<1>.對象的聲明:聲明一個對象,包括對象名稱和對象類型。
<2>.對象的執行個體化:使用關鍵字new來建立一個對象。
<3>.對象的初始化:使用new建立對象時,會調用構造方法初始化對象。
下面是一個建立對象的例子:
public class Puppy{
public Puppy(String name){
//這個構造器僅有一個參數:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String []args){
// 下面的語句将建立一個Puppy對象
Puppy myPuppy = new Puppy( "tommy" );
}
}
編譯并運作上面的程式,會列印出下面的結果:
小狗的名字是 : tommy
三、我們做來一個簡單的例子
在該例子中,我們建立兩個類:Employee 和 EmployeeTest。
Employee類有四個成員變量:name、age、designation和salary。該類顯示聲明了一個構造方法,該方法隻有一個參數。
Employee.java 檔案代碼:
import java.io.*;
public class Employee{
String name;
int age;
String designation;
double salary;
// Employee 類的構造器
public Employee(String name){
this.name = name;
}
// 設定age的值
public void empAge(int empAge){
age = empAge;
}
/* 設定designation的值*/
public void empDesignation(String empDesig){
designation = empDesig;
}
/* 設定salary的值*/
public void empSalary(double empSalary){
salary = empSalary;
}
/* 列印資訊 */
public void printEmployee(){
System.out.println("名字:"+ name );
System.out.println("年齡:" + age );
System.out.println("職位:" + designation );
System.out.println("薪水:" + salary);
}
}
程式都是從main方法開始執行。為了能運作這個程式,必須包含main方法并且建立一個執行個體對象。
EmployeeTest類,該類執行個體化2個 Employee 類的執行個體,并調用方法設定變量的值。
EmployeeTest.java 檔案代碼:
import java.io.*;
public class EmployeeTest{
public static void main(String args[]){
/* 使用構造器建立兩個對象 */
Employee empOne = new Employee("RUNOOB1");
Employee empTwo = new Employee("RUNOOB2");
// 調用這兩個對象的成員方法
empOne.empAge(26);
empOne.empDesignation("進階程式員");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("菜鳥程式員");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
編譯這兩個檔案并且運作 EmployeeTest 類,可以看到如下結果:
$ javac EmployeeTest.java
$ java EmployeeTest
名字:RUNOOB1
年齡:26
職位:進階程式員
薪水:1000.0
名字:RUNOOB2
年齡:21
職位:菜鳥程式員
薪水:500.0