前言
本文是橙子出于興趣愛好對Java官方教程的嘗試翻譯,幾乎每日更新,感興趣的朋友可以關注一下橙子;翻譯程序中盡可能多的對一些關鍵詞保留了英文原文,如果你想看最純正的英文原版教材卻又看不懂,可以試著來看一下橙子的翻譯版啊,歡迎大家留言討論,沖鴨!
更多相關文章點擊閱讀
Java官方教程目錄2021最新版
Passing Information to a Method or a Constructor
在宣告(declare)方法或構造方法時,表明了其引數(argument)的數量和型別,例如,下面是一個方法,基于房屋貸款額,利率,貸款期限和貸款終值來計算每月還款額:
public double computePayment(
double loanAmt,
double rate,
double futureValue,
int numPeriods) {
double interest = rate / 100.0;
double partial1 = Math.pow((1 + interest),
- numPeriods);
double denominator = (1 - partial1) / interest;
double answer = (-loanAmt / denominator)
- ((futureValue * partial1) / denominator);
return answer;
}
該方法有四個引數(parameter),the loan amount, the interest rate, the future value 和 the number of periods,前三個是double型,第四個是int型,這些引數(parameter)在方法體中使用,并且在運行時將采用傳入的引數(argument)值,
注意:形參(parameter)是指方法宣告中的引數變數(variable)串列,實參(argument)是值方法被呼叫的時候傳入的實際值,呼叫方法時,使用的實參(argument)必須在型別和順序上和宣告的形參(parameter)匹配,
Parameter Types
可以將任何資料型別用于方法或構造方法的引數(parameter),包括基本資料型別和參考資料型別,下面示例中,方法接受陣列作為引數(argument),方法創建一個新的Ploygon物件,并且從Point物件的陣列對其進行實體化(假定Point是一個表示x,y坐標的類),
public Polygon polygonFrom(Point[] corners) {
// method body goes here
}
注意:如果要將方法傳遞給方法,可以使用lambda運算式或方法參考,
Arbitrary Number of Arguments 可變引數
可以使用一種稱為varargs(可變引數)的結構將任意數量的值傳遞給方法,當不知道向方法傳遞多少特定型別的引數時,可以使用varargs,這是手動創建陣列的快捷方式,
要使用varargs,請在最后一個引數的型別后面加上省略號,然后是一個空格和引數名稱,然后可以使用任意數量的引數(包括無參)呼叫該方法,
public Polygon polygonFrom(Point... corners) {
int numberOfSides = corners.length;
double squareOfSide1, lengthOfSide1;
squareOfSide1 = (corners[1].x - corners[0].x)
* (corners[1].x - corners[0].x)
+ (corners[1].y - corners[0].y)
* (corners[1].y - corners[0].y);
lengthOfSide1 = Math.sqrt(squareOfSide1);
// more method body code follows that creates and returns a
// polygon connecting the Points
}
如上所示,在方法內部,corners被當作陣列,可以使用陣列或引數序列呼叫該方法,無論何時,方法主體中的代碼均會將引數視為陣列,
在列印方法中可以看到varargs,例如print方法中:
public PrintStream printf(String format, Object... args)
允許列印任意數量的物件,例如:
System.out.printf("%s: %d, %s%n", name, idnum, address);
或者其它等:
System.out.printf("%s: %d, %s, %s, %s%n", name, idnum, address, phone, email);
Parameter Names
在方法或構造方法中宣告引數(parameter)的時候,要為引數提供名稱,在方法體中,該名稱被用來參考(refer)傳入的引數,
引數名稱在其作用域(scope)內必須是唯一的,它不能與方法或構造方法的其它引數或區域變數名稱相同,
引數(parameter)可以和類的欄位(field)具有相同的名稱,這種情況稱為引數遮蔽(shadow)了欄位,會使代碼的可讀性降低,并且通常僅在構造方法或方法內設定特定欄位的時候使用,例如下面Circle類及其setOrigin方法:
public class Circle {
private int x, y, radius;
public void setOrigin(int x, int y) {
...
}
}
Circle類有三個欄位:x,y和radius,setOrigin方法有兩個引數(parameter),每個引數和一個欄位有相同的名稱,每個引數都遮蔽了和其具有相同名稱的欄位,因此,在方法主體中,使用x,y參考的是引數,而不是欄位,如果要訪問欄位,必須使用特定名稱,將在后面的this關鍵字章節討論,
Passing Primitive Data Type Arguments
基本引數(primitive argument)(例如,int,double)按值傳遞給方法,這意味著任何對引數(parameter)值的修改,僅在方法的作用域內有效,當方法回傳時,引數(parameter)消失,對它們的任何修改都將失效,如下所示:
public class PassPrimitiveByValue {
public static void main(String[] args) {
int x = 3;
// invoke passMethod() with
// x as argument
passMethod(x);
// print x to see if its
// value has changed
System.out.println("After invoking passMethod, x = " + x);
}
// change parameter in passMethod()
public static void passMethod(int p) {
p = 10;
}
}
輸出為:
After invoking passMethod, x = 3
Passing Reference Data Type Arguments
參考資料型別(例如:object)也是按值傳遞到方法中,這意味著,當方法回傳時,傳入的參考任然參考和之前相同的物件,但是,如果有是當的訪問權限,可以在方法中修改物件欄位的值,如下所示:
public void moveCircle(Circle circle, int deltaX, int deltaY) {
// code to move origin of circle to x+deltaX, y+deltaY
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY);
// code to assign a new reference to circle
circle = new Circle(0, 0);
}
使用以下引數呼叫該方法:
moveCircle(myCircle, 23, 56)
在方法內部,circle最初參考的是myCircle,該方法將circle參考(即myCircle)的x,y坐標分別更改為23,56,當方法回傳時,這些修改將得以保留,然后為circle分配(assign)了一個新的參考,指向x=y=0的新Circle物件,但是這種重新分配沒用永久性,因為該參考是按值傳遞的,并且不能修改,在該方法內,circle指向(point)的物件已經更改,但是當方法回傳時,myCircle任然參考方法被呼叫之前的Circle物件,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/273291.html
標籤:其他
上一篇:JDBC連接Mysql
下一篇:MySQL資料庫設計范式
