Java 言語におけるコーディング基準
関西大学工学部 システムマネジメント工学科1.はじめに
学校や企業といった組織の中でプログラムを作成する際には,共通のルール(以下「コーディング 基準」という.)に従ってコーディングを行うことが望ましい.実際,コーディング基準を遵守した プログラムは,自分自身が後になって見直した場合に理解しやすいだけでなく,他人にその内容を用 意に理解してもらえるという利点がある.さらに,コーディング基準を遵守することは,プログラム の再利用や拡張に対しても有利であり,高品質なプログラム作成のためには不可欠である. 本文書は,システムマネジメント工学科の実習科目であるプログラミング実習,情報システム演習 において,Java 言語によるプログラムをコーディングする際に遵守すべきコーディング基準をまとめ たものである.この基準はJava 言語によるコーディングを前提としているが,その大部分は他のプロ グラミング言語によるコーディングにおいても有効であると考えられる.2.ファイルの拡張子
Java 言語によるプログラムを記述するファイルには,以下の拡張子を使用する. ソースファイル: .java バイトコード : .class(ソースファイルをコンパイルすることにより自動的に生成される)3.ソースファイルの構成
1 つのソースファイルには,1つのクラスまたはインターフェースだけを記述する.ただし,private クラスやインターフェースは,関連する他のクラスと同じソースファイルに記述してもよい.その場 合,public クラスやインターフェースを先に記述する. 1つのソースファイルは,以下の順で記述する. ① ソースファイル開始コメント ② package 宣言文 ③ import 宣言文 ④ クラス/インターフェースのコード 3.1 ソースファイル開始コメント すべてのソースファイルの冒頭に,「タイトル」,「説明」,「作成」,「更新」を記載する. //////////////////////////////////////////////////////////////////////////////// // タイトル: クラス名あるいは日本語によるタイトル名を記述 // 説明: そのクラスの処理内容を記述 // 作成: 作成者(作成年月日時分)を記述 // 更新: 更新者名(更新年月日時分)を記述 //////////////////////////////////////////////////////////////////////////////// (例) //////////////////////////////////////////////////////////////////////////////// // タイトル: T21_1 Turtle クラスによる多角形の描画 // 説明: プログラミング実習1 第2回課題 1 // 作成: シスマネ太郎 (2004 年 4 月 1 日 12 時 34 分) // 更新: 更新者名(更新年月日時分)を記述 ////////////////////////////////////////////////////////////////////////////////3.2 package 宣言文 パッケージの名称およびその表記は,以下のルールに従うものとする. ・ 最初のピリオドより前の部分は,すべて小文字とする. ・ 最初のピリオドより前の部分には,インターネットのトップレベルドメイン名(jp,com,edu, net など)を使う(「3.3 import 宣言文」を参照のこと). 注意:ユニークなパッケージ名の最初の部分は,常にすべて小文字の ASCII 文字によって書き,ト ップレベルのドメイン名(現在は com,edu,gov,mil,net,org,あるいは,ISO 標準規格 の3166 と 1981 において規定される 2 文字のアルファベットで表される国コード)が好ましい. 3.3 import 宣言文 使用する「パッケージ名.クラス名」を,以下の順に記述する. 標準API (例:java.awt.Color) Extension API (例:javax.swing.JButton)
その他の外部API (例:com.sun.j2see.blueprints.cart.model.Item) 自システムのAPI (例:jp.ac.kansai-u.iecs.Myclass) 3.4 クラス/インターフェースのコード クラスおよびインターフェースのコードは,以下の順に記述する 1)(必要ならば)クラス/インターフェースの実装に関するコメント 2)class/interface 宣言 3)クラス(static)変数 :「public」「protected」「指定なし」「private」の順に宣言する. 4)インスタンス変数 :「public」「protected」「指定なし」「private」の順に宣言する. 5)コンストラクタ :引数の少ないものを先に書く. 6)インスタンスメソッドおよびクラスメソッド :機能が似ているものをかためて記述する.同じ名前のメソッドがある場 合は,引数の少ないものを先に書く.同じクラスの中では,static メ ソッドをまとめて後ろに書く. (例) ////////////////////////////////////////////////////////////////////// // タイトル: Abc サンプルプログラム // 説明: コーディング基準説明のためのプログラム // 作成: シス 09-999 シスマネ太郎 (2004 年 4 月 1 日 12 時 34 分) // 更新: ////////////////////////////////////////////////////////////////////// public class Abc {
// クラス変数
static public int dumyStPb_; // public static protected int dumyStPrt_; // protected static private int dumyStPrv_; // private // インスタンス変数
public int dumyPb_; // public protected int dumyPrt_; // protected private int dumyPrv_; // private // コンストラクタ Abc(int x){ this.dumyPb_= x; } // インスタンスメソッド void printOut( ){ System.out.println(this.dumyPb_); } // クラスメソッド
static void printClassName( ){
System.out.println( “This class is” + “Abc”); }
4.コメント文
少なくとも以下に示す内容は,必ず書かなければならない. a)変数を宣言する時 その変数がどのような役割をするかを記述する. (例:ユーザ名を格納する など) b)メソッドを記述する時 引数および返値と,そのメソッドがどのような役割を果たすのかを記述する. (例:ログイン機能(ユーザ名,パスワード) など) c)条件分岐を行う時 条件分岐の内容を記述する (例:パスワードが合っている場合 など) d)繰り返し処理を行う時 開始条件;終了条件;後処理の順で記述する (例:配列の最初から;パスワードが一致するか最後まで読みきるまで;次の配列に行くなど) 4.1 コメントの方法 (1) 文字列を /* と */ で挟むことによる方法 /* と */ が同一行にない場合でも,これらの記号で挟まれた文字列はコメントとして扱われる. (例) /* abcdefg コメント hijklmn ここもコメント oprs ここもコメント */ (2)コメント区切り文字 // による方法 // が記述された行の // 以降の文字をコメントアウトすることができる. (例) if (foo > 1) { //ここからこの行の終わりまでコメント文(後の計算式もコメント) x=x+y; } else { return false; //ここからこの行の終わりまでコメント文 } 4.2 ブロック・コメント ブロック・コメントは,ファイル,メソッド,データ構造,およびアルゴリズムについて記述する ために用いる.それぞれのファイルの先頭とそれぞれのメソッドの先頭に書くことができる.その他, メソッドの中などでも使用可能である. /*************************/ /* ブロック・コメント */ /************************/ あるいは, /////////////////////////// // ブロック・コメント // //////////////////////////4.3 1行コメント if (条件) { /* この条件に対応した処理 */ ……… } 4.4 行末に書くコメント if (a == 2) { return true; /* 特別なケース */ } else { return isPrime(a); // a が奇数のときだけ働く }
5.行の構成
5.1 インデント
プログラムの構造を理解しやすくするために,インデント(字下げ)を行う.インデントの単位は, 半角4 文字分を基準とする.タブ(TAB キー)を利用することも可能であるが,多くの場合,タブ(TAB キー)は半角8 文字(全角 4 文字)分のスペースを空けるので注意すること. なお,インデント(字下げ)の文字数が少ないほど“下のレベル”,文字数が多いほど“上のレベル” と呼ぶ.“インデントのレベルが同一の行”とはインデントの文字数が同一の行を意味し,“インデン トのレベルを一つ上げる”とは,半角4 文字分字下げすることを意味する. 5.2 行の長さ 1 行あたり,半角 80 文字(全角 40 文字)を目安にし,印刷時に折り返しが起こらないようにす る.なお,A4 用紙に印刷する場合は,上下左右の空白を 20mm あけ,Courier New フォントの 10pt を 指定し,行間を広くとらないように設定する(Words では,「書式」→「段落」→「インデントと行 間隔」において「1 ページの行数を指定時に....」のチェックを外す). 5.3 行の折り返し 式あるいは命令が1 行で書ききれない場合,以下の原則に基づいて複数の行に分割し,折り返し 後の行は,折り返し前の記述と同一レベルの記述の先頭位置からインデント(字下げ)する. ・ コンマの後で区切る. ・ 演算子の前で区切る. ・ 低いレベル よりも 高いレベル において文を分割する. ( 複数の項から一つの目的とする処理 A が構成され,処理 A と別の処理(複数の項の場合も含む) からさらに一つのまとまった処理B が構成される場合,処理 B は処理 A に比べてレベルが高い と言う.例えば,x = a + (b + c); では,処理 a + (b + c) は処理 (b + c)に比べて“レベルが高い” という.) ・ 同一の式あるいは命令に関する2 回目以降の折り返しでは,前回と同じ位置に左端を揃える. 以上の原則によると記述が分かりにくくなる場合や,折り返し部分が右に偏る場合は,折り返し前 の号の先頭から半角8 文字分のインデントとする.
メソッド呼び出しの分割例を示す.
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
//8文字のインデント var = someMethod1(longExpression1, //メソッド名の先頭から someMethod2(longExpression2, // 8文字のインデント longExpression3)); //さらに8文字のインデント ※以下は,数式を分割する2 つの例である.後者のように,( )で囲まれた部分(低レベル) のなかで分割を行うことは望ましくない. 望ましい例longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6;
望ましくない例
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //()内の処理が2行に跨る ※ 以下は,メソッド宣言をインデントする例である.
最初の例が慣例的な書き方である.2 番目の例は,右へ右へと寄るのを避けるために,2 行目 と3 行目を 1 行目の先頭から半角 8 文字分のインデントとしている.
//例1: 慣例的なインデント
someMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) {
... }
//例 2:深いインデントを避けるために,先頭から半角 8 文字分のインデントとする private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) { ... } ※ if 文での行の折り返しは,4 文字分の半角スペースによるインデントを用いると本体(ブロ ック内部)の見通しが悪くなるため,一般的に8 文字分の半角スペースによるインデントを 使う. // 不適切な記述例
if ((condition1 && condition2)
|| (condition3 && condition4 // 悪い改行(4 文字分のインデント) ||!(condition5 && condition6)) { // 悪い改行(4 文字分のインデント) doSomethingAboutIt(); // この行が分かりにくい
}
// 適切な記述例 1
if ((condition1 && condition2)
|| (condition3 && condition4) // 良い改行(8 文字分のインデント) ||!(condition5 && condition6)) { // 良い改行(8 文字分のインデント) doSomethingAboutIt(); // この行は 4 文字分のインデント }
// 適切な記述例 2
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) { // 良い改行(8 文字分のインデント) doSomethingAboutIt(); // この行は 4 文字分のインデント }
※ 三項演算子は,つぎの3 つのいずれかの方法で記述する. [表示方法1:1行に書く]
alpha = (aLongBooleanExpression) ? beta : gamma; [表示方法2:else に相当する処理のみ別行とする]
alpha = (aLongBooleanExpression) ? beta : gamma; [表示方法3:全処理を別行とする] alpha = (aLongBooleanExpression) //各行とも三項演算子の先頭に合わせる ? beta : gamma;
6.名前のつけ方
宣言を行う際には,一見してその機能が理解できるような名前をつけることが望ましい.ここでは, つぎのようなネーミング規則を設ける. ・クラス UpperAndLowerCase (先頭は大文字) ・インターフェース(クラス名と区別するために) InterfaceNameImpl (先頭は大文字で末尾に“Impl”を付加) ・メソッド firstWordLowerCase( ) (先頭は小文字) ・ローカル変数 firstWordLowerCase (先頭は小文字) ・インスタンス変数ならびにクラス変数 trailingUnderScore_ (先頭は小文字.末尾に“_”を付加) ・定数 UPPER_CASE_WITH_UNDERSCORE (“_”で区切った大文字) ・抽象クラス UpperAndLowerCase (大文字と小文字: 上の‘クラス’と同じ) もしくはインターフェースと区別するために AbstractInterfaceName (“Abstract” + インターフェース名) ・例外クラス ClassNameEndsWithException (“Exception”で終わる名前) ReallyLongClassNameEndsWithEx (長い名前の場合は“Ex”で終える) ・パッケージ lowercase (全て小文字)7.宣言
7.1 1つの行に書く宣言の数 1 行には1つの宣言だけを書くことが望ましい.(ただし,変数等が多数ならばこれに限らない) int level,size; /* という複数変数宣言は用いない方がよい */ とくに,配列とプリミティブ変数を同じ行に書いてはいけない. int a,b[]; /* このコードは不適切 */また,変数名には分かりやすい名前をつけること String userName; // ○ String aaa; // × 注意:上記の例では,タイプと識別子の間に半角スペースを1 つ空けているが,つぎのようにタブ を使うという選択肢もある. int level; // インデントのレベル int size; // テーブルのサイズ Object currentEntry; // 現在選択されているテーブルのエントリ 7.2 初期化 ローカル変数の初期化は,それが宣言されている場所に書く.唯一の例外は,その変数の初期値が 何らかの計算の後でないと決まらない場合である. 7.3 配置 宣言は,ブロックの冒頭においてのみ行う(ブロックとは,"{" と "}" で囲まれたコードである). 変数が最初に使われるときに宣言するという考え方は取るべきでない.なぜなら,ブロックを取り扱 う際に,その内部で宣言されている変数のスコープを考慮にいれる必要が生じるためである. 宣言の位置で変数のスコープが変わるため,全ての変数の宣言はできるだけメソッド・ブロックの 開始部分で行うことが望ましい. 望ましい例 void myMethod() {
int int1 = 0; // メソッド・ブロックの開始 変数 int1 の宣言,初期化 int int2; // 変数 int2 の宣言
// int2 はメソッド・ブロック内で有効 if (condition) { int2 = 0; // if ブロックの開始 変数 int2 の初期化 ... } } 望ましくない例 void myMethod() {
int int1 = 0; // メソッド・ブロックの開始 変数 int1 の宣言
if (condition) {
int int2 = 0; // if ブロックの開始 変数 int2 の宣言
... // int2 は if ブロック内のみ有効 }
}
※このルールの1 つの例外は,Java 言語の for 文の中でループ変数を宣言する場合である. for (int i = 0; i < maxLoops; i++)
... }
7.4 クラスとインターフェースの宣言 Java 言語のクラスやインターフェースをコーディングする場合,以下のルールに従って書く. ① メソッド名と "(" との間にはスペースを空けない ② 宣言文の後に来る "{" の前には 1 個の半角スペースを空ける ③ "}" は,ブロックの中が空で "{" の直後に来るような場合を除いて,それが対応する文と同じレ ベルにインデントする. ④メソッドとメソッドの間には1行分の空白行を空けて,メソッド記述の終わりを容易に識別でき るようにする.
class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { // ①,②に関連する記述 ivar1 = i; ivar2 = j; } // ④に関連する記述 int emptyMethod() {} // ③に関連する記述 ... }
8.文(ステートメント)の書き方
8.1 単一の文 1 つの行には,1 つの文だけを書く. argv++; // ○ argc--; // ○ argv++; argc--; // × 8.2 複合文 複合文とは,"{" と "}" で囲まれた複数の文を含む文のことである. 複合文に関するコーディング基準を以下に列記する. ・複合文の中にあるすべての文は,その複合文の1 つ上のレベルにインデントする. ・複合文の "{" は,その複合文を開始する最初の行に書くようにする."}" は新しい行に書き,複 合文の開始行と同じレベルにインデントする. ・if-else 文や for 文などの制御文では,その中にある文が 1 行だけの場合でも { } を書くように する.これにより,{ } の付け忘れなどによるエラーを起こすことなく新しい文を追加できる. 8.3 return 文 戻り値 (返値)を持つ return 文では,特別な理由があってその値を明確にするのでない限り,( ) を 付けないほうが望ましい. // 望ましい例 return; return value; return myDisk.size();// 望ましくない例 return (1); return (value);
8.4 if 文,if-else 文,if else-if else 文
if-else 文は,以下の3種類の形式で書くことが望ましい. 注意: if 文には,常に { } を使う. if (条件) 文; // × {} は省略しないこと if (条件) {文;} // ○ 8.5 for 文 for 文は,以下の形式で書く. for (初期化 ; 条件; 更新) { 文; } ※中身のない for 文(初期化,条件,更新の部分だけで処理が行われるもの)は,以下の形式で 記述すべきである. for (初期化 ; 条件; 更新){ //この行は削除して, 空白の行をつめても良い. } 上記の記述法により,(たとえ実行文が存在していなくても)for 文の実行範囲を明確化でき,プ ログラムの拡張時の判断ミスを防ぐこともできる.なお,つぎのような書き方は好ましくない. ※for 文の初期化や更新の部分における変数の処理にコンマ演算子( , )を使用してもかまわない が,コンマで区切られる変数の処理の数は3 つ以下に抑える.3つ以上の処理が必要ならば,for 文 の前か for ブロックの最後に処理を分けて書く. ※for 文の中の式は,‘;’の後に1個の半角空白を入れて分割する.
(例) for (expr1; expr2; expr3) // ; の後ろに半角空白1個 [形式1] if (条件) { 文; } [形式2] if (条件) { 文; } else { 文; } [形式3] if (条件) { 文; } else if (条件) { 文; } else{ 文; } [好ましくない書き方1] for (初期化 ; 条件; 更新) ; [好ましくない書き方2] for (初期化 ; 条件; 更新) ; [好ましくない書き方3] for (初期化 ; 条件; 更新){ }
8.6 while 文 while 文は以下の形式で書く. while (条件) { 文; } ※中身のない while 文は,以下の形式で書くようにする. while (条件){ //この行は削除して, 空白の行をつめても良い. } なお,つぎのような書き方は好ましくない. 8.7 do-while 文 do-while 文は以下の形式で書く. do { 文; } while (条件); 8.8 switch 文 switch 文は,以下の形式で書く. switch (条件) { case ABC: 文;
/* 次の行も実行する */ // break がないので case DEF の処理も行う ① case DEF:
文;
break; // break があるので switch 文は抜ける case XYZ: 文; break; default: 文; break; }
次の行も実行する case については(break 文のない case (上のプログラムの①)),break 文 の替わりに上記のサンプルコードのように /* 次の行も実行する */ といったコメントを書く.
switch 文では,default のケースを記述すべきである.default のケースでの break は冗長な 記述であるが,新たな case を追加する場合に break 文の付け忘れを防ぐことができる. [好ましくない書き方1] while (条件) ; [好ましくない書き方2] while (条件) ; [好ましくない書き方3] while (条件) { }
8.9 try-catch 文 try-catch 文は,以下の形式で書く. try { 文; } catch (ExceptionClass e) { 文; } try-catch 文の後には,try ブロックで例外が発生した場合でも発生しなかった場合でも必ず処 理が行われる finally ブロックを書くことができる. try { 文; } catch (ExceptionClass e) { 文; } finally { 文; }
9.スペース
9.1 空白行 空白行は,論理的に関連したコードのまとまりを目立たせることで可読性を向上させる. 以下の状況では,連続した2 行の空白行を使用する. ・ソースファイル内の各セクション間の区切り ・クラス定義とインターフェース定義の間の区切り 以下の状況では,1 つの空白行を使用する. ・メソッド間の区切り ・メソッド内のローカル変数と最初の文との間の区切り ・ブロック・コメントの直前と1 行コメントの直前 ・メソッドの中の論理的なセクションの区切り(可読性をあげるため) 9.2 空白スペース(半角スペース) ・ 日本語の空白スペース(全角のスペース)は Java のコンパイラでは“文字”として認識され,エ ラーが生じる.このため,空白スペースを設ける場合は必ず半角のスペース(半角スペース)を 用いる必要がある. 半角スペースは以下の状況において使用する. ・“(”が次に来るようなキーワード(たとえば,while, for, if など)の後ろには,1 個分の半角ス ペースを空ける.while (true) { // while の後ろに半角スペース ...
}
※メソッド名の後ろの "(" の場合には,このスペースは空けないように注意する.こうするこ とによって,キーワードとメソッド呼び出しを区別することができる.
(例) for (i=0; i<10; i++){ // キーワード(for のあとにスペースあり) x= sin(30.0*Math.PI/180.0); // メソッド(sin のあとにスペースなし)
・メソッドの引数を区切るコンマ‘,’の後に,半角スペースを 1 文字分入れる. (例) Turtle m= new Turtle(200, 200, 180);
・ドット‘ . ’を除くすべての二項演算子は,オペランドとの間をスペースで区切る. 単項のマイナス演算子や,インクリメント("++"),デクリメント("--")などの単項演算子は, オペランドとの間をスペースで区切ってはいけない. (例) a += c + d; //a の後ろ,c の前後,d の前に一文字の半角スペース a = (a + b) / (c * d); //a, c の後ろ,d の前に一文字の半角スペース while (d++ = s++) { n++; } printSize("size is " + foo + "¥n"); ・for 文の中の式は,‘ ; ’の後に空白スペースを入れて分割する.
(例) for (expr1; expr2; expr3) // ; の後ろに半角スペースを設ける ・キャストの後ろには,半角スペースは設けない.(キャストも単項演算子であるため)
(例) myMethod((byte)aNum, (Object)x); // (byte)の後ろには空白はない myMethod((int)(cp + 5), ((int)(i + 3)) + 1);
10.
Java 言語プログラミングの慣例
10.1 インスタンス変数とクラス変数へのアクセス インスタンス変数やクラス変数は,特別な理由がない限り public にしない.(インスタンス変数, クラス変数はprivate として,)アクセサリーメソッドを用いて情報のやり取りを行なう. ※ public なインスタンス変数が許されるのは,そのクラスが本質的に動作を持たないデータ構造 のためのクラス(エンティティクラス)である場合だけである. 10.2 クラス変数とクラスメソッドの参照方法 クラス変数(static な変数)やクラスメソッド(static なメソッド)には,特定のインスタンス を使ってアクセスしてはならない.必ずクラス名を使ってアクセスする. 適切な例 classMethod(); // 「メソッド名( )」 AClass.classMethod(); // 「クラス名.メソッド名( )」 不適切な例 anObject.classMethod(); // 「オブジェクト名.メソッド名( )」 10.3 定数 数値的な定数(リテラル)は,for 文中でカウンタを取り扱う際に表れる -1,0,1 を除いて, コードに直接書いてはならない(マジックナンバーとなるため). 10.4 変数への代入 複数の変数に同じ値を代入する処理を,1 つの文で書いてはいけない. (例) fooBar.fChar = barFoo.lchar = 'c'; // 不適切な例比較演算子と代入演算子が混同しやすい場所では処理の順序が明確になるよう記述する (例) if ((c++ = d++) != 0) { // 条件式の部分がより正確な処理法で表現 ... } ※(実行時のパフォーマンスを上げるため,)代入演算を行う式を他の式の中に埋め込まない. プ ログラムは他人が理解しやすい表現を心掛ける. (例) 不適切な例 d = (a = b + c) + r; 修正例 a = b + c; d = a + r; 10.5 その他の慣例 10.5.1 カッコ ( ) 付け 複数の演算子の優先順位を明確にするため,必要に応じて式の中でカッコ () 付けを行う. 不適切な例 // a==b と && の処理順序が不明確 if (a == b && c == d) 適切な例 // 明らかに a==b と c==d を先に行い,その後に&& if ((a == b) && (c == d)) 10.5.2 戻り値 (返値) 戻り値の得るまでの処理を明確にする記述にする. (例) if (結果が真偽値となる式) { return x; } return y; if (結果が真偽値となる式) { return x; }else{ return y; }
11.プログラム例
本文書で述べた基準を反映したJava 言語のプログラム例を以下に示すので,コーディングの際に参 考にすること.コメントに含まれる“< >”の部分が,対応するコーディング基準に関する説明である. 参考文献: [1] Java 言語コーディング規約: http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/index.html /////////////////////////////////////////////////////////////////////////////// // < 主に,このプログラムとクラス(宣言)の説明 そして 作成者と更新日の記述> // タイトル: ABC プログラミング実習用サンプルプログラム // 説明: コーディング基準説明のためのプログラム<小規模のためクラスの説明は初めに書く> // 作成: シス 03-999 シスマネ太郎 (2004 年 4 月 1 日 12 時 34 分) // 更新: /////////////////////////////////////////////////////////////////////////////// package sample; //<package ステートメント (このソースファイルを置く場所の指定 )>import java.awt.*; //< import ステートメント > (コメントが長ければこのように2行に分ける) // このプログラムで利用する別パッケージ(本プログラムでは未使用)
public class Abc {
/* クラス変数 <1 行のみのコメント> */
static public int dumyStPb_; // public < 文の後ろに // コメントを付けると見やすい> // <これも1行のみのコメント>
static protected int dumyStPrt_; // protected static private int dumyStPrv_; // private
// <変数宣言の行間に1行の空白を入れなくても良い>
//インスタンス変数 < (変数の)種類が異なるならば1行空け,1行文のコメントを入れる良い > public int dumyPb_; // public
protected int dumyPrt_; // protected private int dumyPrv_; // private
/**********************************************************/ /* コンストラクタ <変数とメソッド間では1あるいは2行空間を空ける> */ /* <複数行にわたるコメントの記述> */ /*********************************************************/ Abc(int x){ this.dumyPb_= x; } ////////////////////////////////////////////////////////// // インスタンスメソッド <メソッド間は1行空白を空けると良い> // // <複数行にわたるコメントの記述> // ////////////////////////////////////////////////////////// void printOut( ){ System.out.println( this.dumyPb_); } /****************************************************************/ /* クラスメソッド */ /* <複数行にわたるコメントの記述でも,// と /* */ の併用は好ましくない> */ /***************************************************************/ static void printClassName( ){
System.out.println( “This class is” + “ABC”); }
製作 関西大学工学部
システムマネジメント工学科 第1版 作成 2004 年 5 月 13 日