在Java語(yǔ)言中經(jīng)常提到類和對(duì)象望蜡,實(shí)質(zhì)上可以將類看作是對(duì)象的載體末誓,它定義了對(duì)象所具有的功能。面向?qū)ο蟪绦蛟O(shè)計(jì)具有以下特點(diǎn):封裝性超陆、繼承性和多態(tài)性牺弹。
一、類
1.成員變量
在Java中對(duì)象的屬性也稱為成員變量。成員變量聲明在類體中例驹,局部變量聲明在方法體中捐韩。示例代碼如下:
package com.example;
public class Book {
private String name;//定義一個(gè)String型的成員變量
public String getName(){//定義一個(gè)getName()方法
int id=0;//局部變量
setName("java");//調(diào)用類中其他方法
return id+this.name;//設(shè)置方法返回值
}
private void setName(String name){
this.name=name;
}
public Book getBook(){
return this;//返回Book類引用
}
}
2.成員方法
在Java語(yǔ)言中使用成員方法對(duì)應(yīng)于類對(duì)象的行為。上述代碼為例鹃锈,Book類中包含了getName()和setName()兩個(gè)方法荤胁。定義成員方法的語(yǔ)法格式如下:
權(quán)限修飾符 返回值類型 方法名(參數(shù)類型 參數(shù)名){
...//方法體
return 返回值;
}
一個(gè)成員方法可以有參數(shù)屎债,這個(gè)參數(shù)可以是對(duì)象也可以是基本數(shù)據(jù)類型的變量仅政,同時(shí)成員方法有返回值和不返回任何值的選擇,如果方法需要返回值可以在方法體中使用return關(guān)鍵字盆驹,使用這個(gè)關(guān)鍵字后圆丹,方法的執(zhí)行將被終止。在成員方法中可以調(diào)用其他成員方法和類成員變量躯喇。如果一個(gè)方法中含有與成員變量同名的局部變量辫封,則方法中對(duì)這個(gè)變量的訪問(wèn)以局部變量進(jìn)行。
3.權(quán)限修飾符
Java中的權(quán)限修飾符主要包括private廉丽、public和protected倦微,這些修飾符控制著對(duì)類和類的成員變量以及成員方法的訪問(wèn)。如下圖所示:
如果一個(gè)類的成員變量或成員方法被修飾為private正压,則該成員變量只能在本類中被使用欣福,在子類中是不可見的,并且對(duì)其他包的類也是不可見的焦履。如果將類的成員變量和成員方法的訪問(wèn)權(quán)限設(shè)置為public拓劝,那么除了可以在本類使用這些數(shù)據(jù)之外,還可以在子類和其他包的類中使用嘉裤。如果一個(gè)類的訪問(wèn)權(quán)限被設(shè)置為private郑临,這個(gè)類將隱藏其內(nèi)的所有數(shù)據(jù),以免用戶直接訪問(wèn)它屑宠。
4.局部變量
如果在成員方法中定義一個(gè)變量牧抵,那么這個(gè)變量被稱為局部變量。如下代碼所示侨把,getName()方法中的id變量即為局部變量。實(shí)際上方法中的形參也可以作為一個(gè)局部變量妹孙,如在定義setName(String name)方法時(shí)秋柄,String name這個(gè)形參就被看作是局部變量。局部變量是在方法被執(zhí)行時(shí)創(chuàng)建蠢正,在方法執(zhí)行結(jié)束時(shí)銷毀骇笔。局部變量在使用時(shí)必須進(jìn)行賦值操作或被初始化,否則會(huì)出現(xiàn)編譯錯(cuò)誤。
public String getName(){//定義一個(gè)getName()方法
int id=0;//局部變量
setName("java");//調(diào)用類中其他方法
return id+this.name;//設(shè)置方法返回值
}
5.局部變量的有效范圍
局部變量的有效范圍又可以稱為變量的作用域笨触,局部變量的有效范圍從該變量的聲明開始到該變量的結(jié)束為止懦傍。如下圖所示:
6.this關(guān)鍵字
private void setName(String name){
this.name=name;
}
在上述代碼中,成員變量與setName()方法中的形參的名稱相同芦劣,都為name粗俱。在Java語(yǔ)言中,規(guī)定使用this關(guān)鍵字來(lái)代表本類對(duì)象的引用虚吟,this關(guān)鍵字被隱式的用于引用對(duì)象的成員變量和方法寸认。this可以調(diào)用成員變量和成員方法,但在Java語(yǔ)言中最常規(guī)的調(diào)用方式是使用“對(duì)象.成員變量”或“對(duì)象.成員方法”進(jìn)行調(diào)用串慰。
二偏塞、類的構(gòu)造方法
構(gòu)造方法是一個(gè)與類同名的方法,對(duì)象的創(chuàng)建就是通過(guò)構(gòu)造方法完成的邦鲫。每當(dāng)類實(shí)例化一個(gè)對(duì)象時(shí)灸叼,類都會(huì)自動(dòng)調(diào)用構(gòu)造方法。構(gòu)造方法的特點(diǎn)如下:
(1)構(gòu)造方法沒(méi)有返回值庆捺。
(2)構(gòu)造方法的名稱要與本類的名稱相同古今。
構(gòu)造方法的定義語(yǔ)法格式如下:
public book(){
//...構(gòu)造方法體
}
public:構(gòu)造方法修飾符。
book:構(gòu)造方法的名稱疼燥。
在構(gòu)造方法中可以為成員變量賦值沧卢,這樣當(dāng)實(shí)例化一個(gè)本類對(duì)象時(shí),相應(yīng)的成員變量也將被賦值醉者。如果類中沒(méi)有明確定義構(gòu)造方法但狭,編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)不帶參數(shù)的默認(rèn)構(gòu)造方法。
三撬即、靜態(tài)變量立磁、常量和方法
由static修飾的變量、常量和方法被稱作靜態(tài)變量剥槐、常量和方法唱歧。被聲明為static的變量、常量和方法被稱為靜態(tài)成員粒竖。靜態(tài)成員屬于類所有颅崩,區(qū)別于個(gè)別對(duì)象,可以在本類或其他類使用類名和“.”運(yùn)算符調(diào)用靜態(tài)成員蕊苗。語(yǔ)法如下:
類名.靜態(tài)類成員
示例代碼如下:
package com.example;
public class StaticTest {
static double PI=3.1415;//在類中定義靜態(tài)常量
static int id;//在類中定義靜態(tài)變量
public static void method1(){//在類中定義靜態(tài)方法
//doSomething
}
public void method2(){//在類中定義非靜態(tài)方法
System.out.println(StaticTest.PI);//調(diào)用靜態(tài)常量
System.out.println(StaticTest.id);//調(diào)用靜態(tài)變量
StaticTest.method1();//調(diào)用靜態(tài)方法
}
}
在Java語(yǔ)言中對(duì)靜態(tài)方法有兩點(diǎn)規(guī)定:
(1)在靜態(tài)方法中不可以使用this關(guān)鍵字沿后。
(2)在靜態(tài)方法中不可以直接調(diào)用非靜態(tài)方法。
四朽砰、類的主方法
主方法是類的入口點(diǎn)尖滚,它定義了程序從何處開始喉刘;主方法提供對(duì)程序流向的控制,Java編譯器通過(guò)主方法來(lái)執(zhí)行程序漆弄。主方法的語(yǔ)法如下:
public static void main(String[] args){
//方法體
}
主方法具有以下特性:
(1)主方法是靜態(tài)的睦裳,所以如要直接在主方法中調(diào)用其他方法,那該方法必須也是靜態(tài)的撼唾。
(2)主方法沒(méi)有返回值廉邑。
(3)主方法的形參為數(shù)組。其中args[0]~args[n]分別代表程序的第一個(gè)參數(shù)到第n個(gè)參數(shù)券坞,可以使用args.length獲取參數(shù)的個(gè)數(shù)鬓催。