Javaとは?
Javaは「Write Once, Run Anywhere」を実現するオブジェクト指向プログラミング言語です。JVM上で動作し、型安全性が高く、エンタープライズシステムから組み込み機器まで幅広く利用されています。
オブジェクト指向
静的型付け
プラットフォーム非依存
基本構文
全てのコードはクラス内に記述します
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
● public class クラス定義
● main メソッドがエントリーポイント
● System.out.println() 標準出力
データ型
整数
int, long, short, byte
小数
double, float
文字
char
真偽値
boolean
int age = 25;
double price = 99.99;
String name = "太郎";
boolean isActive = true;
● String は参照型(クラス)
演算子
// 算術演算子
int result = 10 + 5; // 加算
int diff = 10 - 5; // 減算
int product = 10 * 5; // 乗算
int quotient = 10 / 5; // 除算
int remainder = 10 % 3; // 剰余
// インクリメント/デクリメント
int count = 0;
count++; // count = 1
count--; // count = 0
● == 等価、!= 不等価
● && AND、|| OR、! NOT
配列
// 配列の宣言と初期化
int[] numbers = {1, 2, 3, 4, 5};
String[] names = new String[3];
// 要素へのアクセス
int first = numbers[0]; // 1
names[0] = "太郎";
// 配列の長さ
int length = numbers.length; // 5
配列のインデックスは0から始まります
制御構造
条件分岐 (if)
if (age >= 20) {
System.out.println("成人");
} else if (age >= 13) {
System.out.println("10代");
} else {
System.out.println("子供");
}
多分岐 (switch)
switch (day) {
case 1:
System.out.println("月曜");
break;
case 2:
System.out.println("火曜");
break;
default:
System.out.println("その他");
}
break を忘れずに
三項演算子
// 条件 ? 真の値 : 偽の値
String status =
age >= 20 ? "成人" : "未成年";
int max =
a > b ? a : b;
ループ処理
for
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
拡張for
for (String name : names) {
System.out.println(name);
}
while
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
do-while
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 5);
break(ループ脱出)
for (int i = 0; i < 10; i++) {
if (i == 5) break; // i=5で終了
System.out.println(i);
}
continue(次の反復へ)
for (int i = 0; i < 5; i++) {
if (i == 2) continue; // i=2をスキップ
System.out.println(i);
}
メソッド定義
基本的なメソッド
// 戻り値なし
public void sayHello() {
System.out.println("こんにちは");
}
// 戻り値あり
public int add(int a, int b) {
return a + b;
}
// 呼び出し
sayHello();
int result = add(5, 3); // 8
メソッドのオーバーロード
// 同名で引数が異なるメソッド
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
クラスとオブジェクト
クラス定義
public class Person {
// フィールド(属性)
private String name;
private int age;
// コンストラクタ
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// メソッド
public void introduce() {
System.out.println("私は" + name +
"、" + age + "歳です");
}
}
オブジェクト生成と使用
// オブジェクト生成
Person person = new Person("太郎", 25);
// メソッド呼び出し
person.introduce();
// getter/setter(通常は定義する)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
継承とインターフェース
継承(extends)
// 親クラス
public class Animal {
public void eat() {
System.out.println("食べます");
}
}
// 子クラス
public class Dog extends Animal {
public void bark() {
System.out.println("ワン");
}
}
// 使用
Dog dog = new Dog();
dog.eat(); // 継承したメソッド
dog.bark(); // 独自のメソッド
インターフェース(implements)
// インターフェース定義
public interface Flyable {
void fly(); // 抽象メソッド
}
// 実装クラス
public class Bird implements Flyable {
@Override
public void fly() {
System.out.println("飛びます");
}
}
// 使用
Bird bird = new Bird();
bird.fly();
例外処理
try-catch-finally
try {
// 例外が発生する可能性のあるコード
int result = 10 / 0;
} catch (ArithmeticException e) {
// 例外処理
System.out.println("ゼロ除算エラー");
} catch (Exception e) {
// 汎用的な例外処理
System.out.println("エラー: " + e.getMessage());
} finally {
// 必ず実行される処理
System.out.println("処理終了");
}
例外のスロー
// 例外をスローするメソッド
public void validateAge(int age)
throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException(
"年齢は0以上である必要があります"
);
}
}
// 使用
try {
validateAge(-5);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
実務で役立つTips
命名規則
クラス名:PascalCase
メソッド/変数:camelCase
定数:UPPER_SNAKE_CASE
カプセル化
フィールドはprivateにし、getter/setterでアクセス制御を行う
equals メソッド
文字列比較は == ではなく .equals() を使用する
null チェック
NullPointerExceptionを避けるため、null チェックを行う
よく使うパターン
文字列操作
String str = "Hello, World!";
// 文字列の長さ
int len = str.length(); // 13
// 大文字/小文字変換
String upper = str.toUpperCase();
String lower = str.toLowerCase();
// 部分文字列
String sub = str.substring(0, 5); // "Hello"
// 分割
String[] parts = str.split(", ");
// 結合
String joined = String.join("-", parts);
リスト操作(ArrayList)
import java.util.ArrayList;
ArrayList<String> list = new ArrayList<>();
// 追加
list.add("りんご");
list.add("バナナ");
// 取得
String fruit = list.get(0); // "りんご"
// 削除
list.remove(0);
// サイズ
int size = list.size();
// ループ
for (String item : list) {
System.out.println(item);
}
Map操作(HashMap)
import java.util.HashMap;
HashMap<String, Integer> map = new HashMap<>();
// 追加
map.put("太郎", 25);
map.put("花子", 30);
// 取得
int age = map.get("太郎"); // 25
// 存在確認
boolean exists = map.containsKey("太郎");
// ループ
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
ファイル読み込み
import java.nio.file.*;
import java.io.IOException;
try {
// ファイル全体を読み込み
String content = Files.readString(
Paths.get("file.txt")
);
// 行ごとに読み込み
List<String> lines = Files.readAllLines(
Paths.get("file.txt")
);
} catch (IOException e) {
e.printStackTrace();
}