クラスの呼び出しに関する疑問点

 int i = new java.util.Random().nextint(int b);

 

又は

 

Random a = Random();

int i = a.nextInt(int b);

 

で0~bの間で乱数を生成し、iに代入する。

これは、java.utilパッケージのRandomクラスをインスタンス化して、

nextIntメソッドを呼び出して使っているということ。

 

一方、

 

 int i = java.lang.Math.min(int a, int b); 

(java.langは予めimportされているため、通常は記述しない)

 

でaとbを比較し、小さいほうをiに代入する。

これは、java.langパッケージのMathクラスのminメソッドを呼び出して使っている。

 

Randomクラスを利用する場合はインスタンス化しているのに対して

Mathクラスのminメソッドを利用する場合はインスタンス化しなくてもいいのは

何故だろう。

 

追記

自己解決しました。

RandomクラスのnextIntメソッドは、静的(static)メソッドではないからみたいです。

 

静的メソッドとは

メソッドにstaticをつけることで定義される。

静的メソッドとすることで以下の三つの効果が現れる。

 

1.メソッドの実体がクラスに属するようになる

2.インスタンスにメソッドの分身が準備される

3・インスタンスを1つも生み出すことなく呼び出せる

 

今回の場合、関係するのは3つ目の効果。

APIリファレンスを参照すると

RandomクラスのnextIntメソッドはインスタンスメソッドとなっている。

つまり、静的メソッドではないためnewでインスタンスを生成してからでないと呼び出すことができない。

一方、Mathクラスのminメソッドはstaticメソッドであるから、インスタンスの生成無しでいきなり呼び出すことができる。

 

訂正、補足がありましたらご指摘ください。