Javaソースファイルの作成

Javaソースの基本スタイルを初めてのJavaのHowToWriteJavaクラスでご理解頂けたかと思います。

本章では、javaソースファイルの文字コード、最小クラス、呼び出しクラスなどを理解して頂きます。

javaソースファイルの文字コード(エンコード)

まず、最初にJavaプロジェクトで決めることは、ファイルの文字コードを何するかです。
Javaアプリケーション、Webアプリケーションに利用される主な文字コードをピックアップしました。

※.基本:基本エンコーディングセット (lib/rt.jar)、拡張:拡張エンコーディングセット (lib/charsets.jar)

java.nio API
用の正準名
java.io APIと
java.lang API 用の正準名
エンコード
セット
説明
UTF-8 UTF8 基本 8 ビット Unicode (UCS) Transformation Format
世界のHTMLファイルの多くが「UTF-8」文字コードを利用されています。
UnixOS、LinuxOS、MacOSの多くがUTF-8をデフォルトエンコードとしています。
一番開発現場で、採用されやすい文字コード
EUC-JP EUC_JP 拡張 JISX 0201、0208、0212、EUC エンコーディング、日本語
LinuxOS 古いディストリビューションのデフォルトエンコードでした。
2017年時点では、LinuxOSの最新ディストリビューションはUTF-8が採用されています。
そのため、過去に製造されたシステムでは運用時使う可能性はあります。
Shift_JIS SJIS 拡張 Shift-JIS、日本語
WindowsOSの場合によく利用される文字コード
windows-31j MS932 拡張 Shift-JIS、日本語
Shift_JISにWindows拡張文字を含ませたもの
WindowsOSにおいて、Javaのデフォルトエンコード

javacコマンドは、一覧表のどちらのコードを指定してもコンパイルできます。

2017年2月時点の私の見解です。

  • 原則、javaソースコードは「utf8」を文字コードとして利用します。
    • インターネットに公開するWebシステムを開発するときには、Webブラウザの互換性が最も高い文字コードのため。
    • css,html,javascriptファイルなど他のファイルと文字コードを統一することで、
      開発時の文字コード間違いのトラブルが少ないため。
  • イントラネットのシステムでPCがWindowsOSで固められている場合は、「MS932」を文字コードとして利用します。
    • システムを利用している方のOSがWindowsであることが保証されている。
  • 運用されているシステムでは、利用されている文字コードに従う。

IT生涯学習Techで提供するソースファイルは、全て「utf8」で記載しています。

改行コードは、「WindowsOS」の「CRLF」にしております。

最小のJavaクラス

最小のJavaクラスを作ってみましょう。

BoxOnly.java
/**
 * Copyright 2017 hoge.
 * 本ソースファイルの著作権は株式会社hogeに所属します。
 * 株式会社hogeの許可なくして、本ソースファイルの
 * 配布、改修、コピー、利用を禁止します。
 * 会社名               :株式会社hoge
 * 組織名               :システム開発部
 * プロジェクトコード   :education
 * バージョン           :1.0
 * 最終更新日時         :2017/02/10 17:21
 */

//package宣言部
package jp.co.yourcompany.education.samples;

//import 宣言部

/**
 *
 * このクラスは、Javaクラスですが、
 * 何のプロパティ、コンストラクタ、メソッド、メインメソッドを持ちません。
 * @author Raita.Kuwabara
 *
 */
public class BoxOnly {

    //定数宣言部

    //プロパティ宣言部

    //デフォルトコンストラクタ宣言部

    //主処理宣言部 public method

    //ローカル処理宣言部 private method

}
    				

このサンプルは、基本スタイルであるコメントとパッケージ宣言とタブ、不要な空白スペースを取り除けば、
クラスの箱だけできる最も最初のクラスです。まさに「箱だけ(BoxOnly)」ですね。

「c:¥projects¥src¥main¥java¥jp¥co¥yourcompany¥education¥samples」ディレクトリに
このBoxOnly.javaを配置して実際にコンパイルをしてみましょう。

BoxOnly.javaのコンパイル
c:¥projects¥education>javac -d deploy¥classes
  -s src¥main¥java -encoding UTF8
  src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥BoxOnly.java
c:¥projects¥education>
						

エラーが出ずにきちんとコンパイルされました。
「c:¥projects¥deploy¥classes¥jp¥co¥yourcompany¥education¥samples」を確認して下さい。
BoxOnly.classファイルがjavacコマンドで生成されています。

次にjavaコマンドでBoxOnlyクラスを動かせるか確かめてみます。

BoxOnly.javaの実行
c:¥projects¥education>java -cp deploy¥classes jp.co.yourcompany.education.samples.BoxOnly
エラー: メイン・メソッドがクラスjp.co.yourcompany.education.samples.BoxOnlyで見つかりません。
次のようにメイン・メソッドを定義してください。
   public static void main(String[] args)
またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります
						

javaコマンドを実行すると、上記のようにpublic static void main(String[] args)を定義して下さいとエラーがでます。

javaソースファイルには、public static void main(String[] args)は必須ではないかと思ってしまいますよね。

javaコマンドからjavaクラスを直接実行する場合のみ必要です。

実際のこのクラスを使ったサンプルをみて下さい。

ExecBoxOnly.java
/**
 * Copyright 2017 hoge.
 * 本ソースファイルの著作権は株式会社hogeに所属します。
 * 株式会社hogeの許可なくして、本ソースファイルの
 * 配布、改修、コピー、利用を禁止します。
 * 会社名               :株式会社hoge
 * 組織名               :システム開発部
 * プロジェクトコード   :education
 * バージョン           :1.0
 * 最終更新日時         :2017/02/10 17:21
 */

//package宣言部
package jp.co.yourcompany.education.samples;

//import 宣言部

/**
 *
 * このクラスは、Javaの全体の構成を分かり易くした
 * 何も処理できません。
 *
 * @author Raita.Kuwabara
 *
 */
public class ExecBoxOnly {

    //定数宣言部

    /**
     * 主処理の終了メッセージ
     */
    public static final String MESSAGE_END_JA = "-------- END method------------";

    /**
     * 主処理 BoxOnlyクラスのインスタンスを生成し終了メッセージを出力する。
     */
    public void executeBoxOnly(){
        initBoxOnly();
        outputEndMessage();
    }

    /**
     * BoxOnlyクラスのインスタンスを作成する。
     */
    private void initBoxOnly(){
        BoxOnly boxonly = new BoxOnly();
    }

    /**
     * 終了メッセージを出力する。
     */
    private void outputEndMessage(){
        System.out.println( MESSAGE_END_JA );
    }

    /**
     * javaコマンドで起動されるmainメソッド
     * @param args
     */
    public static void main( String[] args ) {
        ExecBoxOnly execBoxOnly = new ExecBoxOnly();
        execBoxOnly.executeBoxOnly();
    }
}                       

このクラスではpublic static void main(String[] args) が記述されています。
このクラスがjavaコマンドから起動できるクラスであることを意味します。

このクラスをコンパイルして、実行してみます。

ExecBoxOnly.javaのコンパイルと実行
c:¥projects¥education>javac -d deploy¥classes -cp deploy¥classes -s src¥main¥java -encoding UTF8
       src¥main¥java¥jp¥co¥yourcompany¥education¥samples¥ExecBoxOnly.java
c:¥projects¥education>java -cp deploy¥classes jp.co.yourcompany.education.samples.ExecBoxOnly
-------- END method------------
c:¥projects¥education>
						

コンパイルが通り、BoxOnlyクラスをnewして利用できている事が分かります。

Javaソースファイルの基本纏め

  1. Javaソースファイルの文字コードは、なるべく「utf8」を利用する。
  2. 作成するソースファイル名は、クラス名.javaで作成し、
    クラス宣言部のクラス名と名称を一致させる。
  3. クラスを作成するときは、以下の構文でクラスを作成する。
    クラスの定義
    public class HogeHoge {
        //やりたい処理
    }
    								
    ※.publicは、「アクセス修飾子」と呼びます。今はクラスを作成する時には、class宣言部の前にpublicを必ずつけると理解して下さい。
    ※.HogeHoge はクラス名です。
  4. public static void main(String[] args)メソッドは、javaコマンドが実行されるクラスのみ宣言する。
  5. 多くのクラスには、public static void main(String[] args)メソッドは記述されていない。
  6. クラスの基本的な使い方は、まずインスタンスを生成してから利用する。
    インスタンスの生成HogeHoge hogehoge = new HogeHoge();
  7. サンプルでも、パッケージ階層を作り、「src¥main¥java」直下にディレクトリ階層を作成する。
    パッケージ宣言部は、ライセンスを記載したコメント部の直後に記述する。
    パッケージの宣言package パッケージ名;

javacコマンド、javaコマンドについては次頁で説明します。

本頁サンプルのダウンロードと実行方法

  • java_sample2.zipファイルを「c:¥download¥java¥samples¥」に保存して下さい。
  • java_sample2.zipファイルを「c:¥projects」配下に展開して下さい。
  • コマンドプロンプトを起動して、「sample2.bat」を実行して下さい。
    先のExecBoxOnly.javaがコンパイルされ、実行されます。
  • Linux,Unix,iOSの方はバッチファイルはお手数ですが作成して下さい。改行コードが「CRLF」の点ご留意ください。