[英]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,您將實例用作所有方法,如nextInt
, next
定義為非靜態。
Math
的構造函數是私有的,這意味着您不能從Math
外部調用它。
原因是它是一個包含一堆靜態實用程序方法的類,並且不需要生成它的實例。
Math類上的方法是static
方法,而Scanner類上的方法不是static
方法。
Scanner類未使用靜態方法,因為每個實例都需要維護自己的狀態,這與Scanner的其他實例不同。
Math類是沒有狀態的簡單實用程序函數,因此它們可以是靜態的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.