Java入門

例外(3)

例外処理は有効な機能ですが、使い方を誤ると発見しにくいバグを混入させてしまいます。 今回は例外処理(1)(2)で説明できなかった幾つかの機能と実装上の注意点を説明します。 finallyブロック try/catch構文にはfinallyブロックを追加する事ができます。 tr…

例外(2)

例外は呼び出し元に戻り値として返されるのではなく、throwされ上位メソッドに伝播されるものでした。 どんな場合でもJava仮想マシン(JVM)に例外処理を任せる事が許されるならば良いのですが、どんな例外でも発生したならばアプリケーションを終了してしま…

例外(1)

例外(Exception)はJavaの重要機能の1つですが、適切な使い方をしなければ大きなバグともなり得ます。 特に初学者にとって例外は解りにくく入門書でも深く触れていない為、よく解らないままにされる傾向にあります。 しかし、業務でJavaを扱うのであれば例外…

java.lang.System

java.lang.Systemクラスはローレベルな入出力などを提供するユーティリティクラスです。 今までオマジナイとして使用してきたprintln()メソッドもSystemクラスから使用してきました。Systemクラスはインスタンスを作ることができず、メソッドは全てクラスメ…

java.util.Iterator

java.util.IteratorはArrayListなどのコレクションに対して繰り返し処理を行う為のインターフェイスです。 Iteratorを使うことで、様々な集合に対する繰り返し処理を共通のインターフェイスで実装できます。ArrayListに対してiterator()メソッドを呼び出すと…

java.util.ArrayList

ArrayListクラスはJavaで配列を扱う為のクラスです。 配列には任意のオブジェクトを含める事が可能で、ランダムアクセスや順次アクセスなどの様々な機能を提供します。 ArrayListクラスの最も便利な点の1つは、配列のサイズが自動的に拡張されていく為、作…

java.util.Date

Dateクラスは日時を表す基本的なクラスで、時間をミリ秒の精度で表す事ができます。 かつてはDateクラスで年月日などを解釈する機能を持っていましたが、現在はそれらの機能はCalendarクラスを使用することになっています。Dateクラスで持つlong型の値はエポ…

java.lang.StringBuffer

StringBufferクラスは可変文字列を扱うクラスで、様々な情報を元に文字列(String)を生成する時に使われます。 コンストラクタ StringBufferクラスの主なコンストラクタは次の通りです。 コンストラクタ 概要 StringBuffer() 文字を持たず、初期容量が 16 …

java.lang.String

Javaには文字列を扱うクラスが幾つかありますが、Stringクラスはその中でも最も基本的なクラスです。 アプリケーションを作成する場合の使用頻度も最も高いことも間違いありません。 Stringクラスは基本ですから充分に理解しておく必要があります。 Unicode…

クラスライブラリ

Javaにはクラスライブラリとは様々な機能を持ったプログラム(クラス)をまとめたクラスライブラリが用意されています。 文字列操作・ファイル入出力・GUIなど多肢におよび、その全容を理解することは到底できません。 それらは必要な時に見つけて使用するこ…

クラスメソッドとクラス変数

これまで、メソッドと変数は全てクラスに属し、インスタンスを生成してから使用するものと学んできました。 クラスメソッドとクラス変数はインスタンスを生成せずに使うことができます。 クラスメソッド クラスメソッドはstaticメソッド(静的メソッド)とも…

インターフェイス

抽象クラスは抽象メソッドと呼ばれる定義だけのメソッド(機能)を定義することが可能なクラスでした。 インターフェイスはこの抽象クラスをさらに抽象化し、publicな抽象メソッドのみで構成された抽象クラスと言えます。 また、インスタンスを作ることがで…

抽象クラス

これまで継承を使ってクラスを拡張していくことを学んできましたが、逆に考えれば共通する項目(インスタンス変数、メソッド)を抽出して行けば効率よくクラスを構成できると考える事ができます。 本・CDなど幾つかの種類の商品を扱うオンライン ストアを構…

コンストラクタ

コンストラクタとはクラスのインスタンスが生成される時に呼び出される特殊なメソッドでした。 JVMはコンストラクタが呼び出されるタイミングでヒープ領域にインスタンスを生成します。 この時、メソッド領域にあるクラス情報からどんなインスタンス変数があ…

オーバーロード

メソッドを定義していくと引数は異なりますが似たようなメソッドを作りたい状況が発生します。 プログラミング言語によっては同じ名前のメソッドを定義することは禁止されていたり推奨されていないこともあります。 ですが、Javaでは引数や戻り値が異なれば…

メソッド

これまで何気なく使ってきたメソッドに関して詳しく見ていきましょう。 関数 関数とは元は数学の用語であり、Wikipediaによれば次のように説明されています。 関数(かんすう、function)とは、ある変数に依存して決まる値あるいはその対応を表す式のことで…

オーバーライド

機能を拡張することはクラスを継承することで実現できましたが、既存のメソッドの振る舞いを変更したい場合もあります。 そのような時、メソッドのオーバーライド機能を使うことでスーパークラス(基底クラス)に変更を加えずにメソッドの振る舞いを変更する…

Javaは型(type)を重視した言語仕様となっています。 これは様々なクラスのインスタンスを上手に扱う為に必要な機能です。 変数の型 変数の型(type)はデータの種類を表しました。 例えば本(Book)というクラスがあるならば本(Book)という型の変数を定…

継承

継承はあるクラスを拡張して新たなクラスを作る機能です。 継承は主に既存クラスの拡張や変更などに用いられる機能ですが、オブジェクト指向プログラミングを学ぶ上で最も基本的な概念となります。クラスFooがある時、継承を利用してクラスBarを作るにはexte…

アクセスレベル

Javaの重要な仕組みの1つにアクセスレベルがあります。 アクセスレベルとは各クラスの独立性を高め再利用性と保守性を高める為に情報を可能な限りブラックボックス化する仕組みです。 メモリアクセスの功罪 C言語では常にメモリ上のデータを意識していまし…

JVMのメモリ管理

ここで頭の中を整理する為にJVMのメモリ構造に関して触れておきます。 JVMの管理するメモリ領域には大きく2つの区画があり、それぞれスタック・ヒープエリアと呼ばれます。 ヒープ ヒープエリアは主にインスタンスを管理するメモリ領域です。 ヒープエリア…

制御構文

全てのアルゴリズムは可読性はともかくとしても条件分岐文と繰り返し文を使うことで実装できます。 Javaでは条件分岐文としてはif文とswitch文を、繰り返し文としてはfor文とwhile文をサポートしています。ここでは今後の学習に必要な範囲で解説します。 こ…

プリミティブ型変数

C言語をはじめとするほとんどの言語で整数の四則演算や比較演算を行うことができるように、Javaでも整数等の四則演算や比較演算を行うことができます。 プリミティブ型 プリミティブ型(基本型)とは、整数型(int)や浮動小数型(float)などのように基本的な…

Javaの文法

それではJavaによるプログラミングを勉強していきますが、幾つかの基礎知識を学ぶところから始めます。 予約語 どのようなプログラミング言語でも予約語と呼ばれる特別な単語があります。 予約語とはシステムで予約されている単語のことで、言語仕様の中で特…

参照型変数

Javaでは全てのデータやメソッドはクラスに属し、原則としてインスタンスを生成して利用すると学びました。 では、インスタンスは作成された後はどうなるのでしょう? 参照 もし、同じメソッドを何度も使いたい場合でもその都度インスタンスを生成しなければ…

インスタンス

C言語ではmain関数ありきで、プログラムはmain関数から始まり、main関数の中で変数を宣言しながら様々な関数を呼び出しました。 つまり、プログラムは関数を中心に構成されていたと言えます。これに対してJavaは、クラスを中心にプログラムを構成します。 全…

クラス

Javaなどのオブジェクト指向言語で最も基本的な概念はクラスです。 これを一言で説明するのは難しいので、まずはクラスという概念が生まれた経緯から紐解いていきます。 クラス クラスはJavaを初めとするオブジェクト指向言語で、プログラムを構成する最小の…

Javaの特徴

Javaには様々な特徴がありますが、オブジェクト指向とは…と始めてしまうと解りにくく勉強のモチベーションも続きません。 ここでは、これから学んでいく上で前提となる特徴だけを説明します。 Java仮想マシン C言語ではコンパイラにより実行可能なプログラム…

開発環境

今後の講座は統合開発環境Eclipse(V3.2)をベースに行います。 入門者向けの講座の場合、開発環境を使ってはならないような風潮もありますが、実際のプロジェクトに投入されたときにEclipseを使えなければ話にならないのも事実です。 よって、この講座ではE…