Javaでpackageを使うとclassを実行できない現象およびその解決策

例:以下の"Calc.java"および"CalcLogic.java"

 

f:id:JunKobayashi:20190217042513p:plain

Calc.java

f:id:JunKobayashi:20190217042608p:plain

CalcLogic.java



 

これらを通常のコマンドで実行しようとするとエラーが発生

f:id:JunKobayashi:20190217020031p:plain

エラーメッセージ

 

"Calc.java"の1行目でpackageを使っているため正確なクラス名は

calcapp.main.Calcになる。

 

エラー解決策:以下のコマンドで実行

f:id:JunKobayashi:20190217042718p:plain

実行成功画面(64bit Windows 10)

 

javac -d . Calc.java CalcLogic.java:カレントディレクトリ直下に(クラスパスを指定している場合は指定されたディレクトリ直下に)パッケージ名と同名のディレクトリを生成、およびそこにclassファイル格納

 

実行する際は正確なクラス名を使った以下のコマンドを使用

java calcapp.main.Calc

Java 開発基礎事項メモ(配列補足・多次元配列)

f:id:JunKobayashi:20190212013543p:plain

Array2.javaソースコード

 

f:id:JunKobayashi:20190212013634p:plain

Array2.javaの実行結果

(1024が出力される理由)

  • y_array = x_array; により、配列変数y_arrayに、配列変数x_arrayに与えられた配列の実体(要素の集合)の先頭要素のアドレスが代入される
  • これにより、y_arrayはx_arrayと同じ実体を参照する
  • y_array[0] = 1024; によりy_arrayが参照する実体(x_arrayのそれに同じ)の先頭のアドレスにあるデータに1024が代入される

 

f:id:JunKobayashi:20190212015018p:plain

x_arrayの参照する実体の先頭アドレス5678が配列変数y_arrayにもコピーされ同じ配列実体を参照

 

f:id:JunKobayashi:20190212015659p:plain

サンプルコード

f:id:JunKobayashi:20190212015733p:plain

サンプルコード実行結果

5行目の

    x_array = null;

により配列変数x_arrayにnullが代入され、x_arrayはメモリ上のどの領域も参照しなくなるため、6行目の出力命令実行は不可能

 

f:id:JunKobayashi:20190212020345p:plain

2次元配列サンプルコード

f:id:JunKobayashi:20190212020425p:plain

2次元配列サンプルコード実行結果

3行目

    int _array = new int [2][3];

により、2行3列(縦2横3)のint型配列宣言

(正しくは要素数3のint型配列2つをその要素とする配列の宣言)

 

f:id:JunKobayashi:20190212022117p:plain

2次元配列の参照概念図

 

 

Java 開発基礎事項メモ(配列)

int x_array; // int型データを格納する配列x_arrayの宣言

 

x_array = new int [5]; // int型データの要素を5個作り配列変数x_arrayに代入

 

/* int x_array = new int [5]; と書けば上の2行と同じ*/

 /* intなどの数値を格納する型の配列は宣言されると各要素が0で初期化*/

 /* boolean型の配列は宣言されると各要素がfalseで初期化*/

 /* String型の配列は宣言されると各要素がnullで初期化*/

int x_array_length = x_array.length; // 配列x_arrayの要素数を取得(この場合は5)

 

f:id:JunKobayashi:20190212011335p:plain

サンプルコード

f:id:JunKobayashi:20190212011418p:plain

サンプルコード実行結果

 

int x_array1 = new int { 2, 3, 5, 7, 11 }; // 要素数5のint型配列x_array1の宣言および初期化

int [] x_array2 = { 13, 17, 19, 23, 29 } // 要素数5のint型配列x_array2の宣言および初期化

 

for (int i = 0; i < x_array1.length; i++){

    System.out.println("x_array1[" + i + "] = " + x_array1[i]);

}

/*通常for文。x_array1の全5要素を改行つき出力*/

 

for (int x_array2_output : x_array2){

    System.out.println(x_array2_output);

}

/*拡張for文。x_array2_outputに毎ループで1つずつx_array2の要素が入る*/

 

f:id:JunKobayashi:20190212012858p:plain

サンプルコード2

f:id:JunKobayashi:20190212012930p:plain

サンプルコード2実行結果

 

Java 開発基礎事項メモ(文字列連結・文字列→整数値)

実行させる命令

 

int x_int = 5;

String Str_test = "Number" + x_int + ',' + " John Smith";

System.out.println(Str_test);

 

Str_test: "Number", x_int, ',', " John Smith" の4つをこの順に連結させた文字列

 

f:id:JunKobayashi:20190209052322p:plain

実行結果

 

実行させる命令

 

String xString = new java.util.Scanner(System.in).nextLine();

int x = Integer.parseInt(xString);

System.out.println("x = " + (x));

 

x は文字列である xString を整数値データとして受け取る

 

f:id:JunKobayashi:20190209054206p:plain

実行結果

 

Java 開発基礎事項メモ(入力・擬似乱数・Max)

ファイル名:"Random.java"

 

public class Random {

public static void main(String[] args){

int r = new java.util.Random().nextInt(100);

System.out.print("Input an integer: ");

int num_input = new java.util.Scanner(System.in).nextInt();

System.out.println("RN = " + (r) + ", bigger one = " + (Math.max(r, num_input)));

System.out.print("Input an any String: );

String Str_input = new java.util.Scanner(System.in).nextLine();

System.out.println("Inputted String = " + (Str_input));

}

}

 

  • System.out.print(Str_out): Str_out を出力(末尾改行文字無し)
  • new java.util.Random().nextInt(M): [0, M - 1] の範囲における整数値乱数を取得
  • Math.max(x, y): 2つの数値 x, y のうち大きい方を取得
  • new java.util.Scanner(System.in).nextInt(): 1つの整数を入力より受け取る
  • new java.util.Scanner(System.in).nextLine(): 1つの文字列を入力より受け取る

 

f:id:JunKobayashi:20190209045921p:plain

Random.java の実行結果

 

Java 開発基礎事項メモ(行の出力)

ファイル名:"DoubleCalculation.java"

 

public class DoubleCalculation {

public static void main(String[] args) {

double pi = 3.14;

int r = 2;

System.out.println("Radius of the circle: " + (r));

System.out.println("Square of the circle: " + (r * r * pi));

}

}

 

System.out.println("boo" + (foo)); を使うことにより

boo と foo を連結させた文字列を出力(末尾の改行文字も含む)

  

f:id:JunKobayashi:20190209035933p:plain

"DoubleCalculation.java" の実行結果

 

おまけ:ブログでインデントを良い感じに表示するにはHTML表記にて

    以下のオプションを使用(赤字部分を任意の数値に書き換える)

<p style="margin-left: 2em">(Any String)</p> 

Java 開発基礎事項メモ(コンパイル・実行コマンド)

ソースコードの核:

 

public class ClassName {

}

 

保存ファイル名:"ClassName.java"

 

ClassName.java の実行ファイル生成コマンド:"javac ClassName.java"

 

実行コマンド:"java ClassName"