Author: switch over

A big outdoor sports lover & A IT engineer.

14-11.Number

 
 

11.Number 
 Numberクラスは数値を表すクラス(Byte,Short,Integer,Long,Integer,BigDecimal,BigInteger)の親クラスである。その名の通り数値を具象化するクラスで、他の数値の型に変換したり、文字列に変換したりする機能が備わっている。
 

import java.lang.Number

コンストラクタ
Number()
      抽象クラスなので、実際にインスタンスは作れない。
 
メソッド
byte byteValue()
      byte型に変換します。場合によって丸め込まれたり切り捨てられたりすることもある。
short shortValue()
      short型に変換する。場合によって丸め込まれたり切り捨てられたりすることもある。
int intValue()
      int型に変換する。場合によって丸め込まれたり切り捨てられたりすることもある。
long longValue()
      long型に変換する。場合によって丸め込まれたり切り捨てられたりすることもある。
float floatValue()
      float型に変換する。場合によって丸め込まれることもある。
double doubleValue()
      double型に変換する。場合によって丸め込まれることもある。
   

14.有用クラス -1.Math

14章 有用クラス
1.Math

import java.lang.Math

メンバー変数
static double E
    自然対数の底 e にもっとも近い double 値
static double PI
    円周とその直径の比 pi にもっとも近い double 値
メソッド
static double abs(double a)
    double 値の絶対値を返す
static float abs(float a)
    float 値の絶対値を返す
static int abs(int a)
    int 値の絶対値を返す
static long abs(long a)
    long 値の絶対値を返す
static double acos(double a)
    指定された角度の逆余弦 (アークコサイン) を、0.0 〜 pi の範囲で返す
static double asin(double a)
    指定された角度の逆正弦 (アークサイン) を、-pi/2 〜 pi/2 の範囲で返す
static double atan(double a)
    指定された角度の逆正接 (アークタンジェント) を、-pi/2 〜 pi/2 の範囲で返す
static double atan2(double y, double x)
    直交座標 (x, y) を極座標 (r, theta) に変換する
static double ceil(double a)
   引数の値以上で、計算上の整数と等しい、最小の (負の無限大にもっとも近い) double 値を返す
static double cos(double a)
    指定された角度(ラジアン)の余弦 (コサイン) を返す
static double exp(double a)
    オイラー数 e を double 値で累乗した値を返す
static double floor(double a)
    引数の値以下で、計算上の整数と等しい、最大の (無限大にもっとも近い) double 値を返す
static double log(double a)
    指定されたdouble値の自然対数値(底は e)を返す
static double max(double a, double b)
    2つのdouble値のうち大きい方を返す
static float max(float a, float b)
    2つのfloat値のうち大きい方を返す
static int max(int a, int b)
    2つのint値のうち大きい方を返す
static long max(long a, long b)
    2つのlong値のうち大きい方を返す
static double min(double a, double b)
    2つのdouble値のうち小さい方を返す
static float min(float a, float b)
    2 つの float 値のうち小さい方を返す
static int min(int a, int b)
    2つのint値のうち小さい方を返す
static long min(long a, long b)
    2つのlong値のうち小さい方を返す
static double pow(double a, double b)
    1番目の引数を、2番目の引数で累乗した値を返す
static double random()
    0.0以上で、1.0より小さい正の符号の付いたdouble値を返す
static double rint(double a)
    引数の値にもっとも近く、計算上の整数に等しいdouble値を返す
static long round(double a)
    引数にもっとも近いlongを返す
static int round(float a)
    引数にもっとも近いintを返す
static double sin(double a)
    指定された角度(ラジアン)の正弦(サイン)を返す
static double sqrt(double a)
    double値の正しく丸めた正の平方根を返す
static double tan(double a)
    指定された角度(ラジアン)の正接(タンジェント)を返す
static double toDegrees(double angrad)
    ラジアンで計測した角度を、相当する度に変換す
static double toRadians(double angdeg)
    度で計測した角度を、相当するラジアンに変換す
 
sample)Mathを用いて最大値と最小値を求める
import java.io.*;

class Test {
    public static void main(Stirng args[ ]) {
         float a[ ] = { 10.5f, 2.4f, 32.4f ,-4.1f, 5.0f };
         float minimum = Float.POSITIVE_INFINITY;      //floatで扱える最大値に初期化
         float maximum = Float.NEGATIVE_INFINITY;      //floatで扱える最小値に初期化

         forint i = 0 ; i < a.length ; i++ ){
              minimum = Math.min(minimum, a[i]);
              maximum = Math.max(maximum, a[i]);
         }

         System.out.println("最小値は" + minimum + "です");
         System.out.println("最大値は" + maximum + "です");

   }
}

C:\Java\>java Test
最小値は-4.1です
最大値は32.4です

C:\Java\>

13.ガーベージコレクター

13章 ガーベージコレクター 
1.ガーベージコレクターとは
 ガーベージ(garbage)とは、不要なデータのことである。不要になったデータを集めて処理する機能のことをいう。例えば、C++言語ではあるクラスのインスタンスを作成したら、プログラムでdeleteしないと不要データがいつまでもメモリー上に残ることになる。このことをメモリリークという。
 また、削除してしまったインスタンスを参照したりするとエラーになりOSなどによってはそのまま暴走してしまうといったバグも発生する可能性がある。
 しかし、javaではインスタンスを作成しても削除する必要がない。不必要になったインスタンスはこのガーベージコレクターがすべて処理してくれるからである。
class GarbageTest{
      public static void main (String args[ ]){
         
String str1 = new String("abc);
          String str2 = new String("ABC);

          str2 = str1;       // "ABC"という文字列はどこからも参照されなくなり、ガーベージコレクトの対象となる
         
System.out.println(str1);
          System.out.println(str2);
     }
}

C:\java>javac *.java

C:\java>java GarbageTest
abc
abc

C:\Mjava>

2.ガーベージコレクターの実行
 Java Virtual Machine(JVM)は、インスタンスの生成が行われた時など、メモリーを厳守監視している。これにより後でどのメモリー(インスタンス)が参照されていて必要なのか、あるいはもう参照されなくなって不必要になったのかを調べることができるようにしている。
 しかし、不必要になったデータを探すのは、アプリケーションが大きくなればなるほど、時間がかかる処理になる。したがってJVMはデータが不必要になったらすぐにガーベージコレクトを行うのではなく、何もしていないときにガーベージコレクトを行うようにしている。
 実際にガーベージコレクトが行われるタイミングはJVMの実装に任されており、プログラマやユーザがそのタイミングを関知しなくても良いことになっている。 
 Javaのメリットはプラットフォームを(OS)を選ばないことである。パソコンのようなメモリーの比較的豊富なプラットフォームで実行している分にはメモリーのことをそれほど意識しなくても良いのだが、携帯電話など比較的リソースの乏しいプラットフォームでJavaを実行する場合は、メモリーをできるだけ少なくして使用したい場合がある。このような場合、ガーベージコレクトをJVMに任せていてはメモリーが足りなくなってしまう。
 もちろんメモリーを使用したい時に残りのメモリーが足りなくなればJVMはガーベージコレクターを起動させるが、もし時間的に余裕がない場合、実行されてしまっては困る。そこで、プログラマがガーベージコレクタを起動させるタイミングを指定することができる。それには、Systemクラスのgc( )メソッドを使用する。

 それには、Systemクラスのgc( )メソッドを使用する。
 このメソッドはガーベージコレクタを起動させてほしいとJVMに伝えるだけで、いつ実行させるかはJVM次第である。よくJavaの解説書のこのメソッドの説明に「ガーベージコレクタを実行する」とあるが、これは間違いである。あくまでもできるだけ早くガーベージコレクタを実行させてほしいとJVMに要求するだけである。
2.finalize
 C++にはデストラクタがある。デストラクタとはコンストラクタの逆でインスタンスが破壊される時に呼ばれる関数である。しかし、Javaにはデストラクタがない。これは、Javaのインスタンスの破壊はガーベージコレクタに任されていて、インスタンスがいつ破壊されるかわからないためである。しかし、これでは不便なことがある。例えばファイルを開いた場合はファイルをクローズするとか、通信ポートを開いたらそれを閉じるといったメモリー以外のリソースを解放したい場合である。このような場合は、Objectクラスのfinalize( )メソッドをオーバーライドする。finalize( )メソッドはガーベージコレクタによって、メモリが解放される前に呼び出されるメソッドである。このメソッドをオーバーライドしその中でリソースの解放を行う。このfinalize( )メソッドもいつ呼ばれるかは保証されていない。インスタンスが参照されなくなったことが確認され、実際にそのインスタンスが占有していたメモリーを解放される間のどこかで実行されることが保証されているだけである。また、ガーベージコレクタが不要になったインスタンスを発見し、まだfinalize( )メソッドを実行していない場合、SystemクラスのrunFinalize( )メソッドを実行することで、finalize( )の実行を促すことができる。しかしFinalize( )メソッドを実行することでFinalize( )メソッドを実行するのではなく実行するタイミングはJVMの判断に任されている。