ムーのしょ〜もない様でしょ〜もなくもないブログ

プログラミング未経験だけど、エンジニアになりたい、IT関係の仕事がしたい方向けに情報を発信しています!あっ!けどプログラミング以外にも皆さんに有益になる様な情報も発信しますよー!

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();