2009-09-17 60 views
0

安慰我有簡單的程序,這樣使用用戶定義的方法來打印線的java

class println 
{ 
    public static void main(String[] args) 
{ 
    System.out.println("Hello World!"); 
} 
} 

,但我不希望使用System.out.println到print..i想用我自己的用戶定義的方法來打印數據。

+0

爲什麼你不想使用System.out.println? – 2009-09-17 15:14:19

+3

println是一個糟糕的類名。類名稱應以大寫字母開頭,並應描述該類的內容。 – 2009-09-17 15:16:11

+0

呃...這裏有什麼問題?只需更改代碼即可調用您的方法! – Powerlord 2009-09-17 15:16:16

回答

0
class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
    myPrint("Hello World!"); 
    } 

    public static void myPrint(String message) { 
    System.out.print(message + "\n"); 
    } 
} 
+0

但我不想使用「System.out.println」 – Gourav 2009-09-17 15:25:10

+0

你想在控制檯打印然後?你有什麼反對它? – 2009-09-17 15:27:25

+0

在那裏,Gourav爲你修好了,不再有「System.out.println」。但是,除非你能指定爲什麼你想避免這種情況,否則我們可以整天玩這個瘋狂的挑剔遊戲。 – 2009-09-17 15:35:58

4

請記住,Java代碼在JVM中運行,並且JVM只通過幾種指定方式與外部世界進行通信。所以如果你想打印到一個控制檯,你需要調用一個方法(在JNI等之後)映射到你的實際操作系統上的IO操作。除非你打算建立一個新的操作系統級別的IO操作(在這種情況下,你不能用Java寫它),最好的辦法是使用一個已經知道如何與外部世界交流的類。

碰巧,java.io.PrintStream類知道如何寫入OS級文件流,操作系統爲控制檯提供文件流(stdout)。 (從技術上講,PrintStream只知道如何寫入OutputStream,而OutputStream知道如何寫入操作系統級文件流,但我不想陷入細節。)Java提供了已連接到您的PrintStream實例進程的標準輸出流; PrintStream對象可以被引用爲java.lang.System對象的out屬性。鑑於PrintStream有一個像println()方法,你可以寫:

java.lang.System.out.println("Hello, world!"); 

因爲你總是java.lang.*默認導入,可以縮短,爲:

System.out.println("Hello, world!"); 

或者,你可以在PrintStream實例分配給一個局部變量:

import java.io.PrintStream; 

public class HelloWorld { 
    public static void main(String[] args) { 
     PrintStream p = System.out; 
     p.println("Hello, world!"); 
    } 
} 

你的「用戶定義的方法打印」是做什麼的println()方法PrintStream對象不?如果您對格式化的輸出感興趣,那麼您需要將其格式化爲String,然後在之前調用println()方法。爲了方便起見,您可以使用單個幫助程序方法打包格式和實際打印。這是你真正想要的嗎?

1

一個瘋狂的猜測在這裏:這是爲了記錄目的嗎?我猜想有很大一部分想要寫入控制檯的人爲了記錄目的而這樣做,並且這些人中很大一部分人不想使用System.out.println(),以便他們可以擁有更好地控制切換特定形式的登錄和關閉。

如果我的猜測是正確的,我可以建議尋找一個日誌框架,如Log4JSLF4J/Logbac k?你會得到控制檯appender和你需要的任何控制程度。

0

System.out.println是類System的靜態實例out(類PrintStream)的方法println的呼叫。

在Java中,沒有辦法重命名現有的方法或實例字段(即,您不能將名稱printlnout更改爲其他任何名稱)並且System.out是獲得值out(將您連接到控制檯)的唯一方法。

所以沒有辦法達到你想要的。

0

比方說,你想攔截所有內容去System.out.println()。你可以做到以下幾點:

ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
PrintStream printStream = new PrintStream(buffer); 
System.setOut(printStream); 

System.out.println("Hello!"); 

String whatWasPrinted = new String(buffer.getBytes()); 

利用技術這樣,你可以自定義「打印」的代碼提供自定義流做你的需要。

2

System是來自java.lang包的final classout是在System類中聲明的PrintStream類型的類變量。 printlnPrintStream類的一種方法。

因此,如果您要覆蓋prinln方法,請改爲定義您自己的方法,並在該方法中傳遞Printstrem對象。

方法2:
創建自己的PrintStream - 例如public class YourPrintStream extends PrinterStream。 覆蓋print(String s)方法並以任何您喜歡的方式更改字符串。然後致電super.print(s));
致電System.setOut(new YourPrintStream())
然後每次調用System.out.println時,在進入實際流之前,傳遞的字符串將在您的控制之下。

相關問題