絶対にわかりやすいJava入門

javaプログラミング

おはこんにちばんは

どうも、まこってぃです!

今回はこのような方の向けにJavaの機能について実践しながら紹介していきたいと思います

独学で学んで限界を感じている
独学で学んで挫折した
脱初心者したい
Javaを学んで就職したい

開発環境構築

Javaの開発を行うにはIDE(統合開発環境)というものを使用します

IDEというのはプログラムを書くためのツールだと思ってください

実際、プログラムを書いてもパソコンはそのプログラムを理解することはできません

コンパイルという作業をしてパソコンが理解できる形式にするのです

そのコンパイルができるためのツールがIDEです

ではJavaを開発するのに使うIDEは何ですかと言われますと私がお勧めするのはSTSです

他にも沢山IDEはあるのですが、自分が好きなIDEを使っていいよという現場でない限り、基本的にEclipseかSTSを使います

STSはSpring Tool Suiteの略でSpring bootというFrameworkを使って開発する際に非常に便利です

なのでEclipseとSTSの使い方は必ずおさえておいた方がよいでしょう

ちなみに、STSはEclipseから更にSpring bootの開発を効率的に開発できるようになったものです

実際、ほとんど使い方は同じなのでSTSが使えればEclipseも使えるようになったも同然と考えてよいでしょう

それでは早速STSをダウンロードしていきましょう

ダウンロードページは下記です

Spring Tools 4 is the next generation of Spring tooling
Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visua...

画面が表示されたら自分が使っているパソコンのものを選択してダウンロードしてください

f:id:makoxti:20210409221213p:plain

ダウンロードが完了すると.jarファイルがありますのでそちらをダブルクリックしてください

そうすると自動的にフォルダが作成されます

フォルダが作成された箇所へ行くとsts-○.○.○.RELEASEというフォルダがあると思うのでSpringToolSuite4.exeをダブルクリックしてください

そうするとツールが起動します

起動中にworkspaceを選択するダイアログが表示されます

workspaceというのは書いたプログラムを保存する先です

自分が好きなところにworkspaceというフォルダを作成してそこを指定してください

フォルダ名はworkspaceでなくても何でも大丈夫ですが、日本語は避けましょう

するとツールが起動します

f:id:makoxti:20210409221755p:plain

おそらくツールが開いたら英語表記になっていると思います

英語じゃなくて日本語で表示したいと言う場合は下記のサイトから日本語化するためのツールをダウンロードできるので使って下さい

Eclipse 日本語化 | MergeDoc Project

行うことは下記となります

  1. プロジェクト作成
  2. パッケージ作成
  3. クラス作成

上記の3つは基本的に右クリックで選択して作成できます

ではPackage Explorerを右クリックしてNewにカーソルを合わせて「Spring Starter Project」を選択してください

f:id:makoxti:20210410205724p:plain

下記の項目を自分の任意の文字を入力してください

  • Name
  • Group
  • Package

f:id:makoxti:20210410205923p:plain

Nextを選択し、次の画面では下記項目にチェックを入れてください

  • Lomboc
  • H2 Database
  • Spring Web
  • My Batis FrameWork

チェックしたらfinishを選択してください

プロジェクトが作成されました

f:id:makoxti:20210410210624p:plain

では次にパッケージを作成しましょう

src/main/javaを選択して右クリックします

New→Packageを選択して任意のパッケージ名を入力します

f:id:makoxti:20210410210813p:plain

入力後、Finishを押します

f:id:makoxti:20210410210928p:plain

すると、パッケージが作成されます

f:id:makoxti:20210410211009p:plain

では次にクラスを作成します

クラスファイルを作成したいパッケージを右クリックし、New→Classを選択します

f:id:makoxti:20210410211121p:plain

クラス名の最初の文字は大文字にしないといけないルールがあるので気をつけてください

f:id:makoxti:20210410211208p:plain

入力が終わったらfinishを押します

そうするとクラスファイルが作成されます

f:id:makoxti:20210410211324p:plain

○○.javaというのがそうですこれでプログラムを書く準備が整いました

オブジェクト指向

今やサーバーサイド側のプログラムだけでなく、フロント側のプログラムでも間違いなく必須な考えたがオブジェクト指向になります

ではオブジェクト指向とは一体何なのかについてですが、簡単言うと部品化することです

何を部品化するの?ってなりますよね

それは、プログラムの処理です

ではここで具体例を出します

例えば「車」で考えてみましょう

車の構成は以下とします

  • ボディ
  • タイヤ
  • ハンドル

このように3つの部品から成り立っています

では車に乗って出かけたとします

出かけた先でタイヤを貸してほしいと言われたどうでしょう?

タイヤはタイヤだけの部品なので貸してあげることができますよね

ではもし車が部品ごとに分かれていない場合はどうでしょう

部品ごとに分かれていなくて1つの塊でできているのです

そうした場合、タイヤを貸してほしいと言われても、タイヤだけ取り外して貸してあげることができないですよね?

これをプログラムに置き換えます

例えば計算をする処理を考えます

計算をする部品を作っておけば計算したいところからその部品を呼んであげればいいですよね?

では逆に計算する処理を部品化しないとどうでしょう

計算したいところで毎回毎回計算する処理を書かなければいけません

それって非常に面倒くさいかつ何個もあればどこか間違えてる可能性があるかつ計算方法を追加するときに非常に時間がかかりますよね

このようにプログラムの処理を部品化してあげることをオブジェクト指向といいます

補足ですが、オブジェクト指向でプログラムを書いていくとメンテナンスがしやすくなります

メンテナンスがしやすいことを保守性といいます

プログラムを書くのであれば保守性のいいプログラムを書きましょう

mainメソッド

mainメソッドは何かというとプログラムが一番最初に呼ばれるメソッドになります

要は処理が一番最初に呼ばれるメソッドです

Javaというのは用途に応じたクラスを作成し、その中にメソッドを作って処理を呼び出し合って処理を実行していきます

今ここで一気に話してしまうと訳が分からなくなってしまうので、順番に学んでいきましょう

では実際にプログラムを書いて試してみましょう

そうすればmainメソッドが最初に呼ばれると言う意味が分かると思います

クラスファイルに以下のように記述してください

public static void main(args[]) {

System.out.println("mainメソッドです");

}

このプログラムを実行します

実行方法は下記のコマンドで行えます

Shift + Alt + X → j

この時注意して頂きたいのがカーソルはメインメソッド内を選択しておいてください

そうでないとエラーになります

するとコンソールに「mainメソッドです」と表示されます

f:id:makoxti:20210411233551p:plain

これがプログラムが最初に実行されているということになります

それでもよくわからないという方がいるかもしれません

なので、下記のようにメソッドを書き換えてみてください

public static void sample() {

System.out.println("sampleメソッド")

}

このプログラムを実行してみましょう

すると、この様なエラーになります

f:id:makoxti:20210411233657p:plain

これは、メインメソッドが無いと怒られています

どうでしょう?

これでmainメソッドが一番最初に呼ばれていると分かりましたか?

コンソール出力

コンソールへ出力するメソッドは2つあって、1行で表示するものと改行させて表示させるものの2つがあります

下記が改行させないで表示させるメソッドになります

System.out.print

こちらが改行させて表示させる場合です

System.out.println

何が違うかわかりますか?

そう、語尾にlnがつくかつかないかの違いになります

lnはLineの略になります

では早速試していきましょう

プログラムは下記になります

package sample;package sample;
public class Sample {
public static void main(String[] args) {

System.out.println("開始");

System.out.println("1行目");

System.out.print("2行目");

System.out.print("3行目");

System.out.println();

System.out.println("終了");

}
}

f:id:makoxti:20210413143352p:plain

画像に実行結果も載っていますが、lnつきのメソッドではコンソールで改行されています

逆にlnがついていないメソッドでは改行されないで1行に表示されています

最後の終了という文字を改行させて表させるために空行を入れるようにしています

System.out.println();

最後に、文字を表示させる場合は””で文字を囲む必要があります

逆に、文字では無く数字を表示させる場合は不要です

“の出し方は、Shift + 2です

これも試してみましょう

最後に下記のプログラムを追記して実行してください

System.out.println(123);

f:id:makoxti:20210413143739p:plain

ちゃんと表示されました

アクセス修飾子

アクセス修飾子とは何かと言いますとクラスメンバ関数に対してほかのクラスが持つアクセス権を指定するキーワードです

アクセス修飾子をつけることによってアクセスされることに制限がかかります

アクセス修飾子には次のようなものがあります

・public
すべてのクラス、パッケージからアクセス可能。
・protected
同一パッケージ内とサブクラスからアクセス可能。

・修飾子なし
同一パッケージ内からアクセス可能

・private
同一クラス内からのみアクセス可能

では実際にプログラムを書いていきましょう

package sample;package sample;
public class Sample {

private String str = “str1”;

public String str2 = “str2”;

protected String str3 = “str3”;

String str4 = “str4”;

private static String str5 = “str5”;

public static void main(String[] args) {

Sample sample = new Sample();

System.out.println(sample.str);

System.out.println(sample.str2);

System.out.println(sample.str3);

System.out.println(sample.str4);

System.out.println(sample.str5);

System.out.println(str);

System.out.println(str2);

System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
}
}

f:id:makoxti:20210423234452p:plain

System.out.println(str);のところから下に赤い波線あるのわかりますか?

これはコンパイルエラーといい、プログラムが間違ってますよという合図です

しかし、「str5」にだけ波線がありません

それはなぜか、「static」がついているからです

staticをつけると、どこからでも参照することができます

str5以外はstaticがついていないので、参照できなくてエラーとなっています

しかし

Sample sample = new Sample();

としてSampleクラスのインスタンスを生成することによって、生成したクラスを参照することができます

今回はsampleという名前のインスタンスを作っているので、sample.〇〇と書けばSampleクラスのフィールド変数やメソッドを参照することができます

実際に参照しているところがこちらになります

System.out.println(sample.str);

では波線がついている個所を削除してプログラムを実行してみます

f:id:makoxti:20210423235542p:plain

フィールドで定義している文字列がコンソールに出力されました

ちなみにエラーがあるとプログラムは実行することができません

フィールド変数とローカル変数

まずはフィールド変数について解説します

こちらはclass直下に定義している変数のことを言います

次にローカル変数です

ローカル変数はメソッド内で定義している変数のことを言います

フィールド変数とローカル変数は何が違うのか、それはスコープです

ローカル変数は定義されているメソッド内でしか使用することができません

逆にフィールド変数はインスタンスを作ればどこからでもアクセスすることができます

フィールド変数とローカル変数であれば変数名が同じでも大丈夫です

しかし、フィールド変数同士又はローカル変数同士で同じ変数名をつけるとエラーになります

では実際にプログラムを書いて見ていきましょう

package sample;package sample;
public class Sample {
private String str = "フィールド変数";

public static void main(String[] args) {
String str = "ローカル変数";
Sample sample = new Sample();
System.out.println(sample.str);
System.out.println(str);
}
}

f:id:makoxti:20210424213941p:plain

このプログラムを実行してみます

f:id:makoxti:20210424214022p:plain

はい、コンソールには意図した文字列が出力されました

では解説していきます

まずフィールドに定義された変数はSampleクラスのフィールド変数です

なので、Sampleクラスの変数やメソッドが使えるようにするためにインスタンスを生成します

この部分がインスタンス生成です

Sample sample = new Sample();

なので、コンソールに出力する際はインスタンス名.変数名とします

javaで書くとこうなります

sample.str

これでSampleクラスのstrという変数が使えるようになります

次にローカル変数です

こちらはmainメソッド内で定義をし、mainメソッド内で使うので変数名のみで使うことができます

この部分です

System.out.println(str);

他のクラスからSampleクラスのmainメソッドのstr変数にアクセスすることはどう頑張ってもできません

他のクラスから参照できるようにするにはフィールドで定義しましょう

インスタンス

インスタンスとは何か、簡単に言うとクラスのオブジェクトです

インスタンスを作成する際はnew演算子を使います

インスタンスを作ったら何ができるのか、それはクラスからフィールド変数メソッドをコピーすることができます

コピーしたらもちろん使う事ができます

では実際にやってみましょう

今回はSampleクラスからSample2クラスのインスタンスを生成して、Sample2クラスのtestメソッドを呼び出します

◆Sampleクラス

package sample;package sample;
public class Sample {
public static void main(String[] args) {
Sample2 sample = new Sample2();
sample.test();
}
}

f:id:makoxti:20210425123754p:plain

◆Sample2クラス

package sample;package sample;
public class Sample2 {
private String str = "Sample2クラス";

public void test() {
System.out.println(str);
}
}

f:id:makoxti:20210425125113p:plain

それではプログラムを実行してみます

実行結果

sample.test();とすることでSample2クラスのフィールドで定義された変数strの文字列がtestメソッドでSystem.out.printlnでコンソールに出力されました

コンストラクタ

コンストラクタとは何か簡単に言うとインスタンスを生成された時にだけ実行されるメソッドです

それ以外の方法ではコンストラクタを実行することができません

ちなみにコンストラクタはクラスを作る際に必ず作る必要はありません

ではどの様なときにコンストラクタを作るか、それは初期値を設定する時に作ります

今までのブログではstr = “○○”という風に変数を定義していました

この、○○の部分が初期値になります

しかし、実際のシステム開発ではこのように初期値を設定することはありません

それはなぜか、常にどのような値が入ってくるか分からないからです

なので、どのような値が来ても大丈夫な用にするために様々な機能があります

その中の一つがコンストラクタです

コンストラクタのルールとしてはクラス名と同じ名前でメソッドを作るということです

では実際にやっていきましょう

◆Sampleクラス

package sample;package sample;
public class Sample {
public static void main(String[] args) {
Sample2 sample = new Sample2("Sample2クラス");
sample.test();
}
}

Sampleクラス

◆Sample2クラス

package sample;package sample;
public class Sample2 {
private String str;

public Sample2(String str) {
this.str = str;
}

public void test() {
System.out.println(str);
}
}

Sample2クラス

どこがコンストラクタか分かりますか?

Sample2クラスのSample2メソッドがコンストラクタになります

このプログラムを動かしたらどうなると思いますか?

では動かしてみましょう

実行結果

Sample2クラスと表示されました

これは、インスタンスを生成する際にSample2という文字列を渡しています

Sample2クラスではコンストラクタで文字列を受け取るようになっています

受け取った文字列をフィールド変数のstrに代入しています

Sampleクラスに戻ってsample.test();を実行しています

Sample2のtestメソッドではフィールド変数の値を出力するようになっています

コンストラクタで受け取った文字列がフィールド変数に代入されているのでSample2クラスが出力されたわけです

getter・setter

ゲッター、セッターとは何かを簡単に言いますと、データクラスです

データクラスは何のためのクラスなのかといいますと、データを保持するクラスになります

では実際にやってみましょう

今回はSample2をデータクラスとします

まずフィールドに変数を定義します

次にゲッター・セッターを作成したい場所にカーソルを合わせて右クリックします

ソース -> getterおよびsetterの生成を選択します

getter・setter

全てを選択を選択し生成を押下します

生成

すると自動で生成されます

自動生成

getterとはフィールドの値を取得するためのメソッドです

setterはフィールドに値をセットするためのメソッドです

getterは引数はありません

setterはフィールドにセットする値を受け取るために引数があります

ではmainメソッドの方から値をセットして取得してみましょう

◆Sampleクラス

package sample;package sample;
public class Sample {
public static void main(String[] args) {
Sample2 sample2 = new Sample2();
sample2.setStr("値をセット");
sample2.setNum(123);
String str = sample2.getStr();
sample2.getStr();
int num = sample2.getNum();
System.out.println(str);
System.out.println(num);
}
}

◆Sample2クラス

package sample;package sample;
public class Sample2 {
private String str;
private int num;

public String getStr() {
return str;
}

public void setStr(String str) {
this.str = str;
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}
}

ではこのプログラムを実行します

実行結果

セットした値をゲットしてちゃんとコンソールに出力されました

メソッド

クラスとメソッドについて理解しないとオブジェクト指向はできません

それ位今回学ぶメソッドというのは大切なものです

ではメソッドとは何か、簡単に言うと処理の塊です

メソッドを作る際に気をつけなくてはならないのが、関係ないクラスの中に関係ないメソッドを作ると言うことです

例えば「犬・猫・人」という3つのクラスがあるとします

犬のクラスの中に人用の処理を作るのはおかしいですよね?

人用の処理であれば人のクラスに作るのが正解です

では早速やっていきましょう

まずメソッドの構文です

○ △ ×(□)

○:アクセス修飾子

△:戻り値の型

×メソッド名

□:引数

となります

戻り値の型とメソッド名は必須です

戻り値の型とは、メソッド内で処理をして、呼び出し元に何か値を返す場合に使います

例えば文字を返すのであればString数字を返すのであればintとなります

ただ、何も返さないという場合があります

その時はvoidを指定します

例えば文字を返す場合はreturn ○○とするのですがvoidの場合はreturnは書いてはダメです

書くとそれだけでエラーになります

ではやっていきましょう

プログラムはこのようになります

package sample;

package sample;
public class Sample {
public static void main(String[] args) {

Sample sample = new Sample();

String str = sample.returnStr("あいう", "えお");

int num = sample.returnInt(1, 2);

sample.noReturn("引数の文字列です");

System.out.println(str);

System.out.println(num); }

// 文字列を返却します

public String returnStr(String str, String str2) {

String str3 = str + str2;

return str3;

}

// 数字を返却します

public int returnInt(int num, int num2) {

int num3 = num + num2; return num3;

}

// 何も返却しません

public void noReturn(String str) {

System.out.println(str);

}
}

インデントがないので見づらいですね

結果はどうなるでしょう

それでは実行してみます

実行結果

一見???となりそうですが、

String str = sample.returnStr(“あいう”, “えお”);

int num = sample.returnInt(1, 2);

この部分はメソッドに引数を渡して戻り値をもらっているだけです

 

sample.noReturn(“引数の文字列です”);

上記ではnoReturnメソッドを呼び出しているので、noReturnメソッドのSystem.out.println(str);が実行されます

その後元の処理に戻ってstrとnumの出力を行っています

クラス

クラスとは何かを簡単に言いますと処理を纏めたものです

処理とは何かと言いますとメソッドのことです

さらに言うと、メソッドや他クラスから使用する変数をフィールドに定義したものです

クラス名の先頭の文字はアルファベットの大文字から始まるというルールがあります

1つのjavaファイルに複数のクラスを定義することもできますが、保守性が非常に悪くなります

保守性とは何か、要はプログラムの見やすさやメンテナンスのしやすさです

なので、役割ごとにクラスを作ってあげることを意識していきましょう

例えば計算するためのクラスを作るのであればCalcクラスといった感じです

オーバーロード

オーバーロードとは何か、簡単に言いますと同じ名前のメソッドを定義する事ができる機能です

Javaでは基本的に同じ名前のメソッドを定義することができません

メソッド名は基本的にどのような機能なのかわかるように命名します

しかし、どうしても同じ名前のメソッド名を付けたい時があります

そのような時に使います

なので簡単に纏めますと同じクラスの中でメソッド名と戻り値の型が同じで、引数の型や数、並び順が違うメソッドを2つ以上定義することをいいます

では実際に試していきましょう

package sample;
public class Sample {
    public static void main(String args[]) {
        msg("佐藤");
        msg("山田", "はじめまして");
    }
    static void msg(String name) {
        System.out.println("こんにちは、" + name + "です");
    }
    static void msg(String name, String greeting) {
        System.out.println(greeting + "、" + name + "です");
    }
}

上記のプログラムを実行します

実行結果

コンパイルエラーが発生せず意図したとおりのプログラムの実行結果となりました

継承

継承とは何かと言いますとあるクラスを元にして新しい機能を追加したいときに作るクラスの事です

つまり、あるクラスで定義したプロパティとメソッドをそのまま受け継ぎつつ、独自のプロパティやメソッドを差分として定義することが可能です

継承元のクラスのことを親クラス又はスーパークラスと言います

継承先のクラスは子クラスといいます

継承する際はclass宣言時にこのように書きます

public class ○○ extends 親クラス

private宣言している変数の値は子クラスへは引き継がれません

では実際に試していきましょう

◆Sampleクラス

package sample;
public class Sample {
    public static void main(String args[]) {
        Sample2 sample2 = new Sample2();
        sample2.run();
    }
}

 

◆Sample2クラス

package sample;
public class Sample2 {
    public void run() {
        Sample3 sample3 = new Sample3();
        System.out.println("Sample2クラスのrunメソッドです");
        sample3.run3();
    }
    public void run2() {
        System.out.println("Sample2クラスのrun2メソッドです");
    }
}

◆Sample3クラス

package sample;
public class Sample3 extends Sample2 {
    public void run3() {
        run2();
        System.out.println("Sample3クラスのrun3メソッドです");
    }
}

ではこちらのプログラムを動かしてみましょう

実行結果

期待通りの文言が出力されました

アップキャスト

継承関係のあるクラスで、継承元をスーパークラス、継承先をサブクラスと言いますが、javaではサブクラスのオブジェクトをスーパークラスと同じように扱うことができます。

これをアップキャストと言います。

アップキャストは明示的に書かなくても自動的に変換してくれます。

package sample;

class Sample {
int weight = 0;
}

class Shark extends Sample {
}

class Sample4 {
public static void main(String[] args) {
Shark shark = new Shark();
// アップキャスト
Sample sample = shark;
sample.weight = 500;
System.out.println("重さは" + sample.weight + "g");
}
}

◆実行結果

ダウンキャスト

ダウンキャストは、スーパークラスからサブクラスへの変換です。アップキャストと違いダウンキャストは自動で行われないので、括弧の中に型を指定してキャストを実装する必要があります。

package sample;

class Sample {
int weight = 0;
}

class Shark extends Sample {
}

class Sample4 {
public static void main(String[] args) {
Shark shark = new Shark();
// アップキャスト
Sample sample = shark;
sample.weight = 500;
// ダウンキャスト
shark = (Shark) sample;
System.out.println("重さは" + shark.weight + "g");
}
}

◆実行結果

instanceof演算子

instanceof演算子はあるオブジェクトの型を動的に判定するための演算子です。

以下のような用途で用います。

  • オブジェクトが、あるクラスのインスタンスか
  • オブジェクトが、あるクラスの子クラスのインスタンスか
  • オブジェクトが、特定のインターフェースを実装したインスタンスか

オブジェクトが指定の型である場合、結果はtrueになります。

そうでない場合、結果はfalseになります。

例えばある文字がStringの型なのか確認してみましょう

package sample;

public class Sample {
public static void main(String[] args) {
String str = "test";
if (str instanceof String) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}

◆実行結果

Stringの箇所をBooleanに変えてみます

すると、コンパイルする際にstrはBooleanではないですよとエラーを出してくれます

オーバーライド

クラスを継承した際に継承元になっているスーパークラスで定義されているメソッドを、継承したサブクラスで同じメソッド名で書き換えることができます。これをオーバーライドといいます。要するに、メソッドを上書きするということです。

オーバーライドする際には、メソッド名を同じにする必要があるのに加えて、メソッドの引数は同じ数、同じ順番にしなければなりません。

package sample;

// スーパークラス
class SuperClass {
public void calc(int num) {
System.out.println("super class");
System.out.println("num * 2 = " + (num * 2));
}

}

// サブクラス
class SubClass extends SuperClass {
@Override
public void

calc(int num) {
System.out.println("sub class");
super.calc(num);// スーパークラスと同じ処理
}
}

public class Sample {
public static void main(String[] args) {
SuperClass superClass = new SuperClass();
superClass.calc(5);
}
}

◆実行結果

@Overrideとは

@Overrideはアノテーションといいます。

記述するとメソッドがスーパークラスのメソッドをオーバーライドしていることを明示します。

このアノテーションを付与すると、スーパークラスにないメソッドを記述するとコンパイルエラーが発生します。なので、メソッド名のスペルミスなどを防止することができます。

なので、オーバーライドする際は@Overrideを記載することをおすすめします。

抽象クラス(abstract)

abstractクラスとは、抽象メソッドを1つ以上持つクラスです。

抽象メソッドとは実装を持たないメソッドと戻り値を定義したメソッドです。

例えばこんな感じです。

abstract 戻り値の型名 メソッド名(引数);

次に、抽象クラスの書き方です。

abstract class クラス名 { abstract 戻り値の型名 メソッド名(引数); }

抽象クラスを使った実装はこうなります。

abstract class 抽象クラス名 {

abstract 戻り値の型名 メソッド名(引数); }

class 派生クラス名 extends 抽象クラス名 {

戻り値の型名 メソッド名(引数) {

処理内容;

}

}

では実際に実装してみます

package sample;

abstract class AbstractClass {
abstract void abstractMethod(int num, String str);

void nonAbstractMethod() {
System.out.println("非抽象メソッドより出力");
}
}

public class Sample extends AbstractClass {
public static void main(String[] args) {
Sample main = new Sample();
main.abstractMethod(3, "Test");
}

public void abstractMethod(int num, String str) {
System.out.println("引数int num = " + num + " / 引数String str = " + str);
}
}

◆実行結果

抽象クラスは下記のルールを守らなければいけません

  • 直接インスタンス化できない
  • 抽象クラスに定義したメソッドは全てオーバーライドしなければならない
  • サブクラスでコンストラクタを記載する

例外処理(try-catch-finally)

例外処理を行うにはtry-catchを使用します。

構文は次の通りです。

try{ 例外が発生しているかどうか調べる文1; 
例外が発生しているかどうか調べる文2; 
... 
}catch (例外クラス1 変数名1){ 
例外クラス1の例外が発生した時に行う文; 
... } finally {
...
}

tryの中にはエラーになる可能性がある処理、catchにはエラーになった時の処理、finallyには例外が発生しても必ず実行したい処理を書きます。

では必ずエラーが発生するプログラムを書いて動きを見てみましょう

package sample;

import java.io.FileReader;

public class Sample {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("/A/B/C/D.txt");
} catch (Exception e) {
System.out.println("例外が発生しました");
} finally {
System.out.println("必ず実行されます");
}
}
}

◆実行結果

ArrayList

ArrayList クラスは List インターフェースを実装したクラスの一つで、要素の数が可変のコレクションとなっています。要素が連続して格納されており、各要素へ比較的高速にアクセスすることができます。逆に要素の追加や削除には時間がかかる場合があります。

まずは構文からです。

ArrayList<データ型> 変数名 = new ArrayList<>();

では実際にListに値を設定して出力してみます

package sample;

import java.util.ArrayList;
import java.util.List;

public class Sample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("abc");
System.out.println(list.get(0));
}
}

◆実行結果

HashMap

キーと値のペアをマップに追加します。マップに対してキーを指定することで、対応する値を取得することができます。

まずは構文からです。

HashMap<キーのデータ型,値のデータ型> 変数名 = new HashMap<>();

では実際に値をセットして出力してみましょう

package sample;

import java.util.HashMap;
import java.util.Map;

public class Sample {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(0, "あ");
map.put(1, "い");
System.out.println(map.get(0));
System.out.println(map.get(1));
}
}

◆実行結果

総称型(ジェネリクス)

ジェネリクスとは「<>」記号で囲まれたデータ型名をクラスやメソッドに付けることで、Integer型やString型などの様々な型に対応する汎用的なクラスやメソッドを作る機能のことです。

ジェネリクスを使わないと、データ型の不一致で実行時にエラーが発生する場合があります。

package sample;

class ClassSample<T> {
private T t;

public ClassSample(T t) {
this.t = t;
}

public T getT() {
return t;
}
}

public class Sample {
public static void main(String[] args) {
// Integer型として利用可能
ClassSample<Integer> cs2 = new ClassSample<Integer>(1);
Integer i = cs2.getT();
System.out.println(i);
// ワイルドカードを使用 Number型として利用可能
ClassSample<? extends Number> cs3;
cs3 = cs2;
Number n = cs3.getT();
System.out.println(n);
}
}

◆実行結果

ラムダ式

ラムダ式とは簡単に言うと関数の様に使える記法のことをいいます。

こんなやつです。

package sample;

public class Sample {
public static void main(String[] args) {
method(() -> {
System.out.println("Hello Lambda!");
});
}

public static void method(Runnable r) {
r.run();
}
}

◆実行結果

本気でプログラミングを学びたい人へ

ここまで読んでくださった方、お疲れさまでした!

沢山の機能を紹介してきましたが、これが全ての機能ではありません。

あくまでよく使う機能のみを紹介しました

今後本気でプログラマー、システムエンジニアのようなIT業界に入りたいのであれば、しっかり専門のプロに学ぶべきだと思います。

そうしないと、もし入社できても仕事についていけず辛い思いをするのはあなたです。

現役システムエンジニア7年目の私から見たおすすめのプログラミングスクールを紹介しています。

サポートがしっかりしているスクールがいい、できるだけ安いスクールがいいといった方向けのスクールもあります。

相談やカウンセリングは無料なので、本気でプログラミングを学びたいのならすぐに行動しましょう

おすすめのプログラミングスクールへ

子供向けのスクールも紹介しています

子供向けのプログラミングスクールへ

コメント

error:Content is protected !!
タイトルとURLをコピーしました