パブリックのクラス記述法

Copyright(C) 18Sep2013 coskx

大きなプログラムでは,クラスはパブリックとして宣言され,他のソースファイルから使用が可能なように記述する。
その場合,1つのファイルには1つのクラスを記述するようになっている。

例えば,この学習資料で取り上げているプログラムでは1つのファイルにまとめているので,次のようになっている。

List 1 本文で説明用に記述しているclass (Pointarray.java)
/* Pointarray.java */
class Point { //このクラスをpublicにはできない
    public int x; /*x座標*/ //この行のpublicは省略可能
    public int y; /*y座標*/ //この行のpublicは省略可能

    Point() {
    }
    public Point(int ix, int iy) { //この行のpublicは省略可能
        x=ix;
        y=iy;
    }
}

public class Pointarray {
    public static void main(String[] args) {
        Pointarray mainprg = new Pointarray();
    }
 
    Pointarray() {
        Point[] pnt= new Point[3];
        int i;
        for (i=0; i<3; i++) pnt[i]= new Point();
        for (i=0; i<3; i++) {
            pnt[i].x=i*10;
            pnt[i].y=i*3;
        }
        for (i=0; i<3; i++) {
            System.out.printf("%d %d\n", pnt[i].x, pnt[i].y);
        }
    }
}

/*** 実行結果
0 0
10 3
20 6
***/


大きなプログラムでは1つのファイルには1つのクラスを記述するようになる。
その場合,mainになるクラスが,別のファイルに記述したクラスを利用できるように,
クラスをパブリックにする。

List 2.1 他から利用できるpublic class Point (Point.java)
/* Point.java */
public class Point { //この行のpublicは省略可能
    public int x; /*x座標*/ //この行のpublicは省略可能
    public int y; /*y座標*/ //この行のpublicは省略可能

    Point() {
    }
    public Point(int ix, int iy) { //この行のpublicは省略可能
        x=ix;
        y=iy;
    }
}
List 2.2 本来のmainを持つクラスの記述 (Pointarray2.java)
/* Pointarray2.java */
public class Pointarray2 {
    public static void main(String[] args) {
        Pointarray2 mainprg = new Pointarray2();
    }
 
    Pointarray2() {
        Point[] pnt= new Point[3];
        int i;
        for (i=0; i<3; i++) pnt[i]= new Point();
        for (i=0; i<3; i++) {
            pnt[i].x=i*10;
            pnt[i].y=i*3;
        }
        for (i=0; i<3; i++) {
            System.out.printf("%d %d\n", pnt[i].x, pnt[i].y);
        }
    }
}

このように2つのファイルに分けて,クラス名にはpublic修飾を付けて記述する。
この2つのファイルは同じフォルダ内に置く。

publicclass.zip

そしてmainを持つファイルを指定してコンパイルして実行すると,
クラスPointを使用していることを認識して,クラスPointを持つPoint.java
を探してコンパイルしてリンクして実行してくれる。

実行の様子
javac 1.7.0_25

>javac Pointarray2.java

>java Pointarray2
0 0
10 3
20 6

ただし,実際の作業では上記の実行の前に,作業フォルダに移動している必要がある
例えば作業フォルダが

C:\Users\xxx\work

の時は

cd C:\Users\xxx\work

とする。次に環境変数を整える(この例はwindowsの環境変数を自動的に整えるためのコマンドである)

for /F %i in ( 'dir "C:\Program Files\Java" /b ^| find "jdk"' ) do (set CURRENTJAVA=%i)
set CLASSPATH=.;"%SystemDrive%\Program Files\Java"
set JAVAPATH="%SystemDrive%\Program Files\Java\%CURRENTJAVA%\bin"
set path=%path%;%JAVAPATH%
set JAVA_HOME="%SystemDrive%\Program Files\Java\%CURRENTJAVA%"

この作業を行った後にコンパイルと実行を行う。

クラスPointを持つPoint.javaを探してコンパイルしてリンクして実行してくれる。と説明したが,
環境変数CLASSPATHに記述されたフォルダを探す仕組みになっている。
ここでは,CLASSPATHに「.」(カレントフォルダ)が含まれているので,探してくれた。