オブジェクト指向(object-oriented)とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方であり、オブジェクト指向プログラミングではプログラムの構造をオブジェクト群の相互作用とその雛形であるクラス群の関係として捉える。 クラス(class)はオブジェクトの設計図にあたるもので、抽象データ型(abstract data type)の一つ。 クラスから生成したオブジェクトのことをインスタンス(instance)という。 クラスには、インスタンスの保持するデータ(フィールド、メンバ変数)と操作(メソッド、メンバ関数)が記述される。 クラスは、情報隠蔽(カプセル化:encapsulation)・継承(インヘリタンス:inheritance)・多態性(ポリモルフィズム:polymorphism)などの、オブジェクト指向プログラミングにおける重要な概念を実現する。
[修飾子] class クラス名 { // メンバー(member) // ・フィールド(field)(0個以上)・・・メンバ変数 [修飾子] 型名 フィールド名 ; // ・メソッド(method)(0個以上)・・・メンバ関数 [修飾子] 戻り値の型 メソッド名(仮引数リスト) { 文 ; return 式 ; } } | ![]() |
|
![]() |
クラス名 変数名;
変数名 = new クラス名();
// あるいはまとめて、
クラス名 変数名 = new クラス名();
| ![]() インスタンス |
![]() クラス |
オブジェクトをさす変数名.フィールド名
オブジェクトをさす変数名.メソッド名(実引数リスト)
this.フィールド名
this.メソッド名(実引数リスト)
// このthis.は省略できる
// ローカル変数(local variable)と区別するにはthis.が必要!
フィールド名
メソッド名(実引数リスト)
![]() // 斜辺の長さを求めるメソッド
|
![]() |
![]() // 平均を求めるメソッド
|
アクセス修飾子(modifier) | 機能 | 備考 |
private | クラス外からアクセスできない | フィールドに指定することが多い |
なし | 同じパッケージに含まれるクラス内からアクセスできる | (パッケージアクセス) |
public | クラス外からアクセスできる | メソッドに指定することが多い |
|
![]() |
[修飾子] クラス名(引数リスト)
{
文:
}
![]() |
| ||||||||||||
|
![]() |
// 平方数表を表示
for( int i = 1; i <= 10; i++ )
{
int j = i * i;
System.out.println( i + "\t" + j );
}
メソッド名 | 機能(戻り値) |
char charAt(int idx) | idxの位置にある文字 |
boolean endsWith(String str) | strで終わるか |
boolean startsWith(String str) | strで始まるか |
boolean equals(Object obj)※ boolean equalsIgnoreCase(Object obj) | objと同じ文字列か 〃(大文字小文字を区別せず) |
int length() | 文字列の長さ |
int indexOf(char c) int indexOf(String str) | 文字c/文字列strが最初に出現する位置 |
int lastIndexOf(char c) int lastIndexOf(String str) | 文字c/文字列strが最後に出現する位置 |
String toLowerCase() | 小文字に変換した文字列 |
String toUpperCase() | 大文字に変換した文字列 |
右の状況の場合、
str1 == str2 は false だが、 str1.equals(str2) は true | ![]() |
メソッド名 | 機能(戻り値) |
StringBuffer append(char c) StringBuffer append(String str) | 文字c/文字列strを追加 |
StringBuffer deleteCharAt(int idx) | idxの位置の文字を削除 |
StringBuffer insert(int off, char c) StringBuffer insert(int off, String str) | offの位置に文字c/文字列strを挿入 |
int length() | 文字列の長さ |
String toString() | Stringクラスのオブジェクトに変換 |
ラッパークラス | 基本型 | |
Character | char | 2バイト文字(\u0000〜\uffff) |
Byte | byte | 1バイト整数(-128〜127) |
Short | short | 2バイト整数(-32,768〜32,767) |
Integer | int | 4バイト整数(-2,147,483,648〜2,147,483,647) |
Long | long | 8バイト整数(-263〜263-1) |
Float | float | 単精度浮動小数点数(32ビット) |
Double | double | 倍精度浮動小数点数(64ビット) |
メソッド名 | 機能(戻り値) | 備考 |
static int parseInt(String s) | 文字列sを表す整数 | Integer.parseInt("123") |
static String toString(int i) | 整数iを表す文字列 | Integer.toString(123) |
メソッド名 | 機能(戻り値) | 備考 |
static float parseFloat(String s) | 文字列sを表す実数 | Float.parseFloat("12.3") |
static String toString(float a) | 実数aを表す文字列 | Float.toString(12.3) |
メソッド名 | 機能(戻り値) | 備考 |
static double parseDouble(String s) | 文字列sを表す実数 | Double.parseDouble("12.3") |
static String toString(double a) | 実数aを表す文字列 | Double.toString(12.3) |
フィールド名 | 機能(戻り値) | 備考 |
public static final double E | 自然対数の底$e$ | 2.718281828459045 |
public static final double PI | 円周率$\pi$ | 3.141592653589793 |
メソッド名 | 機能(戻り値) | 備考 |
static int abs(int i) static double abs(double a) | 絶対値(absolute value) | $|\,a\,|$ long, float用もあり |
static int round(double a) static double rint(double a) | まるめ:四捨五入(round) | |
static double ceil(double a) | 切り上げ(ceiling) | $\lceil{\,a\,}\rceil$ |
static double floor(double a) | 切り捨て(floor) | $\lfloor{\,a\,}\rfloor$ |
static int min(int a, int b) static double min(double a, double b) | 最小値(minimum) | long, float用もあり |
static int max(int a, int b) static double max(double a, double b) | 最大値(maximum) | long, float用もあり |
static double sqrt(double a) | 平方根(square root) | $\sqrt{a\,}$ |
static double hypot(double x, double y) | 斜辺(hypotenuse) | $\sqrt{x^2+y^2}$ |
static double pow(double a, double b) | べき乗(power) | $a^b$ |
static double exp(double a) | 指数(exponential) | $e^a$ |
static double log(double a) static double log10(double a) | 対数(logarithm) | $\log_ea$ $\log_{10}a$ |
static double sin(double a) static double cos(double a) static double tan(double a) | 三角関数:正弦、余弦、正接 (sine, cosine, tangent) | |
static double random() | [0, 1) の乱数(random number) | 乱数について |
final class Suit extends java.lang.Enum
{
static final Suit SPADES;
static final Suit CLUBS;
static final Suit DIAMONDS;
static final Suit HEARTS;
static final Suit[] values() {・・・}
static final Suit valueOf(String s) {・・・}
static {・・・}
}
のようなイメージのクラスファイル(Suit.class)が自動的に生成される
列挙型[] values() | 列挙された値を列挙型の配列で返す |
列挙型 valuesOf(String s) | sを列挙型で返す |
Suit suit = Suit.DIAMONDS;
switch(suit)
{
case SPADE:
case CLUB:
・・・
}
// 定数に整数値を強制的に割り当てる方法
enum Suit
{
SPADES(0), HEARTS(1), CLUBS(2), DIAMONDS(3); // コンストラクタ呼び出し
private int a;
Suit(int a) { this.a = a; }
public int value() { return this.a; }
}
フィールド名 | 内容 |
SECOND | 秒(0〜59) |
MINUTE | 分(0〜59) |
HOUR | 時(0〜11) |
HOUR_OF_DAY | 時(0〜23) |
DAY_OF_MONTH | 日付(1〜31) |
MONTH | 月(0〜11)1月が0 |
YEAR | 年(西暦) |
DAY_OF_WEEK | 曜日(1〜7)日曜日が1 |
DAY_OF_YEAR | 年始からの通算日数(1〜365)1月1日が1 |
↑static intでCalendarから継承している |
メソッド名 | 機能(戻り値) |
void set(int field, int value) | フィールドに値を設定 |
int get(int field) | フィールドから値を取得 |
void clear(int field) | フィールドの値を削除 |
boolean isSet(int field) | フィールドに値があるか |
↑ここに挙げたものはCalendarから継承している |
メソッド名 | 機能(戻り値) |
boolean add(E e) | 最後の要素の次に要素を追加 |
void add(int idx, E e) | idx番目に要素を挿入(元のidx番目以降の要素は後ろにずれる) |
void clear() | 全ての要素を削除 |
E get(int idx) | idx番目の要素を返す |
E remove(int idx) | idx番目の要素を削除して返す(後続の要素は前にずれる) |
E set(int idx, E e) | idx番目の要素と置換して元の要素を返す |
int size() | 要素数を返す |
Object[] toArray() | ArrayListを配列変換して返す |
既存のクラスを利用して新しいクラスを作成することができる。 このように新しいクラスを作成することをクラスを拡張(extends)するといい、 元になる既存クラスをスーパークラス(superclass)、新しいクラスをサブクラス(subclass)と呼ぶ。 新しいクラスは既存クラスのメンバーを受け継ぐ(継承:inheritance)ので、 新しく必要となる性質や機能だけをメンバーとして追加すればよい。 一つのスーパークラスから複数のサブクラスを作成したり、サブクラスをさらに拡張して新しいクラスを作成することもできる。 但し、2つ以上のスーパークラスを持つ多重継承(multiple inheritance)は許されていない。
[修飾子] class サブクラス名 extends スーパークラス名
{
サブクラスに新たに追加するメンバー
サブクラスのコンストラクタ(引数リスト)
{
}
}
|
![]() |
修飾子(modifier) | 機能 | 備考 |
private | クラス外からアクセスできない サブクラスからもアクセスできない! | フィールドに指定することが多い |
なし | 同じパッケージに含まれるクラス内からアクセスできる | (パッケージアクセス) |
protected | サブクラスからはアクセスできる! | スーパークラスのフィールドに指定することが多い |
public | クラス外からアクセスできる | メソッドに指定することが多い |
修飾子(modifier) | 同一クラス | 同一パッケージ | サブクラス | すべて |
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | × |
なし | ○ | ○ | × | × |
private | ○ | × | × | × |
スーパークラスと全く同じメソッド名・引数の数・型をもつメソッドを定義することもでき、 スーパークラスのメソッドに代わって機能する。 戻り値の型はスーパークラスのものと同じかそのサブクラスでなければならない。
finalがつく対象 | 機能(finalが付くと...) | 備考 |
クラス | クラスを拡張(継承)できなくなる | |
メソッド | サブクラスでオーバーライドできなくなる | |
フィールド | 値を変更できなくなる | 定数(constant) |
メソッド名 | 機能(戻り値) |
protected Object clone() | オブジェクトのコピー |
public boolean equals(Object obj) | 同じオブジェクトがどうか |
protected void finalize() | このオブジェクトへの参照が無くなった時にガーベッジコレクタに呼び出される |
public final Class<?> getClass() | オブジェクトのクラス情報(Classクラスのオブジェクト) |
public String toString() | オブジェクトをテキストで表現する文字列 |