簡體   English   中英

用Java調用方法

[英]Calling methods in Java

我是初學者,我正在努力掌握Java中的方法。 一般來說,我理解靜態和非靜態方法之間的區別,但有時候,讀取其他代碼,我對如何編寫特定調用感到困惑。

據我所知,靜態方法可以在有或沒有對象的情況下調用。 非靜態方法需要調用一個對象,但是當在另一個非靜態方法中調用非靜態方法時,以書面形式 ,它只能通過名稱(如method() )調用,而無需書面引用object(如object.method()this.method() )。

還有另一種情況,可以用這種方式編寫非靜態方法調用嗎? 有沒有其他方法可以調用超出這些方法的方法?

如有任何意見,我將不勝感激。

也許你正在考慮調用同一個類中的方法,例如:

public class Foo {
    public void doSomething() {
        doSomethingElse();   // equivalent to "this.doSomethingElse()"
    }

    private void doSomethingElse() {
        System.out.println("Bar");
    }
}

讓我們不要擔心一秒鍾的靜態/非靜態,這是另一種蠕蟲。 讓我們考慮一下到目前為止你最常建立的程序; 也許你已經設計了一個程序,比如計算兩個(x,y)坐標之間的距離。

public static void main(String[] args) {
    double x1 = 4.0;
    double y1 = 3.0;
    double x2 = 4.0;
    double y2 = 4.0;

    double x = Math.pow(x2 - x1, 2);
    double y = Math.pow(y2 - y1, 2);
    double distance = Math.sqrt(x+y);
    System.out.println("The distance is" + distance);
}

現在,如果您想在更復雜的程序中使用該代碼,例如視頻游戲,以確定您的角色是否碰撞到牆壁,會發生什么? 現在你有3個坐標(A和B是牆,C是角色),你需要找出所有三個坐標(AB,AC和BC)之間的距離。 為什么? 因為如果AB == AC + BC,那么我們的角色就碰壁了! 這是一個視頻,解釋了為什么這將真正適用於您: 2D點的碰撞檢測

我是否想要重復輸入相同的公式? 還是浪費時間復制和粘貼? 不,我很懶。 這就是我為計算機編程為我做事的原因。

做些什么,但是,是設計出能我的大,主程序運行里面的小,小程序。 這些被稱為方法

public static double distance(double x1, double y1, double x2, double y2) {
    double x = Math.pow(x2 - x1, 2);
    double y = Math.pow(y2 - y1, 2);
    double dist = Math.sqrt(x+y);
    return dist;
}

現在,請注意我做了兩件不同的事情。

一,我將變量dist命名為dist而不是距離; 只是很好的編程習慣,不要將變量命名為與方法相同。

二,我投了一份回復聲明 現在,想想我展示的第一個程序,它完成后會做什么? 沒有。 它打印到屏幕上就是這樣。 它會關閉並清除內存。 但是,如果我以后需要距離呢? 好吧,這就是返回的地方。它確保在完成計算之后,在清除內存之前,它想要將它還給你。

如果您已經了解了Math.random() ,請注意您需要存儲或使用它,否則它會一直存在。 那是因為Math.random()返回類型double System.out.println()的返回類型為void,因為它不會“返回”任何內容,只是在屏幕上顯示文本。

方法背后的基本前提是:

<access modifier> <return type> <name> (<parameters>) { }

現在,訪問修飾符應該保持public static 稍后您將學習課程。 return type是重要的,因為這就像你做一個變量; 你必須告訴Java它是什么數據類型 - 對於一個方法是相同的。 你必須告訴Java這個微小的程序將產生什么數據類型。 name與命名變量沒什么不同,但是現在,你必須添加parameters ,這些parameters只是方法中的占位符,因為我們不知道以后將使用的值/變量是什么!

現在我有一個distance作為一種方法,我可以使用它三次,我想要:

double distAB = distance(4, 0, 4, 4);
double distAC = distance(4, 0, 4, 2);
double distBC = distance(4, 4, 4, 2);
if (distAB == distAC + distCB)
    System.out.println("Collision Detected");

基本上,你可以調用這樣的非靜態方法: method(); 或者this.method();

當你使用第二個語法與this ,你會告訴你從你的(明確)實例來調用編譯器。

兩者都將以相同的方式工作。

但是,還有另一個例子可以為你清楚地說明這一點。 思考變量。 檢查此代碼:

private int a = 1;

public void method(int a) {
    this.a = a;
}

使用局部變量設置對象的變量。 如果你沒有將this用於那個調用,編譯器會理解你正在處理的變量就是本地變量。

希望能幫助到你。

當你寫this在Java(或當它被暗示)一類,你指的instanciating該類對象所以this是一個對象不是類的引用。 這一開始很難獲得,但是面向對象編程中的對象和類的概念之間存在差異,因此在Java中也存在差異。

另請注意,當您調用靜態方法時,您使用包含靜態方法的類的名稱,因為靜態方法是為類定義的概念,而不是實例化該類的特定對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM