ホームページへ戻る
 

上へ戻る
 

       JAVA入門  その1       H.Y    2002.3.17

目次

1。Java の概要
1ー1。Java とは
1ー2。Java のプログラミング
1)実行環境 Java Runtime Environment
2)開発環境 Java Development Kit( Java 2 SDK)
(1)Java 2 Standard Edition(Java 2 SE)
(2)Java 2 Enterprise Edition(Java 2 EE)
(3)Java 2 Micro Editon (Java 2 ME)
1ー3。表示の統一 Swing
2。Java プログラム
2ー1。アプレット
2ー2。スタンドアローン・アプリケーション
2ー3。スタンドアローン・アプリケーションの作成例 HelloWorld.java
2ー4。アプレットの作成例
2ー5。コンパイル
1)パッケージのインポート
2)パッケージの宣言
3)パッケージの作成例 1
4)パッケージの作成例 2
5)パッケージの作成例 3
2ー8。記述の決まり
1)名前
2)コメント
3)変数
4)変数の宣言と初期化
5)配列 複合データ記憶域
6)代入演算子
7)算術演算子
8)関係演算子
9)論理演算子
10)ビットシフト演算子
11)ビット代入演算子
12)型変換
13)制御文 C 言語と同じ
3。
============================================================================================

1。Java の概要
1ー1。Java とは
Java はプログラム言語である。 Java 言語で記述されたソースコードは中間言語のバイトコー
ドに翻訳される。このバイトコードは全てのJavaバーチャルマシーンに共通で、どのプラットホ
ームでも動作できる。 この為に、Java は Write Once ,Run Enywhere と言われている。
1ー2。Java のプログラミング
Java の開発元である、Sum Microsystems社から,Java の開発環境として次の2つが提供され
ている。
1)実行環境 Java Runtime Environment
Java プログラムを動作させるためのツール群や、JVM(Java Virtural Machine),クラスライ
ブラリー等から構成される環境。
VM を使用目的別にわけると次もものがある。
(1)JVM (HotSpot JIT Just In Time )
(2)KVM
PDA,携帯電話、家電などの容量の小さいプラットホーム用の VM。必要最小限の機能を
提供する。
(3)CARD VM
IC カード等に使用する。
2)開発環境 Java Development Kit( Java 2 SDK)
Java プログラムを開発するための、コンパイラ、デバッガ等とともに、動作させるための
ツール群、JVM、クラスライブラリとサンプルコードが含まれている。
Java 2 の動作環境により分けると、次のものがある。
(1)Java 2 Standard Edition(Java 2 SE)
主にパソコン上で動作することを前提にしており、JVM 上でJavaプログラムや
アプレットが動作する環境。
(2)Java 2 Enterprise Edition(Java 2 EE)
主にサーバ内で動作するJavaの開発を目的にしている。Java 2 SE の内容の他に、
サーブレット(Servlet),Java Server Page(JSP),Enter Prise Java Beans(EJB)の
機能がある。Hot Spot という、サーバサイドのJava の動作にてきした JVM が用意
されている。
(3)Java 2 Micro Editon (Java 2 ME)
組込み系の Java環境。携帯電話や PDA等の少ないリソース上で動作させるため、
環境毎に最適となる APIセットを profile と言うかたちでまとめている。
実行エンジンは KVM (Kilobytes VM)である。他の Edition と互換性がない部分がある
が、Java 言語の基本的な部分では互換性が保たれている。
1ー3。表示の統一 Swing
Java には GUI のプラットホーム毎に用意されている、GUI 部品を持って来て、GUI を実現す
ることができる。このツールが AWT(Abstract Window Toolkit)である。この AWT で各プラット
ホーム毎の外観をもった GUI が OSに依存せずに実現できる。
しかし、AWT ではプラットホーム毎に外観が異る。またこの GUI部品の機能が統一されていな
い。そこで、プラットホーム毎に同じ外観で同じ機能を持たせるためのインターフェイスとして
Swing が登場した。

2。Java プログラム
2ー1。アプレット
Web ブラウザ上に組み込まれた JVM を使って動作させるプログラムのこと。
アプレット・ソースコードは javac でコンパイルしてバイトコードにして置く。
html ファイルから Java アプレットコードを読み込み実行する。
2ー2。スタンドアローン・アプリケーション
スタンドアローンの JVM で動作させる Java アプリケーションプログラムのこと。
Java で記述されたソースコードを javac でコンパイルしたバイトコードを、JVM が実行する。

2ー3。スタンドアローン・アプリケーションの作成例 HelloWorld.java
public class のクラス名と ファイル名は、同じ名前を使うこと。

----------- HelloWorld.java ----------------------------------------
public class HelloWorld{
static public void main(String args[]){
System.out.println("こんにちは みなさん! HelloWorld.java です。");
}
}
--------------------------------------------------------------------
[実行方法]
(1) javac HelloWorld.java //ソースコードのコンパイル
(2) java HelloWorld //実行
2ー4。アプレットの作成例
public class のクラス名と ファイル名は、同じ名前を使うこと。

--------- HelloApplet.java -------------------------------
import java.applet.Applet;
import java.awt.*;

public class HelloApplet extend Applet{
public void paint(Graphic g){
g.drawString("こんにちは Java アプレットです。!",0 , 20);
}
}
--------- HelloApplet.html --------------------
<html>
<title>HelloApplet</title>
<body>
<h3>こんにちは アプレットでーす!</h3>
<hr>
<applet code="HelloApplet" width="200" height="200">
</applet>
</body>
</html>
----------------------------------------------------
[実行方法]
(1) javac HelloApplet.java
(2) appletviewer HelloApplet.html
2ー5。少し実用的なアプレットの実演
(1) mkdir applet
(2) ftp で このディレクトリに サンプルファイルを全てコピーする。
(3) appletviewer applet/Origami.html
(4) appletviewer applet/sample.html
2ー6。コンパイル
javac の主なオプション
(1) -classpath <classpath>
ユーザークラスパスを設定し、CLASSPATH を上書きする。
デフォルトのユーザークラスパスは カレントディレクトリである。
-soucepath オプションがない場合は、ソースファイルもユーザークラスパス上で
検索される。
(2) -d <directory>
クラスファイルを保存するディレクトリを指定する。
作成した *.class ファイルは 指定したディレクトリに保存される。
(3) -sourcepath <sourcepath>
ソースコードパスを指定する。
2ー7。Java パッケージ(package)とクラス(class)
Java プログラムはクラスを基本として作成される。このクラスは膨大な数になる(数千)ので
[パッケージ]で管理している。このパッケージとは、クラスやインターフェイスの集まりのこと
である。Java のさまざまなクラスは、このパッケージで階層的に管理されている。
Object ,Math, String クラスは java.lang パッケージなので、改めてインポートする必要は
ない。 代表的な、パッケージとして、java.lang, java.io, java.net, java.util 等がある。
ファイルシステム上では、パッケージとディレクトリは 1 : 1 の関係にある。
1)パッケージのインポート
プログラム中でパッケージ内のクラスを使用するには、そのパッケージをインポートする。
デフォルトでは java.lang パッケージがインポートされている。
インポートするには import キイワードを使用し、次の方法で実行する。
(1) import <パッケージ名>
import java.io.*;
java.io パッケージ以下のクラスは全てインポートされ、使用することが出来る。
(2) import <クラスへのパス>
import java.io.FIle;
java.io.File クラスのみがインポートされる。
(3) サブパッケージ
パッケージのインポートはサブパッケージまでは、取り込まれないので、それぞれインポー
トする必要がある。
[例]
import java.awt.*;
import java.awt.color; //java.awt のサブパッケージ
import java.awt.event; //java.awt のサブパッケージ
2)パッケージの宣言
パッケージは自分で作成することが出来る。
(1)パッケージの宣言は、プログラムの先頭で package キイワードで行う。
(2)パッケージは 1 つしか宣言できなう。
(3)パッケージ名の付け方
アルファベット、 数字、 _ , $ が使える。
(4)パッケージは階層構造が取れる。
[例] package myPackage.toos.etc; //etc までがパッケージ名
3)パッケージの作成例 1
---------- printer.java ------------------------------------------
package printer;

public class printer{
public void print(){
System.out.println("JABA からこんにちは! print class のテストです。");
}
}
----------- PrintClass.java --------------------------------------

class PrintClass{
public static void main(String[] args){
(new printer()).print();
}
}
--------------------------------------------------------------------
[実行方法]
(1) javac printer.java //パッケージクラス printer.class が作成される
(2) javac PrintClass.java
(3) java PrintClass
4)パッケージの作成例 2
-------------- myPackage/PackageTest1.java --------------------------
package myPackage;

class PackageTest1 {
public static void main(String args[]){
packA objA = new packA();
objA.ShowMsg();

packB objB = new packB();
objB.ShowMsg();
}
}
------------- myPackaged/packA.java ----------------------------------
package myPackage;

class packA {
void ShowMsg() {
system.out.println("パッケージ A からのメッセージでっせ。");
}
}
j------------- myPackage/packB.java ----------------------------------
package myPackage;

class packB {
void ShowMsg() {
system.out.println("Package B からのメッセージでおます。");
}
}
----------------------------------------------------------------------
[実行方法]
(1) mkdir myPackage
(2) ソースコードはすべて myPackage に置く
(3) javac myPackage/*.java //*.class も全て myPackage ディレクトリに置く
(4) java myPackage.PackageTest1
-------- 表示 --------------------
パッケージ A からのメッセージでっせ。
Package B からのメッセージでおます。
-----------------------------------
パッケージの構成は
myPackage-----PackageTest1.class
|___packA.class
|___packB.class



5)パッケージの作成例 3
-------------- myPackageTest2.java --------------------------
import myPackage; //import に変更

public class PackageTest1 {
public static void main(String args[]){
packA objA = new packA();
objA.ShowMsg();

packB objB = new packB();
objB.ShowMsg();
}
}
------------- myPackage\packA.java ----------------------------------
package myPackage;

public class packA { //public を追加
public void ShowMsg() { //public を追加
system.out.println("パッケージ A からのメッセージでっせ。");
}
}
j------------- myPackage\packB.java ----------------------------------
package myPackage;

public class packB { //public を追加
public void ShowMsg() { //public を追加
system.out.println("Package B からのメッセージでおます。");
}
}
----------------------------------------------------------------------
[実行方法]
(1) PackageTest2.jav はカレントディレクトリに置く
(2) packA.jav と packB.java は myPackage に置く
(3) javac PackageTest2.java
(4) javac myPackage/*.java
(5) java PackageTest2
-------- 表示 --------------------
パッケージ A からのメッセージでっせ。
Package B からのメッセージでおます。
---------------------------------
パッケージの構成は
myPackage----packA.class
|__packB.class
PackageTest2.class

2ー8。記述の決まり
Java プログラムの記述の決まりの主なもの。
1)名前
(1)大文字と小文字は区別される。
(2)次の4種が使える
アルファベット
数字
_ (アンダースコア)
$
(3)先頭文字は次の3種た使える
アルファベット
$
_ (アンダースコア)
(4)java が予約している キーワードはつかえない。



(2)ステートメントの終りは [ ; ]を付ける。
(3)プログラムは main() メソッドから実行される。
2)コメント
(1) /* から */ まで
(2) // から行末まで
3)変数
1)変数の型 シンプルデータ型
OS により変数の型の長さが変わることはない。
(1)整数
byte 1バイト 符合付き整数 -128 ~ +127
short 2 -32768 ~ +32767
int 4 桁数最大 9.5
-2,147,483,648 ~ +2,147,483,647
long 8 桁数最大 19
-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807
(2)浮動小数点型
float 4バイト 小数点以下 6桁有効
負数: -3.402823e38 ~ -1.401298e-45
整数: 1.401298e-45 ~ 3.402823e38
double 8バイト 小数点以下 14桁有効
負数: -1.79769313486232e308 ~ -4.94065645841247e-324
整数: 4.9065645841247e-324 ~ 1.79769313486232e308
(3)文字型
char 2バイト
(4)ブーリアン型
boolean true/false
(5)添字 (即値 リテラル)
固定値(literal)をデータ型以外に代入するときは、添字をつける。
long l,L
float f,F
double d,D
(6)べき乗
1e3 // 1 * 10^3 = 1 * 10 * 10 * 10
1.23e-3 // 1.23 * 10^(-3) = 1.23 /(10 * 10 * 10)
(7) 8 進数、16 進数
8 進数 : 0123 // 1*2*8^2 + 2*8 + 3 = 147
16進数 : 0x93 // 16*9 + 3 = 147
(8)エスケープシーケンス
C 言語と同じ
\b : バックスペース
\n : 改行
\r : キャリッジリターン
\f : 改ページ
\t : タブ
\0 : ヌル値
\uxxxx : 16進数Unicode文字
4)変数の宣言と初期化
(1) int count, icount;
(2) int data = 0, data2 = 0;
(3)char ch = 'A';
(4) float fdata = 1.23f; //f は F でも良い
浮動小数点値のデフォルトは double である。
1.23 だと double 型 の固定値になる。
そこで float に代入するときは 明示的に F,f を付けて float 型にする。
(5) double data2 = 1.23;
(6) リテラル
5)配列 複合データ記憶域
(1)宣言と作成 new 演算子で作成する。
宣言の書式:
データ型 配列名[];
配列の割り当て:
配列名 = new データ型[配列数];
------ 例 ------------------
int idata[]; //宣言
idata = new int[100]; //作成(記憶領域の割り当て)

配列の宣言と割り当てを同時に実行
データ型 配列名[] = new データ型[配列数];
-------------- 例 -----------------
int idata[] = new int[100];
(2)配列の 宣言・生成・初期化 を同時にする方法
(a) int data[] = {1, 2, 3, 4, ......};
(b) int[] data = {1, 2, 3, 4, ......};
(c) int data[] = new int[]{ 1, 2, 3, .........};
(d) int[] data = new int[]{ 1, 2, 3, .........};
配列が作成されて、初期化されていない場合は Javaでは、デフォルトで 0 に初期化
される。また、文字列や文字も配列では ヌル(null)で初期化される。
(3)配列の要素数
配列の要素数の取得には、メンバ変数 length を用いる。(あとで説明するラップクラス
のメンバ変数)
------------- 例 --------------------------
public class MatrixTest4 {
public static void main(String argv[]){
int a[] = new int[5];

System.out.println("配列の要素数 = " + a.length);
}
}
(4)配列の代入
配列を他の配列に代入しても、値の代入では無く、参照のコピーである。
--------------- 例 MatrixTest5 -------------------------------
class MatrixTest5{
public static void main(String args[]){
int a[] = {0, 10, 20, 30, 40};
int m[];

m = a;
System.out.println("a[2] = " + a[2] + ", m[2] = " + m[2]);

m[2] = 100;
System.out.println("a[2] = " + a[2] + ", m[2] = " + m[2]);
}
}
-----------------------------------------------------------------
これをコンパイルして実行すると、
a[2] = 20, m[2] = 20
a[2] = 100, m[2] = 100 //a[2],m[2] 共に 100になる。
配列の要素を全てコピーするには、
for(i = 0;i < 5; i++)
m[i] = a[i];
を実行する。
------------------ MatrixTest6.java --------------
class MatrixTest6{
public static void main(String args[]){
int a[] = {0, 10, 20, 30, 40};
int m[] = new int[5];
int i;

//配列のコピー
for(i = 0; i < 5 ; i++){
m[i] = a[i];
}
for(i = 0; i < 5 ; i++)
System.out.print("a[" + i + "] = " + a[i] + ", ");
System.out.println("");

m[2] = 100;
for(i = 0; i < 5 ; i++)
System.out.print("m[" + i + "] = " + m[i] + ", ");
System.out.println("");
}
}
-------------------------------------------------
実行結果は
a[0] = 0, a[1] = 10, a[2] = 20, a[3] = 30, a[4] = 40,
m[0] = 0, m[1] = 10, m[2] = 100, m[3] = 30, m[4] = 40,
(5)配列の配列(多次元配列)
宣言:
データ型 配列名[][];
作成
配列名 = new データ型[配列数][配列数];
-------- 例 -------------
int m[];
m = new int[10][20];
-------------------------
宣言・作成を同時に実行
データ型 配列名 = new データ型[配列数][配列数];
--------------- 例 ----------------
int m = new int[10[20];
(6)多次元配列の初期化
データ型 配列名[][] = { { 値1、値2、.....},
.....
{ 値x1、値x2,....} };
---------------- 例 ---------------------------
int m[][] = { {1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11,12,13,14,15} };

(7)不規則な多次元配列
2 次元配列のそれぞれの行を、1 次元配列として扱い、これらの 1 次元配列をそれぞれ
別に作成する。
---------------- 例 array2.java -----------------------
public class array2{
public static void main(String[] args){
double array[][] = new double[5][];

array[0] = new double[100];
array[1] = new double[200];
array[2] = new double[300];
array[3] = new double[400];
array[4] = new double[500];

for(int i=0; i < array.length ; i++){
for(int j=0; j < array[i].length; j++){
array[i][j] = i;
}
System.out.print("array[" + i + "][0]=" + array[i][0] + " ");
System.out.println("長さ = " + array[i].length);
}
System.out.println("\n\n");
}
}
------------------------------------------------------
実行結果は
array[0][0]=0.0 長さ = 100
array[1][0]=1.0 長さ = 200
array[2][0]=2.0 長さ = 300
array[3][0]=3.0 長さ = 400
array[4][0]=4.0 長さ = 500
(8)配列の開放
配列名 = null;
----- 例 ------------
int m = new int[10];

m = null; //配列の開放
-------------------------
6)代入演算子
a = b; // a に b を代入
a += b; // a + b を a に代入
a -= b; // a - b を a に代入
a *= b; // a * b を a に代入
a /= b; // a / b を a に代入
a %= b;
7)算術演算子
a = b + c; // 加算
a = b - c; // 減算
a = b * c; //乗算
a = b / c; //除算
a = b % c; //剰余
8)関係演算子
a == b //a と b が等しい時に真
a != b //a と b が等しくないときに真
a > b // a が b より大きいときに真
a >= b // a が b より大きいか、等しい時に真
a < b // a が b より小さい時に真
a <= b // a が b より小さいか、等しいときに真
9)論理演算子
a & b // a と b の論理積(AND)
a | b // a と b の論理和(OR)
a ^ b // a と b の排他的論理和(XOR)
!a // a の否定(NOT)
a && b // ショートカット演算子 論理積。 a が真なら b も評価する。
a || b // ショートカット演算子 論理和。 a が真なら b は評価しない。
10)ビットシフト演算子
a >> n // a を符合を保持しながら、n ビット右にシフトする。
a >>> n // a を 0 埋めしながら、n ビット右にシフトする。
a << n // a を 0 埋めしながら、n ビット左にシフトする。
11)ビット代入演算子
a &= b // a & b を a に代入
a |= b // a | b を a に代入
a ^= b // a ^ b を a に代入
a >>= b // a >> b を a に代入
a >>>= b // a >>> b を a に代入
a <<= b // a << b を a に代入
12)型変換
--- 例 ----
int a;
double b;
c = a / b;
-----------
1)演算式での型の変換は、
(1)同じデータ型なら、そのデータ型になる。
(2)浮動小数点と整数では、浮動小数点が優先する。
(3)バイト数の大きいほうが優先する。
(4)char型、byte型,short型 は int型に変換される。
2)代入による型変換
代入演算子の左辺のデータ型に変換される。
3)キャスト演算子による型変換
[書式]
(データ型)値
(データ型)変数
[例]
byte b:
int i = 127;
b = (byte)i; // int型を byte型にキャスト

13)制御文 C 言語と同じ
(1) if else
(2) 三項演算子
条件式 ? 式1 : 式2
(3) switch case
(4) for
(5) while
(6) do while
(7) while do








5)String,StringBuffer クラス
文字列は String という独自のクラスになる。
new 演算子で作成する。
コンストラクターとメソッド

6)ラップクラス
基本データ型をオブジェクトとして扱うためにラップクラスが用意されて
いる。
各々にコンストラクターとメソッドがある。

3。オブジェクト指向