Java初級【基礎編】
メソッドを呼び出してみる
メソッドとは、何らかの処理を割り当てた部品。
Javaのファイルを実行すると、自動的にmainメソッドが実行される
mainメソッドの処理をメソッドに切り分けると、
mainメソッドが各メソッドに指示を出し、
各メソッドが個々の処理を実行するという構造になる。
class Main { public static void main(String[] args) { hello(); } public static void hello() { System.out.println("Hello Java"); } } Hello Java
class Main { public static void main(String[] args) { printData(); printData(); } public static void printData() { System.out.println("私は佐藤です"); } } 私は佐藤です 私は佐藤です
メソッドに引数を渡す
メソッドに引数を渡すには、
メソッド名(引数)としてメソッドを呼び出す。
渡された引数は、メソッドの仮引数で指定した変数に代入され、
その変数はメソッドの処理の中で用いることができる。
class Main { public static void main(String[] args) { printData("佐藤"); printData("加藤"); } public static void printData(String name) { System.out.println("私の名前は" + name + "です"); } } 私の名前は佐藤です 私の名前は加藤です
複数の引数をもつメソッド
引数は複数渡すこともできる。
メソッドが複数の引数を受け取るためには、
仮引数をコンマ(,)で区切って定義する。
異なるデータ型の引数を複数受け取ることもできますし、
引数を受け取る順番も任意に決めることができる。
引数は左から順番に「第1引数、第2引数・・・」
というように呼ぶ。
class Main { public static void main(String[] args) { printData("佐藤", 34); printData("加藤", 23); } public static void printData(String name, int age) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); } } 私の名前は佐藤です 年齢は34歳です 私の名前は加藤です 年齢は23歳です
戻り値とreturnとvoide
return
メソッドの処理結果を、メソッドの呼び出し元で使いたい場合がある
このようなときは、
メソッドが戻り値(もどりち)を返すようにする。
メソッドの中でreturnを使うと、
returnの値をメソッドの呼び出し元に返すことができる。
戻り値があるメソッドは、戻り値のデータ型を指定する。
定型だった「public static void」のvoidの部分で指定する。
voide
voidは戻り値がないという意味。
戻り値のない(returnがない)メソッドには、voidを指定する。
class Main { public static void main(String[] args) { String name = fullName("佐藤", "健"); printData(name, 27); printData("渡辺 健", 65); } public static void printData(String name, int age) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); } // fullNameメソッドを定義してください public static String fullName(String firstName, String lastName) { return firstName + " " + lastName; } } 私の名前は佐藤 健です 年齢は27歳です 私の名前は渡辺 健です 年齢は65歳です
メソッドのオーバーロード
同名のメソッドは原則として定義できない。
同じメソッドが複数存在すると、メソッドを呼び出したときに
どのメソッドを用いればいいのか、
コンピュータがわからなくなってしまうから。
ただし、引数の型や個数が違う場合は同名のメソッドを定義できる。
同名のメソッドがあっても、引数が違えばどれを呼べばいいのか
コンピュータが判断できるためです。
このように同名のメソッドを定義することをオーバーロードと言う。
class Main { public static void main(String[] args) { printData(fullName("佐藤", "健"), 27); // fullNameメソッドを用いて、printDataの引数を書き換えてください printData(fullName("渡辺", "ナベ", "健"), 65); } public static void printData(String name, int age) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); } public static String fullName(String firstName, String lastName) { return firstName + " " + lastName; } public static String fullName(String firstName, String middleName, String lastName) { return firstName + " " + middleName + " " + lastName; } } 私の名前は佐藤 健です 年齢は27歳です 私の名前は渡辺 ナベ 健です 年齢は65歳です
メソッドからメソッドを呼ぶ
メソッドは、mainメソッド以外のメソッドから呼び出すことも可能
プログラムの部品であるメソッドが、
相互に助けあってプログラムを形作る。
class Main { public static void main(String[] args) { printData(fullName("佐藤", "健"), 27, 1.6, 50.0); printData(fullName("渡辺", "ナベ", "健"), 65, 1.75, 80.0); } public static void printData(String name, int age, double height, double weight) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); System.out.println("身長は" + height + "mです"); System.out.println("体重は" + weight + "kgです"); double bmi = bmi(height, weight); System.out.println("BMIは" + bmi + "です"); } public static String fullName(String firstName, String lastName) { return firstName + " " + lastName; } public static String fullName(String firstName, String middleName, String lastName) { return firstName + " " + middleName + " " + lastName; } public static double bmi(double weight, double height) { return weight / height / height; } } 私の名前は佐藤 健です 年齢は27歳です 身長は1.6mです 体重は50.0kgです BMIは6.4E-4です 私の名前は渡辺 ナベ 健です 年齢は65歳です 身長は1.75mです 体重は80.0kgです BMIは2.7343749999999997E-4です
クラス・他のクラスを呼び出す
クラスは、メソッドという小さな部品をまとめる、
より大きな部品で。これまではmainメソッドと同じクラス
(Mainクラス)のメソッドを使ってきたが、
他のクラスのメソッドを利用することも可能
クラスの定義は「class クラス名」とします。
クラス名の最初の文字は大文字にし、
ファイル名は「クラス名.java」としなければならない。
Main.java
class Main { public static void main(String[] args) { Person.hello(); } } Hello
Person.java
class Person { public static void hello() { System.out.println("Hello"); } }
先ほどの一つにまとまっているclass Mainを
class Personを作って分けてみる
Main.java
public class Main { public static void main(String[] args) { Person.printData(Person.fullName("Kate", "Jones"), 27, 1.6, 50.0); Person.printData(Person.fullName("John", "Christopher", "Smith"), 65, 1.75, 80.0); } }
Person.java
class Person public static void printData(String name, int age, double height, double weight) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); System.out.println("身長は" + height + "mです"); System.out.println("体重は" + weight + "kgです"); double bmi = bmi(height, weight); System.out.println("BMIは" + bmi + "です"); } public static String fullName(String firstName, String lastName) { return firstName + " " + lastName; } public static String fullName(String firstName, String middleName, String lastName) { return firstName + " " + middleName + " " + lastName; } public static double bmi(double weight, double height) { return weight / height / height; } }
私の名前は佐藤 健です 年齢は27歳です 身長は1.6mです 体重は50.0kgです BMIは6.4E-4です 健康です 私の名前は渡辺 ナベ 健です 年齢は65歳です 身長は1.75mです 体重は80.0kgです BMIは2.7343749999999997E-4です 健康ではありません
外部ライブラリ
Javaでは、他人が作ったクラスを利用することもできる。
このようなクラスを外部ライブラリと呼び、
自分のプログラムに読み込むことで利用できるようになる。
すべてのプログラムを自分だけで開発する必要がない。
世界中のエンジニアが作った便利なメソッドを利用することで、
開発の幅は一気に広がる。
Mathクラスのメソッド
Mathクラスのmaxメソッドを使ってみる。
maxメソッドは、引数に渡した2つの数値の大きい方を
返してくれる。
外部ライブラリをうまく活用すれば、
自分で実装する手間が省けるので便利。
Person.java
import java.lang.Math; class Person public static void printData(String name, int age, double height, double weight) { System.out.println("私の名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); System.out.println("身長は" + height + "mです"); System.out.println("体重は" + weight + "kgです"); double bmi = bmi(height, weight); System.out.println("BMIは" + Math.round(bmi) + "です"); ここ } public static String fullName(String firstName, String lastName) { return firstName + " " + lastName; } public static String fullName(String firstName, String middleName, String lastName) { return firstName + " " + middleName + " " + lastName; } public static double bmi(double weight, double height) { return weight / height / height; } } 私の名前は佐藤 健です 年齢は27歳です 身長は1.6mです 体重は50.0kgです BMIは20です 健康です 私の名前は渡辺 ナベ 健です 年齢は65歳です 身長は1.75mです 体重は80.0kgです BMIは26です 健康ではありません
import不要のクラス
先ほど読み込んだ「java.lang.Math」はよく利用されるため、
実は特別にimportせずに自動で読み込まれるようになっている。
Mathクラス以外にも「java.lang.クラス名」となる外部ライブラリは
すべて自動で読み込まれる。
Scannerで文字を受け取る
import java.util.Scanner; class Main { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("名前: "); String name = scanner.next(); // 「こんにちは◯◯さん」と出力してください System.out.println("こんにちは" + name + "さん"); } }
Scannerで数値を受け取る
Scannerを用いて、整数と小数を受け取る方法。
整数を受け取るメソッドはnextIntメソッド、
小数を受け取るメソッドはnextDoubleメソッド。
System.out.print("年齢:"); int age = scanner.nextInt(); System.out.print("身長(m):"); double height = scanner.nextDouble();