1
Javaプログラムの開始地点
Javaの実行環境は、決められた形の main メソッドを探し、そこから処理を始めます。
mainメソッドの基本形
public static void main(String[] args) {
// 最初に実行される処理
}| 部分 | 意味 |
|---|---|
| public | Javaの実行環境から呼び出せるように公開する |
| static | インスタンスを作らず、クラスメソッドとして呼び出せるようにする |
| void | 戻り値がないことを表す |
| main | プログラムの開始地点として決められた名前 |
| String[] args | コマンドラインから渡された文字列を格納する配列 |
main にも static が付いています。Javaの実行環境は MainSample のインスタンスを作らずに、このクラスメソッドを実行します。
2
コンパイルして実行する
MainSample.java
public class MainSample {
public static void main(String[] args) {
System.out.println("Javaプログラムを実行しました");
}
}ソースファイル
→
MainSample.javaコンパイル
→
javac MainSample.javaMainSample.class を生成実行
java MainSample従来のコンパイル後の実行では、java MainSample に .java や .class を付けません。また、公開クラス名とファイル名を一致させます。
近年のJavaで使える直接実行について
java MainSample.java としてソースファイルを直接実行する方法もあります。この教材では、javac でコンパイルしてから java で実行する流れを扱います。
3
コマンドライン引数
実行するクラス名の後ろに書いた値が、左から順番に文字列配列 args へ格納されます。クラス名自体は配列に入りません。
cmd
java MainSample apple バナナMainSample実行するクラス名
argsには入らない
argsには入らない
apple
args[0]バナナ
args[1]すべての引数を表示する
MainSample.java
public class MainSample {
public static void main(String[] args) {
System.out.println("コマンドライン引数は以下の通り");
if (args.length >= 1) {
for (int argumentIndex = 0;
argumentIndex < args.length;
argumentIndex++) {
System.out.println("引数[" + argumentIndex + "] = "
+ args[argumentIndex]);
}
} else {
System.out.println("コマンドライン引数はありません");
}
}
}args は慣習的な仮引数名です。別の名前にもできますが、この教材では一般的な args を使用します。
apple と バナナを指定した実行結果
output
コマンドライン引数は以下の通り
引数[0] = apple
引数[1] = バナナ引数を指定しなかった実行結果
output
コマンドライン引数は以下の通り
コマンドライン引数はありません4
配列の長さと空白
args.length で引数の個数を取得できます。配列の番号は0から始まるため、最後の要素番号は args.length - 1 です。
| 実行コマンド | args.length | 配列の中身 |
|---|---|---|
java MainSample | 0 | 要素なし |
java MainSample apple バナナ orange | 3 | args[0] ~ args[2] |
java MainSample red apple | 2 | "red"、"apple" |
java MainSample "red apple" | 1 | "red apple" |
空白を含む文字列を1つの引数として渡すときは、ダブルクォーテーションで囲みます。
5
Mathクラスのメソッド
java.lang.Math は数学計算のためのクラスです。メソッドはクラスメソッドなので、new Math() でインスタンスを作らず、クラス名から呼び出します。
- Math.max / min2つの値から大きい値・小さい値を返す。
- Math.sqrt平方根を返す。
Math.sqrt(25)は5.0。 - Math.pow / absべき乗と絶対値を求める。
MathSample.java
public class MathSample {
public static void main(String[] args) {
int firstNumber = 10;
int secondNumber = 20;
System.out.println("大きい値: " + Math.max(firstNumber, secondNumber));
System.out.println("小さい値: " + Math.min(firstNumber, secondNumber));
System.out.println("25の平方根: " + Math.sqrt(25));
System.out.println("2の3乗: " + Math.pow(2, 3));
System.out.println("-10の絶対値: " + Math.abs(-10));
}
}実行結果を確認する
output
大きい値: 20
小さい値: 10
25の平方根: 5.0
2の3乗: 8.0
-10の絶対値: 10Math クラスのコンストラクタは外部から呼び出せないため、new Math() はできません。
6
Mathクラスの定数
円周率 Math.PI と自然対数の底 Math.E も、クラス名から利用できます。
CircleSample.java
public class CircleSample {
public static void main(String[] args) {
double radius = 10.0;
double circumference = 2 * Math.PI * radius;
double area = Math.PI * Math.pow(radius, 2);
System.out.println("円周: " + circumference);
System.out.println("面積: " + area);
System.out.println("自然対数の底: " + Math.E);
}
}| 定数 | およその値 |
|---|---|
| Math.PI | 3.141592653589793 |
| Math.E | 2.718281828459045 |
7
インスタンスメソッドとの違い
| 種類 | 呼び出し方 | 計算に使うもの |
|---|---|---|
| インスタンスメソッド | smallRectangle.getArea() | 特定のインスタンスが持つ幅と高さ |
| クラスメソッド | Math.sqrt(25) | 引数として渡した値 |
main もクラスメソッドの一種です。Math.sqrt と同様に、インスタンスを作らずクラスに定義されたメソッドとして呼び出されます。
8
確認問題
- java MainSample one two と実行したとき、args.length はいくつですか。
- red apple を1つの引数として渡すには、どう書きますか。
- Math.sqrt(25) を呼ぶ前に new Math() が不要なのはなぜですか。
解答を確認する
- 2です。args[0] は
"one"、args[1] は"two"です。 - java MainSample "red apple" と書きます。
- sqrt はクラスメソッドであり、クラス名から直接呼び出せるためです。