簡體   English   中英

為Scanner類創建實例,而不為Java中的Math類創建實例嗎?

[英]Create an instance for the class Scanner, but not for Math class in java?

為什么我必須為類Scanner創建實例,而不為Java中的Math類創建實例?

我希望你們能以很好的例子向我解釋一下。

我這樣理解:

我們在Math.pow()中要求相同的示例。

它始終是數字的冪。例如(x,y)或(x,2)

但是.print().println()會更改值..? 這就是為什么我們需要為Scanner類創建一個實例。

編輯:我確實知道它是靜態的,但是我需要一個更詳細的答案,然后再說“它就是它的原樣”。

Math僅定義static方法,因為它不包含內部狀態。

您可能會爭辯:

但是,關於多態性,如果我想重寫Math類怎么辦?

=>對於99%的程序,大多數經典數學運算都不太可能被覆蓋。

因此,它充當一個簡單的實用程序類,等待輸入,並在一次調用中輸出一些結果。

舉個例子Math#max

public static double max(double a, double b)

由於它是static ,因此它不與任何對象關聯 您可以簡單地調用它。

現在看一下PrintStream#println

public void println(boolean x)

由於它不是 static ,因此無法通過編寫PrintStream.println(something)直接調用它。

考慮一下, max確實是static因為它不必與對象相關聯,因為它並不關心它,所以它實際上不需要有關對象的信息。 它對所有對象都有明確定義的行為。 沒有對某些對象的特殊處理。

因為您正在使用Math的靜態方法。 請注意,您正在使用“類即Math” .method。

對於Scanner,您將實例用作所有方法,如nextIntnext定義為非靜態。

Math的構造函數是私有的,這意味着您不能從Math外部調用它。

原因是它是一個包含一堆靜態實用程序方法的類,並且不需要生成它的實例。

Math類上的方法是static方法,而Scanner類上的方法不是static方法。

Scanner類未使用靜態方法,因為每個實例都需要維護自己的狀態,這與Scanner的其他實例不同。

Math類是沒有狀態的簡單實用程序函數,因此它們可以是靜態的。

暫無
暫無

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

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