【一日目】Java学習
公開日: 2022/11/7
更新日: 2022/11/7
Javaとはプログラミング言語の一種であり、コンピュータに仕事を指示するための言語です。
コンピュータに指示するためにはコンピュータが理解できる機械語で指示をしなくてはならないため、 Javaのようなプログラミング言語を用いる必要がある。
コンピュータに指示するためにはコンピュータが理解できる機械語で指示をしなくてはならないため、 Javaのようなプログラミング言語を用いる必要がある。
1. JAVAの特徴
Javaの主な特徴は以下の3つが挙げられる。
①Write once, run anywhere(一度書けば、どこでも動く)
他のプログラム言語においては動かせる環境が限られていることがあるが、 Javaを用いたプログラムとOSに依存関係はないため、 一度プログラムを書けば環境に依存せず、どこでも動かせる利点がある。②Java実行環境による処理
①にて説明したOSに依存しない理由として、 JavaのプログラムはJVM(Java Virtual Machine=Java仮想マシン)と呼ばれる実行環境下で働きます。これにより本来0と1でしか表せない機械語をJavaという言語でコンピュータに指示できるようになる、言わば翻訳サイトのような役割を担っている。
③オブジェクト指向
オブジェクト指向というのはモノ(オブジェクト)に対してそれぞれ役割を持たせることで、効率よく開発を進めることです。例えば百種類のキャラクターが操作できるゲームで「前進」と「停止」が出来るボタンがそれぞれ割り当てられており、そこに「後退」という操作ができるボタンを追加する際に、百種類のキャラクターそれぞれにその操作を追加する必要はなく、「キャラクター」というモノ(オブジェクト)に「後退」という操作を追加すれば後続の百種類のキャラクター全てに「後退」という操作の反映が行えるようなイメージです。
2. 基礎用語解説
Javaにおける基礎的な用語の解説を以下に記載する。
・オブジェクト
プログラミングにおいてデータと処理の集まりを意味している。
・プロパティ
モノ(オブジェクト)が持っているデータのこと。
(自転車に例えれば「メーカー」「大きさ」「色」など)
・メソッド
モノ(オブジェクト)が持っている処理のこと。
(自転車に例えれば「走る」「曲がる」 「止まる」などアクションを起こす処理のこと)
後述するクラスの中で定義された「関数」のことをメソッドと言います。
メソッドが存在することで引数によって計算結果が変わるなど同じクラスから生まれたものでも、 異なった結果を生み出せるようになります。
・クラス
データと処理をひとつにまとめる機能。
モノ(オブジェクト)の設計書のようなもの。
通常の変数はデータだけを持っている。(例えば、数値や文字列など)
これに対してクラスは、データのみではなく「メソッド」と呼ばれるデータの操作方法や その他のツールを持っている。
・インスタンス(具体化)
クラス(抽象的)から実体を作り出すこと。
・リテラル
ソースコードに直接書き込んだ値や、その表記のこと。
以下6種類が存在する。
①整数リテラル
少数部を持たない値であり、10進数、2進数、8進数、16進数の表現が可能。
②浮動小数点数リテラル
少数部を持つ値であり、10進数、指数で表現が可能。
③文字リテラル
1つの文字を表現。文字はシングルクォートで囲む。
④文字列リテラル
複数の文字の集合体である文字列を表現。ダブルクォートで囲む。
⑤論理値リテラル
trueかfalseで表現。
⑥nullリテラル
参照型のデータ型を利用する際に何も参照していないという意味を持つ。
・変数
ソースコード内で計算した値や入力した値などプログラム内で使用するデータを保持するためのデータの入れ物。
ソースコード内では複数の変数が利用可能。
変数に名前を付けて他の変数と差別化を図れる。
クラスやメソッドに付ける名前は識別子と呼ばれる。
・データ型
変数を用意する場合どの様な値を格納するかをデータ型で指定する。
①基本データ型・・・整数や文字など
②参照型・・・クラス、配列、インターフェースなどを含む基本データ型以外の方全て
・変数宣言と代入
変数を用意することを変数宣言と呼び、その変数に値を格納することを代入と呼ぶ。
構文
データ型 変数名; ←変数宣言
変数名 = 値; ←変数に値を代入
・定数
宣言時にfinal修飾子を使用。
構文
final データ型 定数名 = 初期値;
・配列
配列は同じデータ型の値をまとめて扱う際に使用します。
配列に格納する値は基本データ型、参照型いずれの値も格納可能です。
ただし配列自体は参照型となります。
構文
データ型 [ ] 配列名 = new データ型 [ 要素数 ];
配列の宣言
構文
データ型[] 配列名; ←配列の宣言
配列名 = new データ型 [要素数] ←領域確保
(例)int[] id ;
id = new int[50];
配列の初期化
宣言した配
・オブジェクト
プログラミングにおいてデータと処理の集まりを意味している。
・プロパティ
モノ(オブジェクト)が持っているデータのこと。
(自転車に例えれば「メーカー」「大きさ」「色」など)
・メソッド
モノ(オブジェクト)が持っている処理のこと。
(自転車に例えれば「走る」「曲がる」 「止まる」などアクションを起こす処理のこと)
後述するクラスの中で定義された「関数」のことをメソッドと言います。
メソッドが存在することで引数によって計算結果が変わるなど同じクラスから生まれたものでも、 異なった結果を生み出せるようになります。
・クラス
データと処理をひとつにまとめる機能。
モノ(オブジェクト)の設計書のようなもの。
通常の変数はデータだけを持っている。(例えば、数値や文字列など)
これに対してクラスは、データのみではなく「メソッド」と呼ばれるデータの操作方法や その他のツールを持っている。
・インスタンス(具体化)
クラス(抽象的)から実体を作り出すこと。
・リテラル
ソースコードに直接書き込んだ値や、その表記のこと。
以下6種類が存在する。
①整数リテラル
少数部を持たない値であり、10進数、2進数、8進数、16進数の表現が可能。
②浮動小数点数リテラル
少数部を持つ値であり、10進数、指数で表現が可能。
③文字リテラル
1つの文字を表現。文字はシングルクォートで囲む。
④文字列リテラル
複数の文字の集合体である文字列を表現。ダブルクォートで囲む。
⑤論理値リテラル
trueかfalseで表現。
⑥nullリテラル
参照型のデータ型を利用する際に何も参照していないという意味を持つ。
・変数
ソースコード内で計算した値や入力した値などプログラム内で使用するデータを保持するためのデータの入れ物。
ソースコード内では複数の変数が利用可能。
変数に名前を付けて他の変数と差別化を図れる。
クラスやメソッドに付ける名前は識別子と呼ばれる。
・データ型
変数を用意する場合どの様な値を格納するかをデータ型で指定する。
①基本データ型・・・整数や文字など
②参照型・・・クラス、配列、インターフェースなどを含む基本データ型以外の方全て
・変数宣言と代入
変数を用意することを変数宣言と呼び、その変数に値を格納することを代入と呼ぶ。
構文
データ型 変数名; ←変数宣言
変数名 = 値; ←変数に値を代入
・定数
宣言時にfinal修飾子を使用。
構文
final データ型 定数名 = 初期値;
・配列
配列は同じデータ型の値をまとめて扱う際に使用します。
配列に格納する値は基本データ型、参照型いずれの値も格納可能です。
ただし配列自体は参照型となります。
構文
データ型 [ ] 配列名 = new データ型 [ 要素数 ];
配列の宣言
構文
データ型[] 配列名; ←配列の宣言
配列名 = new データ型 [要素数] ←領域確保
(例)int[] id ;
id = new int[50];
配列の初期化
宣言した配
3. オブジェクト指向とは
オブジェクト指向には以下の原則があります。
①継承=同じようなプログラムを1か所にまとめてコードを再利用しやすくする仕組み
似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドをいちいちプログラミングするのは非常に手間が掛かりますが、継承を使うことにより、同じ機能を実装できます。
ゲーム作成に例えると、「車」に「トラック」も追加しようとした場合。基本操作は同じため追加も簡単にできます。
②カプセル化=他のプログラムからできるだけ変更できない仕組み
オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠すこと。
利用する場合は外部から操作するために作られた処理を設けることを言います。
プログラムが壊れにくくなると共に、大人数で開発をするときすべてのコードを認識する必要がなくなります。
③ポリモーフィズム=継承したコードの一部を変更して利用するための仕組み
クラスによって同一のメソッドで異なる処理が行えるという性質をいいます。
例)Webサイトで使用するボタンをイメージした場合、同じような見た目で色が異なるボタンが3つあるとします。この場合、オブジェクト指向を使用しなかった場合は、それぞれのボタンに対してプログラムを3回も作成する必要があります。
ただし、「モノ」として1つボタンを作成してしまえば、別のボタンを作る際は「ボタンの色」や「ボタンに表示される文字の色」を変えれば簡単に作ることができます。
・不具合の原因を特定しやすくなる
オブジェクト指向で開発されていないと「どこでエラーが発生したのか?」の原因を調査するのに時間がかかります。
長文で書かれたコードの中からその原因を探すのはとっても大変です。
オブジェクト指向は、「モノ」と「操作」に分かれているので、どこでエラーが起こったのか?どんな操作をした時にエラーが起こったのか?が分かれば少なくともエラーが起こった個所はすぐに特定できます。
そして、操作ごとに処理が分かれているためエラーが起こった時の操作の処理を見るだけでエラーを特定しやすくなります。
・プログラムの仕様が変わっても簡単に対応できる
例)Webサイトで使用しているすべてのボタンの横幅を小さく変更するとなった場合、オブジェクト指向で作っていないボタンだとすべてのボタンに対して、1つずつ横幅を変える必要があります。
もし、100個ボタンを使っていたらその100個の個所全て修正する必要があります。
このように、設計・開発が効率的に進めることが出来るだけでなく、開発した後も時間をかけずに修正することが出来ます。
・設計の工程に時間がかかる。
・実際再利用するとなった場合、非常に難易度が高い。
①継承=同じようなプログラムを1か所にまとめてコードを再利用しやすくする仕組み
似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドをいちいちプログラミングするのは非常に手間が掛かりますが、継承を使うことにより、同じ機能を実装できます。
ゲーム作成に例えると、「車」に「トラック」も追加しようとした場合。基本操作は同じため追加も簡単にできます。
②カプセル化=他のプログラムからできるだけ変更できない仕組み
オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠すこと。
利用する場合は外部から操作するために作られた処理を設けることを言います。
プログラムが壊れにくくなると共に、大人数で開発をするときすべてのコードを認識する必要がなくなります。
③ポリモーフィズム=継承したコードの一部を変更して利用するための仕組み
クラスによって同一のメソッドで異なる処理が行えるという性質をいいます。
◆オブジェクト指向のメリット
・効率よくプログラムを設計・開発できる例)Webサイトで使用するボタンをイメージした場合、同じような見た目で色が異なるボタンが3つあるとします。この場合、オブジェクト指向を使用しなかった場合は、それぞれのボタンに対してプログラムを3回も作成する必要があります。
ただし、「モノ」として1つボタンを作成してしまえば、別のボタンを作る際は「ボタンの色」や「ボタンに表示される文字の色」を変えれば簡単に作ることができます。
・不具合の原因を特定しやすくなる
オブジェクト指向で開発されていないと「どこでエラーが発生したのか?」の原因を調査するのに時間がかかります。
長文で書かれたコードの中からその原因を探すのはとっても大変です。
オブジェクト指向は、「モノ」と「操作」に分かれているので、どこでエラーが起こったのか?どんな操作をした時にエラーが起こったのか?が分かれば少なくともエラーが起こった個所はすぐに特定できます。
そして、操作ごとに処理が分かれているためエラーが起こった時の操作の処理を見るだけでエラーを特定しやすくなります。
・プログラムの仕様が変わっても簡単に対応できる
例)Webサイトで使用しているすべてのボタンの横幅を小さく変更するとなった場合、オブジェクト指向で作っていないボタンだとすべてのボタンに対して、1つずつ横幅を変える必要があります。
もし、100個ボタンを使っていたらその100個の個所全て修正する必要があります。
このように、設計・開発が効率的に進めることが出来るだけでなく、開発した後も時間をかけずに修正することが出来ます。
◆オブジェクト指向のデメリット
・データと処理をひとまとめにした「継承」という仕組みによってどこのコードが実行されているのかわかりにくい。・設計の工程に時間がかかる。
・実際再利用するとなった場合、非常に難易度が高い。
4. Javaでできること
実際にJavaを使用して何が作れるのか、一例を下記にまとめてみました。
・Androidアプリ
・業務系システム
・Webサービス
・Webサイト
・家電製品
このように多種多様な活躍ができるため、 人気があるプログラミング言語として活用され続けております。
・Androidアプリ
・業務系システム
・Webサービス
・Webサイト
・家電製品
このように多種多様な活躍ができるため、 人気があるプログラミング言語として活用され続けております。
5. Javaプログラミング基礎
Javaを使用したプログラミング作成、実行の流れ
ソースファイルをコーディングし、javacコマンドを使用してソースファイルをコンパイル。
コンパイルすることでJVMで解釈できるファイルを生成。
JVMで生成したファイルを基にjavaコマンドを使用してプログラムの実行を行う。
・エラーの種類
①コンパイルエラー
プログラムに文法的な誤りがあるとコンパイル時にエラーメッセージが表示される。
プログラムを見直して修正作業が必要。
②実行時エラー
コンパイル成功後、プログラムの実行時に検出するエラーのこと。
ソースファイルなどの原因調査を実施後、修正作業が必要。
・ソースファイルの作り方
ソースファイル作成時は以下の点に注意して作成が必要。
①ファイル名や中の文は半角英数字を使用
②ファイルの拡張子は.javaをつける
③全角空白は使用不可
・class宣言
ソースファイル内には一つ以上のクラス宣言が必要。
・main()メソッド
main()メソッドはプログラムの実行開始位置を表しているもの。
public static void main (String[] args) } {・・・}と記載が必要。
・ソースファイルとクラスファイル
ソースファイルをコンパイルした結果、生成されるクラスファイルのファイル名には、class宣言で使用したクラス名が使用されます。
例:Main.javaというソースファイルをコンパイルした際に同ソースファイル内でclass Foo { }と宣言した場合は生成されるクラスファイル名はFoo.classという名前になる。
また、一つのソースファイル内に複数のクラスを定義することも可能。
ただし、public指定のクラスはソースファイル一つにつき、一つしか記述できない。
public指定したクラス名とソースファイル名は同名でなくてはならない。
・CLASSPATH(クラスパス)
クラスパスはJava実行環境がクラス及び他のソースファイルを検索するパスを表す。
もし、javaコマンドを実行する場所(カレントディレクトリ)以外にクラスファイルがあった場合、その場所をJava実行環境に教える必要があります。
そのため、クラスパスに検索場所を設定する必要があり、その方法はCLASSPATH環境変数(OSに設定)にするかjava、javacコマンド実行時に-classpathオプションを使用することになる。
-classpathは-cpと省略可能。
例:プロンプト>java -cp user Main
・パッケージ宣言
パッケージとはクラスやインターフェースを整理する方法。
アプリケーションを開発する際に多くのクラスを使用することになるが、他から提供されているクラスと自らが作成したクラスの名前が同一になってしまうこともあります。
その際にどちらのクラスを使用するのかを判断するためにもパッケージは使用されています。
また、クラスを任意のパッケージに属させることをパッケージ化と呼びます。
ソースファイルの先頭にpackage (パッケージ名);という記述するとパッケージ化できます。
パッケージ化したクラスはパッケージ名+クラス名で扱う必要があります。
またパッケージ名に対応したディレクトリを用意してそのディレクトリの中にクラスファイルを保存する必要があります。
ソースファイルをコーディングし、javacコマンドを使用してソースファイルをコンパイル。
コンパイルすることでJVMで解釈できるファイルを生成。
JVMで生成したファイルを基にjavaコマンドを使用してプログラムの実行を行う。
・エラーの種類
①コンパイルエラー
プログラムに文法的な誤りがあるとコンパイル時にエラーメッセージが表示される。
プログラムを見直して修正作業が必要。
②実行時エラー
コンパイル成功後、プログラムの実行時に検出するエラーのこと。
ソースファイルなどの原因調査を実施後、修正作業が必要。
・ソースファイルの作り方
ソースファイル作成時は以下の点に注意して作成が必要。
①ファイル名や中の文は半角英数字を使用
②ファイルの拡張子は.javaをつける
③全角空白は使用不可
・class宣言
ソースファイル内には一つ以上のクラス宣言が必要。
・main()メソッド
main()メソッドはプログラムの実行開始位置を表しているもの。
public static void main (String[] args) } {・・・}と記載が必要。
・ソースファイルとクラスファイル
ソースファイルをコンパイルした結果、生成されるクラスファイルのファイル名には、class宣言で使用したクラス名が使用されます。
例:Main.javaというソースファイルをコンパイルした際に同ソースファイル内でclass Foo { }と宣言した場合は生成されるクラスファイル名はFoo.classという名前になる。
また、一つのソースファイル内に複数のクラスを定義することも可能。
ただし、public指定のクラスはソースファイル一つにつき、一つしか記述できない。
public指定したクラス名とソースファイル名は同名でなくてはならない。
・CLASSPATH(クラスパス)
クラスパスはJava実行環境がクラス及び他のソースファイルを検索するパスを表す。
もし、javaコマンドを実行する場所(カレントディレクトリ)以外にクラスファイルがあった場合、その場所をJava実行環境に教える必要があります。
そのため、クラスパスに検索場所を設定する必要があり、その方法はCLASSPATH環境変数(OSに設定)にするかjava、javacコマンド実行時に-classpathオプションを使用することになる。
-classpathは-cpと省略可能。
例:プロンプト>java -cp user Main
・パッケージ宣言
パッケージとはクラスやインターフェースを整理する方法。
アプリケーションを開発する際に多くのクラスを使用することになるが、他から提供されているクラスと自らが作成したクラスの名前が同一になってしまうこともあります。
その際にどちらのクラスを使用するのかを判断するためにもパッケージは使用されています。
また、クラスを任意のパッケージに属させることをパッケージ化と呼びます。
ソースファイルの先頭にpackage (パッケージ名);という記述するとパッケージ化できます。
パッケージ化したクラスはパッケージ名+クラス名で扱う必要があります。
またパッケージ名に対応したディレクトリを用意してそのディレクトリの中にクラスファイルを保存する必要があります。
6. 本日使用したサンプルコード
①Sample.java
class Sample {
public static void main (String[] args) {
System.out.println("Hello!");
}
}
②Main.java
package com.se;
class Foo {
void print() {
System.out.println("package sample");
}
}
class Main {
public static void main (String[] args) {
Foo f = new Foo();
f.print();
}
}
class Sample {
public static void main (String[] args) {
System.out.println("Hello!");
}
}
②Main.java
package com.se;
class Foo {
void print() {
System.out.println("package sample");
}
}
class Main {
public static void main (String[] args) {
Foo f = new Foo();
f.print();
}
}
7. まとめ
今回はJavaの基礎と変数や配列についてを学びました。
明日は本日の復習と演算子や分岐文の項目から勉強していきます。
明日は本日の復習と演算子や分岐文の項目から勉強していきます。