方法(Method)
在類別裡除了「欄位(變數)」宣告之外,就是「方法」了,方法可分為主方法和一般方法。
主方法為程式執行起點,每一個被執行的程式檔必須包含一個且僅有一個主方法。主方法的名稱固定為main。含主分法之類別稱為主類別,主類別可不經建立物件直接執行。
格式:
public static void main
(String[] args){
欄位宣告
運算及操作
}
[說明]
底線部分格式須為固定。
static:主方法一律宣告為靜態方法
void:無回傳值
main:主方法名稱
String[]:宣告命令列輸入參數為字串型別陣列
args:陣列名稱
*欄位(資料、變數)可宣告於方法之內、外,其區別另闢專章討論。
[方法宣告範例:主方法]
class Score1 {
public static void main(String[ ] args) {
int
chChi = 75 ; //欄位宣告
int
chEng = 63 ; //欄位宣告
int
chPro = 50 ; //欄位宣告
int
totScore ; //欄位宣告
totScore
= chChi + chEng + chPro ; //運算
System.out.println ("張曉的總分數="
+ totScore ) ; //操作
}
}
執行結果:C:\js>java Score1
張曉的總分數=188
相對於主方法,一般方法名稱可自訂。包含一般方法的類別稱為一般類別,一般類別不可單獨執行,必須以主類別的主方法建立物件後,才可進行操作。
格式:
[存取修飾詞] [static] [資料型別 |
void] 方法名稱 ([資料型別 變數名稱 , ...]){
欄位宣告
運算及操作
}
[說明]
存取修飾詞:存取權限宣告,後續章節說明
static:宣告為靜態方法,後續章節說明
資料型別/void:回傳值之資料型別(以return回傳)/無回傳值(可省略return)
方法名稱:一般方法名稱
資料型別/變數名稱:帶入方法之參數的資料型別/名稱
[方法宣告範例:一般方法]
class ABC {
int
number=5;
char
capit='a';
void
addSelf(int i){
number=number+i;
System.out.println(capit+"="+number);
}
}
[一般方法執行範例]
class MainClass1{
public
static void main(String[ ] args) {
ABC abc = new ABC( ); //建立物件欄位佔有記憶體
abc.number = 67; //指定物件欄位的值
abc.addSelf(10); //執行物件方法
System.out.println ("number="
+abc.number ) ;
System.out.println ("capit=" +abc.capit ) ;
}
}
執行結果:C:\js>java MainClass1
a=77
number=77
capit=a
變數內容之遷移:
|
變數名稱
|
abc.number
|
abc.capit
|
|
變數內容遷移
|
5->67->77
|
a
|
主類別內須且僅能含一個主方法,一 般方法數不限。一般類別內之一般方法數不拘(0~n)。
[主類別方法的構成]
[只包含主方法]
[Clmd1.java]
class Clmd1{
public
static void main(String[] args){
int i =
11, j = 22 ;
System.out.println("主類別主方法1:" + "i + j = " + (i+j));
}
}
[包含主方法及一般方法(可有多個)]
一般方法可為前置static的靜態方法,或無前置static的物件方法。
[靜態方法-Clmd2.java]
class Clmd2{
static
void md1(){
int i =
12, j = 23 ;
System.out.println("主類別一般靜態方法1:" + "i + j = " + (i+j));
}
static
void md2(){
int s =
21, t = 32 ;
System.out.println("主類別一般靜態方法2:" + "s + t = " + (s+t));
}
public
static void main(String[] args){
md1() ;
md2() ;
}
}
[物件方法-Clmd3.java]
class Clmd3{
void
md3(){
int i =
12, j = 23 ;
System.out.println("主類別一般物件方法3:" + "i + j = " + (i+j));
}
void
md4(){
int s =
21, t = 32 ;
System.out.println("主類別一般物件方法4:" + "s + t = " + (s+t));
}
public
static void main(String[] args){
Clmd3 a
= new Clmd3() ;
a.md3() ;
a.md4()
;
}
}
靜態方法在主方法內可直接使用,物件方法必須建立物件後方可使用。
[只包含主方法]
如前例:[Clmd1.java]
執行結果:c:\js1>java Clmd1
主類別主方法1:i + j = 33
[包含主方法及一般方法(可有多個)]
[包含主方法和一般靜態方法]
如前例:[Clmd2.java]
執行結果:c:\js1>java Clmd2
主類別一般靜態方法1:i + j = 35
主類別一般靜態方法2:s + t = 53
[包含主方法和一般物件方法]
如前例:[Clmd3.java]
執行結果:c:\js1>java Clmd3
主類別一般物件方法3:i + j = 35
主類別一般物件方法4:s + t = 53
[無回傳值及參數(void及( ))]
class Score2 {
void totalScore( )
{ //回傳資料型別為void,方法參數為null ( )
int chi
= 90 ;
int eng
= 80 ;
int pro
= 70 ;
int
totSco = 0 ;
totSco =
chi + eng + pro ;
System.out.println("總分=" + totSco) ;
return
; //無回傳值時,return可省略,或return之後不接變數
}
}
class MainClass2{
public
static void main(String[ ] args) {
Score2
so = new Score2( ) ; //建立物件
so.totalScore(
) ; //呼叫方法
}
}
執行結果:C:\js>java MainClass2
總分=240
*return可置於方法內任何位置,表示離開方法,並不再執行其後之程式碼。
class Score3 {
int totalScore( )
{ //回傳值資料型別定為int,方法參數為null ( )
int chi
= 90 ;
int eng
= 80 ;
int pro
= 70 ;
int totSco = 0 ;
totSco =
chi + eng + pro ;
return totSco ;
//有回傳值時,須有return敘述
}
}
class MainClass3{
public
static void main(String[ ] args) {
int totScoR ;
//宣告接收回傳值的變數
Score3
so = new Score3( ) ;
totScoR
= so.totalScore( ) ; //接收回傳值
System.out.println("總分=" + totScoR) ;
//上2行可合併System.out.println("總分=" + so.totalScore( )) ;
}
}
執行結果:C:\js>java MainClass3
總分=240
class Score4 {
void totalScore(int a, int b,
int c) {
int chi
= a ;
int eng
= b ;
int pro
= c ;
int
totSco = 0 ;
totSco =
chi + eng + pro ;
System.out.println("總分="+ totSco) ;
//本例省略return
}
}
class MainClass4a{
public
static void main(String[ ] args) {
Score4
so = new Score4( ) ;
so.totalScore(75,65,55) ; //呼叫方法並給予方法參數
so.totalScore(90,75,60) ;
}
}
執行結果:C:\js>java MainClass4a
總分=195
總分=225
class Score5 {
int totalScore(int a, int b,
int c) { //回傳值資料型別定為int
int chi
= a ;
int eng
= b ;
int pro
= c ;
int
totSco = 0 ;
totSco =
chi + eng + pro ;
return totSco ;
}
}
class MainClass5{
public
static void main(String[ ] args) {
int
totScoR ; //宣告接收回傳值的變數
Score5
so = new Score5( ) ;
totScoR
= so.totalScore(88,77,66 ) ;//呼叫方法並給予方法參數,及接收回傳值
System.out.println("總分=" + totScoR) ;
}
}
執行結果:C:\js>java MainClass5
總分=231
沒有留言:
張貼留言