簡體   English   中英

在Java中的void方法調用

[英]In Java void method calling

在Java中有一種從構造函數調用void方法的方法。我嘗試了類似的方法,但收到一條錯誤消息,指出編譯器找不到符號方法printThis(java.lang.String):

public class Date{

public Date(String inString){

  String s = inString;

   String b;


     b.printThis(s);

}


public void printThis(getString)

{

System.out.printf(System.out.printf( new SimpleDateFormat("MM/dd").format(new SimpleDateFormat("MM/dd").parse(getString) ) );

}

您需要printThis(s) -編譯器正在String實例上查找printThis方法,該方法不存在。

所提供的代碼中有很多錯誤。 這些是我發現的。

public class Date{

問題:您缺少軟件包聲明,這意味着它將在默認軟件包中。 那是個壞主意。

問題:您使用的類名與標准類庫中的常用類相同。 那是個壞主意。

public Date(String inString){
    String s = inString;
    String b;
    b.printThis(s);

錯誤:代碼試圖在String API中調用一個名為printThis(...) 不存在這種方法。 您可能應該擺脫b並只調用printThis(s)

錯誤:代碼嘗試使用未初始化的local( b ),這將產生編譯錯誤(如果您通過將b的類型更改為確實具有printThis方法的內容來“修復”了先前的錯誤)。

問題:如果有可能在子類中重寫方法,則構造函數在正在構造的對象上調用方法是一種不好的做法。 問題在於,超類初始化完成之前,可能在對象上調用了覆蓋方法(來自子類)。 調用staticprivate方法是安全的。

}

public void printThis(getString) {

錯誤:聲明中有語法錯誤。 更改getStringString getString

問題:參數名稱的選擇是(IMO)毫無意義的。 什么是“獲取字符串” ????

    System.out.printf(System.out.printf( 
        new SimpleDateFormat("MM/dd").format(
        new SimpleDateFormat("MM/dd").parse(getString) ) );

錯誤:編譯錯誤:括號不平衡。

錯誤:編譯錯誤: printf的第一個參數必須是StringLocale 在您的代碼中,外部調用中的第一個參數是PrintStream實例。

錯誤: System.out.printf(System.out.printf(是荒謬的。您幾乎可以肯定應該僅使用System.out.printlnSystem.out.print 。如果使用printf方法,則必須在其中提供格式字符串PrintStream javadocs中指定的語法(這與用於日期格式的語法不同!!!)

}

錯誤:缺少'}'來完成課程。

問題:您的代碼樣式需要大量工作。 如果您可以保證聖經中沒有其他會讀過您的代碼(!),那么我認為它還可以。 否則,這種東西是不能接受的。 如果這是家庭作業,那么我會直接將您50%的標記停靠在您面前,以免造成樣式錯誤。

您已將printThis()用作String的方法。 如果要打印日期,則可能需要

printThis(s);

通常,與JDK庫類使用相同的類名(日期)不是一個好主意。

以下幾行不起作用:

String b;
    b.printThis(s);

上面的代碼正在做的是嘗試在名為bString對象上調用printThis方法。

由於String.printThis方法不存在,因此編譯器返回錯誤消息,指出找不到該方法。

以下可能是預期的:

printThis(s);

上面將調用當前實例的printThis方法。

之所以收到該錯誤,是因為您試圖在對象b(它是一個字符串)上調用printThis()。 你要:

public Date(String inString) {
  printThis(inString);
}

僅供參考,通常不建議將類命名為與JDK類相同的名稱(例如Date)。 同樣,您對inString所做的分配並沒有真正實現任何目的。 也許您的代碼是您正在做的事情的簡化,但我還是想提一提。

暫無
暫無

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

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