2009-11-27 31 views
0

在java中是否有一種方法來從構造函數調用void方法。我嘗試這樣的事情,但得到一個錯誤消息,說編譯器找不到符號方法printThis(java.lang.String):在Java中void方法調用

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))); 

} 
+0

什麼與所有'SimpleDateFormat's。您正在閱讀的'MM/dd'爲日期字符串,然後格式化'MM/dd' – pjp 2009-11-27 16:06:56

+0

我有一個問題,每次我怎麼就添加quesion在這裏它從來沒有顏色的所有代碼是如何做你的? – daddycardona 2009-11-27 16:08:01

+0

爲了讓您的代碼格式化並着色,您必須將其縮進4個空格,或在選擇文本時按下'010101'按鈕。 – 2009-11-27 16:15:16

回答

2

有錯誤的地段在代碼中是個好主意呈現。這些是我發現的。

public class Date{ 

問題:您缺少包聲明意味着這將在默認包中。這是一個壞主意。

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

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

錯誤:代碼嘗試調用字符串API中稱爲printThis(...)的方法。沒有這樣的方法存在。你或許應該擺脫b並調用printThis(s)

錯誤:代碼試圖使用未初始化的地方(b),這將通過改變b類型給出一個編譯錯誤(如果你的「固定」以前的錯誤到確實有一個printThis方法的東西)。

問題:它是否有任何可能性,它可能在子類中重寫正在建造不好的做法,對於一個構造函數來調用對象的方法。問題是重載方法(從子類)可能會在超類初始化完成之前在對象上調用。可以撥打staticprivate方法。

} 

public void printThis(getString) { 

錯誤:聲明中存在語法錯誤。將getString更改爲String 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 javadoc中指定的語法提供格式字符串。 (這與用於日期格式的語法不同!!!)

} 

錯誤:缺少'}'來完成類。

問題:您的代碼風格需要大量的工作。如果你可以發誓沒有其他人將不得不閱讀你的代碼(!),那麼我想它的確定。否則,這種東西是不可接受的。如果這是作業,我會把你的標記的50%直接關閉,因爲沒有嘗試使樣式正確。

+0

+1,但你是半人半編譯器? 「 – Pool 2009-11-28 02:25:50

+0

」+1,但你是半人半編譯器嗎?「 - 無效的表達式:預期的操作符,但找到'but'。 :-) – 2009-11-28 02:29:48

+0

+1從髒代碼中提供更多細節:D – TecHunter 2012-10-01 07:51:46

3

你想printThis(s) - 編者在尋找的String實例,其不存在的printThis方法。

+1

這將是最好的讓printThis方法'private'或'static'。否則,如果這個類被子類化並且方法被覆蓋,您可能會冒險暴露部分構造的對象。請參閱http://www.javapractices.com/topic/TopicAction.do?Id=215 – pjp 2009-11-27 16:00:31

0

以下行行不通:

String b; 
    b.printThis(s); 

什麼上面的代碼做的是試圖調用printThis方法String對象上調用b

由於String.printThis方法不存在,編譯器會返回錯誤消息,說明它找不到方法。

什麼是可能是打算如下:

printThis(s); 

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

0

由於您試圖在對象b(它是一個String)上調用printThis(),您會看到該錯誤。你想:

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

只是供參考,它通常不適合命名與JDK類相同的類(如日期)。你正在做的inString的任務也沒有真正實現。也許你的代碼是對你正在做的事情的簡化,但我想我會提及它。

1

您已經使用printThis()作爲String的方法。如果你要打印的日期,你可能想

printThis(s); 

這不是通常使用相同的類名(日期)作爲JDK庫類

+0

這就是我的老師想要的東西是的,我認爲同樣的事情。 – daddycardona 2009-11-27 15:54:47

+0

對於那些糾正我的人,非常感謝你,它的工作正確 – daddycardona 2009-11-27 15:57:03

相關問題