Java言語のお部屋

プログラミング言語 Java を使ってプログラムを書いてみよう。
学習進捗状況の悪さがわかる(ぉぃ)書きかけの暫定版。
ふみゅーう。

ぷれびゅーう

SUNマイクロシステムズを中心に開発を進められているプログラミング言語Javaは、コンピュータ・ネットワークにあるオブジェクト環境をプログラミングすることができます。
Javaは多くのプログラマに親しみやすいよう、ほんのすこしだけC/C++言語に似たスタイルと、C言語の特徴ともいえるポインタを使わない仕様をしております。
また、Javaはインタプリタ言語で、仕様を満たした実行環境が実装されていれば機種に依存しないアプリケーションを開発し提供できるのが大きな特徴でしょう。
そんなJavaを使って、プログラミングをしてみようということです。

このテキストでは、当面ホストをWindowsとする環境でのプログラミングを中心にしております。

内容・目次

入手方法

雑誌の付録についていることも多いのでそれらを利用してインストールするか、本家Developer Resources for Java Technologyなどからダウンロードできる。

2001年6月6日現在のところ、SDKJ2SE™ 1.3.1 のバージョンが入手できます。

2008年9月4日現在のところ、開発環境はのバージョンが入手できます。 またソースコードは一般のテキストエディタで編集できるほかNetBeans(NetBeans 日本語サイト)という統合開発環境も利用できます。

一番簡単なプログラムをかいてみます

参考文献のリストにある3日で解かるJava[第2版] -例題学習方式-を参考にして、一番簡単なプログラムを書いてみます。

public class hello {
  public static void main(String[] args) {
    System.out.println("Hey! noddy.");
  }
}

じつに、簡単なものである。これをDOSプロムプトからjavacを使ってバイトコンパイルする。
しかし、バイトコンパイルはエラーが出てうまくできなかったです。

hey.java:1: クラス hello は public であり、ファイル hello.java で宣言しなければ
なりません。
public class hello {
       ^
エラー 1 個

本のページとディスプレーを代わる代わる睨めっこしたけどタイプミスはないようです。
よくわからないものですから、本家Java のサイトからチュートリアルを探してきてサンプルを眺めてみたら、1行目のpublicがいけないようでした。なんとコッチのほうにはpublicは書かれていなかったのです。ということで以下ように修正したら、無事バイトコンパイルが終りました。

class hello {
  public static void main(String[] args) {
    System.out.println("Hey! noddy.");
  }
}

バイトコンパイルが終ったところで、実際に走らしてみます。javaというインタプリタコマンドをつかってみたが、またまたエラーが、でてしまいました。
Exception in thread "main" java.lang.NoClassDefFoundError: hey/class
だって。
ドキュメントをよんだけど、解決方法がよくわからない。そこでためしに、インターネットエクスプローラについてくるマイクロソフト版のjviewというJavaインタプリタを試してみたら、あっけなくうごいた。こうなると、環境の構築がまずかったか、SUNのインタープリタにご愛嬌があるのかどうかということも考えられなくもないが、調べるのも億劫だったりしてこのまま放っておくことにしました。(一応動きますから)

クラスはプログラムの集まり

クラスはプログラムの集まりのようなものです。

Java言語でのクラスを定義するのは単純で以下のようにします。

class クラスの名前 {
    . . .
}

例えば、会計処理で請求書を作る仕事をするとします。
請求書という用紙が必要になりますでしょう。請求書の用紙は物であります。
請求書の用紙には、取引先や品名や個数、単価、合計などの情報を記載して発行します。 ここで、商品や個数など請求書に書かれる請求書の内容をインスタンスと呼びそれを記憶しておく変数のことをインスタンス変数と呼んでます。
請求書の帳面を開くとか、記載するとか、切り離して発行するなどといった行動をメソッドと呼んでます。
クラスはこのようにメソッドやインスタンスを一つのまとまり(オブジェクト)として表現いたします。

たとえばこのような具合に。

class Seikyu {
    // 請求書のインスタンス
    String Hinmei;
    int tanka;
    int kosu;
    int kakaku;
    int goukei;
    // 請求書のメソッド
    public static int Hiraku(int page);
    public static int Hakkou();
    public static void kisai();
    . . .
}

Java言語のプログラムはmainメソッドから

Java言語のアプリケーションは、実行したいクラスにあるmainメソッドから、実行されます。

変数を使ってみます

Javaの変数はC言語みたいな変数の型を持っています。
整数型の変数を使うのならば、int a;のように記述します。
以下は変数を使ったプログラムの例です。

class Hensu1{
  public static void main(String []args){
    int a,b,gokei; // 整数型の変数を宣言しています
    a=4;           // 変数aの値を4にします
    b=7;           // 変数bの値を7にします
    gokei=a+b;     // 変数gokeiの値を、変数aと変数bを加算した値にします
    System.out.println(gokei);  // 変数goheiの値を印字します
  }
}
変数の表現範囲
種類 値の範囲 確保されるメモリの長さ
最小最大
整数 byte -128127 8 BIT byte a;
a=2;
short -3276832767 16 BIT short b;
b=4;
int -21474836482147483647 32 BIT int c;
c=8;
long -263263-1 64 BIT long g;
g=40;
実数 float ±1.40239846E-45±3.40282347E+38 32 BIT float f;
f=4.5;
double ±4.94065645841246544E-324±1.79769313486231570E+308 64 BIT double d;
d=3.1415926;
論理値 boolean true, false の2値 ? BIT boolen flag;
flag = ture;
flag = false;
文字 char Unicode 文字16ビット 16 BIT char moji;
moji = 'a'

付録

参考になりそうなサイトのリンク集

参考になりそうな書籍

3日で解かるJava[第2版] -例題学習方式-
桑原 恒夫(くわはら つねお) 2000年四月 共立出版
例題は、教室の黒板に書かれた説明のごとく単純明解で、アンチョコ的というかんじ。
第2版はJava2 (JDK1.2)を対象に書きなおしたもの。
サンプル・プログラムのリストには(バージョンの陳腐化なども含めて)単純な誤りがいくつかあってもそこはご愛嬌でしょう。
オブジェクト指向のためのJava入門
増田 英孝(ますだ ひでたか) 2000年9月10日 東京電機大学出版局
およそ160ページ弱の薄さに、オブジェクト指向の説明がしっかり書かれています。 なによりJavaのサンプルソースもついているので、オブジェクト指向設計からコーディングへの関係について見習うとこともあると思います。

用語

この文章に使われている用語や表現の補足

Java
英和辞典なんかを引用すると「ジャワ島のことである」とか「コーヒー」などとでてきますが、ここでは、SUN Micro systemsが開発しているオブジェクト指向のプログラミング言語のことであります。
メソッド
英語で書くとmethodで、辞書には方法とか筋道、行動などと出てきます。
オブジェクト指向の概念では、オブジェクトそのものだけでは動作しません。
よって、オブジェクトを用いるためには命令します。
たとえば、X68000とかOS-9はオブジェクトであり、それだけでは用いることができません。 しかし、「x68000の電源を投入する」とか「X68000でOS-9を起動させる」などのように、命令を伝えるとオブジェクトを用いることができます。
Java言語やC++言語ではクラスの中にある関数として表現されます。
クラス
ここでいうクラスはC++なんかのオブジェクト指向でいうクラスのことで、事象や実体といったプログラムの集まり。
オブジェクト指向
英和辞書などによると語源は oop subject ということらしい。
オブジェクト指向の設計に関係する本をみると「隠蔽すること」などとかいてある。この手の本を読んでいると、肝心な説明が隠蔽されているのではないだろうかと思えてくる。
C/C++言語でおもうところに、なりふりかまわずデータのポインタをいじると後でひどい目にあってしまうことから、スコープを限定してしまおうということらしい。まさに、「触らぬ神祟り無し」である。
オブジェクト
オブジェクト指向の技術を理解するのに、鍵となる概念の一つでしょう。
実世界のオブジェクトは、あなたのX68000とか、あなたの財布とか、あなたの弁当などといったものがあります。
実世界のオブジェクトには、状態を表す属性と行動をもっています。たとえば、「弁当を食べる」とか「弁当箱の蓋(包み)を開ける」という行動と「弁当の中身は海苔弁である」とか「弁当を食べたら、弁当箱の中は空になった」という状態をもっているといった具合です。
オブジェクトの状態をインスタンス変数に保持してあり、行動をメソッドというプログラムに書いておいて、それを実行するということになるでしょう。
インスタンス
オブジェクトの状態を保持しておく。たとえば、あなたのX68000に搭載されているメモリは8メガバイトであるとか、2ギガバイトのハードディスクが接続されているといった情報。
継承
継承とは、X68000やIBM-PCといったオブジェクトは、パソコンであるのでパソコンというスーパークラスからの継承されます。あなたのX68000やIBM-PCといったパソコンに搭載されているメモリやプロセッサなどの部品が異なる状態となっていることでしょう。それ故に継承されたオブジェクトの状態はオーバーライドされて機能するようになります。

著作権 大槻昌弥 © 2000年, 2001年
無断転載厳禁。

ご意見ご要望は連絡用フォームから送信するようにお願いします。
なお、送信できる文章はiso2022-jpのプレーンテキストで理解できる内容のみです。
また、Webサイトの内容に関するお問い合わせは、整理の都合で出来るだけURIを明記するようにお願いします。