説明資料 - 静岡県立大学

平成25年度静岡県立大学公開講座
Javaで学ぶプログラミング基礎
第1回
第2回
第3回
第4回
JavaとJava仮想マシン
Java言語の概要
Javaプログラミングの基礎
コンソール・アプリケーション作成
Androidアプリケーション作成
Javaとは






Sun Microsystems によって開発された。
オブジェクト指向言語。
プラットホーム非依存。
一度ソースを書くと、UNIXでもWindowsでも動く。
文法は、CやC++から多くを引き継いでいる。
ライブラリも充実している。
ネットワークやセキュリティに配慮されている。
配布されているファイル


Javaのプログラムソース

Java実行環境(Java Runtime Environment; JRE)
Javaのプログラムを実行するのに必要。
自分の機種(WindowsとかLinuxとか)用が必要。
Windows用も無料で配布されています。
Java開発キット (Java Development Kit; JDK)
Javaの基本的なプログラムに必要。
自分の機種(WindowsとかLinuxとか)用が必要。
Windows用も無料で配布されています。
プラットホーム非依存
色んな環境で動かしたい!
テキストファイル。
public
public class
class Hello
Hello {{
public
public static
static void
void main(String[]
main(String[] args)
args) {{
System.out.println("Hello,
System.out.println("Hello, world!");
world!");

C言語の場合...
Windows用 UNIX用
それぞれの行が何を意味しているのかは、徐々に
やっていきます。
Windows
Linux
Javaの場合...
プログラムを書く
どれでも動く
それぞれ
用に書く
必要
}}
}}


プログラムを書く
その他
Java
Java
Java
実行環境 実行環境 実行環境
Windows
Linux
その他
C言語でのプログラム作成
①プログラムを書く
Windows用のソース
Linux用のソース
②コンパイルする
Windows用の
Cコンパイラ
Linux用の
Cコンパイラ
プログラマの領域
Windows用
実行ファイル
①プログラムを書く
②コンパイルする
Linux用
実行ファイル
実行
③実行する
Javaでのプログラム作成 その1
実行
Windows
プログラマの領域
③実行する
Linux
②コンパイルする
Windowsで
書いて
Linuxで実行
③実行する
とかもできる
Javaのプログラムのソース
Windows用の
Javaのコンパイラ
Linux用の
Javaのコンパイラ
Java仮想マシン用のバイトコード
Windows用の
Java実行環境上で
実行
Windows
Linux用の
Java実行環境上で
実行
Linux
Windows用の
Javaのコンパイラ
Linux用の
Javaのコンパイラ
Java仮想マシン用のバイトコード
Linux用の
Java実行環境上で
実行
Windows用の
Java実行環境上で
実行
Windows
Javaでのプログラム作成 その2
①プログラムを書く
Javaのプログラムのソース
Linux
Java仮想マシン




Java仮想マシンは、その名の Javaのプログラムのソース
通り、仮想の計算機。
Windows用
Linux用
Javaバイトコードは、Java仮
コンパイラ
コンパイラ
想マシン上で動作する。
Javaコンパイラは、バイトコー Java仮想マシン用の
バイトコード
ドを生成。
Windows用
Linux用
Java実行環境は、バイトコー
実行環境
実行環境
ドを、各プラットホーム用に翻
訳して実行。
Windows
Linux
コンパイルと実行 その1
コンパイルと実行
①プログラムを書く
Javaのプログラムのソース
 テキストエディタとかで書く。
Windows用
Linux用
 拡張子は .java。
コンパイラ
コンパイラ
つまり、test.java のように
なる。
Java仮想マシン用の
バイトコード
Windows用
実行環境
Windows
Linux用
実行環境
Linux
コンパイルと実行 その2
コンパイルと実行 その3
Javaのプログラムのソース
②コンパイル
Windows用
Linux用
 コンソールで次のようにする
javac
javac ファイル名
ファイル名
コンパイラ
コンパイラ
test.java をコンパイルしたい Java仮想マシン用の
バイトコード
なら、
javac
javac test.java
test.java

Windows用
実行環境
拡張子が .class のファイルが
できる。
Windows
Javaのプログラムのソース
③実行
Windows用
Linux用
 コンソールで次のようにする。
コンパイラ
java
java 拡張子無しのファイル名
拡張子無しのファイル名

Linux用
実行環境
test.class を実行したいなら、
java
java test
test
Linux
コンパイラ
Java仮想マシン用の
バイトコード
Windows用
実行環境
Windows
Linux用
実行環境
Linux
演習1の内容

演習1:コンパイルと実行
Hello World


ソースを置く場所の作成
1.
デスクトップで右クリックし、コンテクストメニューで
[新規作成]→[フォルダ] とし、Java というフォルダを
作成。
サンプルプログラム Hello World を入力し、コンパイ
ル、実行を行います。
どのようなファイルができるか、確認していきます。
流れ:
1. ファイルをおくフォルダの作成
2. テキストエディタで hello.java を入力、作成
3. コマンドプロンプト上で、hello.javaをコンパイル
4. コマンドプロンプト上で、hello を実行
コマンドプロンプトの立ち上げ
1.
2.
3.
左下のスタートボタン
を押す。
ファイルの検索でcmdと入力。出てきたcmdを実行。
 黒いコマンドプロンプトが立ち上がります。
コマンドプロンプト上で、
cd
cd Desktop¥Java
Desktop¥Java
と入力してEnterキーを押す。
 プロンプトが
c:¥Users¥ユーザー名¥Desktop¥Java
となっているか確認しましょう。
ソースの記述
1.
2.
テキストエディタでサンプルプログラム1を書きます。
 実習室には、テキストエディタとしてサクラエディタ
がインストールされています。
Hello.java というファイル名で保存します。
 Hello.txtではないので注意しましょう。
public
public class
class Hello
Hello {{
public
public static
static void
void main(String[]
main(String[] args)
args) {{
System.out.println("Hello,
System.out.println("Hello, world!");
world!");
}}
}}
コンパイル
1.
2.
フォルダ Java 内に、Hello.java があることを確認しま
しょう。
コマンドプロンプトで、次を入力・実行します。
javac
javac Hello.java
Hello.java
3.
 エラーが出た場合は、ソースに誤入力がないかを
確認してみてください。
フォルダ Java 内に、Hello.class ができたことを確認
しましょう。
実行
1.
コマンドプロンプトで、次を入力・実行します。
java
java Hello
Hello
基本的なデータ型
 画面に Hello Worldと出ます。
Javaとデータと変数


処理するには、処理するものを蓄えておく場所が必要。
変数
ものには、種類がある
データの型
Javaで使用できるデータ型

Javaで使用できるデータ型
boolean 型 : true または faulse
char型
: 16bitのUnicode文字
byte型
: 8bit符号付き整数
short型
:16bit符号付き整数
int型
:32bit符号付き整数
long型
:64bit符号付き整数
float型
:32bit浮動小数点数
double型
:64bit浮動小数点数
変数の宣言




変数とは、"値を保存しておく箱"のようなものです。
入れられるものの種類が決まっています。
最初に「こういうのを入れる、こういう名前の箱を使う」と
いうことを書いておく必要があります。→宣言
記述方法
型
型

変数の代入、参照

例: ii == 10;
10;
宣言の時に、同時に値を代入することもできる。
int
int roop
roop == 10;
10;
変数名,
変数名, 変数名;
変数名;
記述例:

int
int roop;
roop;
演算 その1
 色々な演算子が使用できる。
 その他にも、ビット演算を行う演算子とかがある。
x & y : x と y のビットごとのAND
x | y : x と y のビットごとのOR
x ^ y : x と y のビットごとのXOR
x << y : x を y ビットだけ左シフト
x >> y : x を y ビットだけ算術右シフト
x >>> y : x を y ビットだけ論理右シフト
代入演算子
演算 その3
1 : x++ : xの値を評価後、インクリメント
2 : ++x : xの値をインクリメント後、評価
3 : x-- : xの値を評価後、ディクリメント
4 : --x : xの値をディクリメント後、評価
上の意味
1 : y=x++ : y=x; x=x+1; : 値を渡してから、xに1を加える
2 : y=++x : x=x+1; y=x; : xに1を加えてから、値を渡す
3 : y=x-- : y=x; x=x-1; : 値を渡してから、xから1を引く
4 : y=--x : x=x-1; y=x; : xから1を引いてから、値を渡す
変数に保存している値を参照したいとき(使用したいと
き)は、変数名をそのまま記述します。
演算 その2
算術演算子:
論理演算子:
x + y : x と y の和
A && B :AかつB
x - y : x と y の差
A || B :AもしくはB
x * y : x と y の積
!A
:Aの否定
x / y : x を y で割った商
x % y : x を y で割った余り
関係演算子:
x < y : x < y のとき真(1)、さもなければ偽(0)
x <= y : x <= y のとき真(1)、さもなければ偽(0)
x > y : x < y のとき真(1)、さもなければ偽(0)
x >= y : x > y のとき真(1)、さもなければ偽(0)
x == y : x = y のとき真(1)、さもなければ偽(0)
x != y : x != y のとき真(1)、さもなければ偽(0)
 インクリメントとディクリメント
インクリメント → 増加
ディクリメント → 減少
変数に値を保存することを代入と言います。
= で行う。 変数名 = 代入する値;
変数名 = 代入する値;

加算代入:
整数型の変数 i に2を加えて i に代入したい
i+=2;
i+=2;

他にも、減算代入(-=)、乗算代入(*=)、除算代入
(/=)等、一通りあります。
printlnメソッドとprintメソッド

標準出力への出力
標準出力に文字を出力するメソッド
 System.out.print()
出力した後、改行しない。
 System.out.println()
出力した後、改行する。
 改行する・しないの違いがあるだけで、他は一緒。
基本的な使い方 その1

""で文字を囲む
文字列 Test Data を表示する例:
基本的な使い方 その2

System.out.println("Test
System.out.println("Test Data");
Data");

System.out.println("Test
System.out.println("Test Data
Data "" ++ t);
t);
int型の変数 t の値を表示する例:
そのまま、変数名を書けば OK

t+10の値を表示する例:
System.out.println(t
System.out.println(t ++ 10);
10);
値 100 を表示する例:
System.out.println(100);
System.out.println(100);
出力結果(t=10の場合):
20
そのまま書くと、"100"と解釈して出力してくれる。
文字列と変数と値が+で並んでいる例:
System.out.println("Test
System.out.println("Test Data
Data "" ++ tt ++ 10);
10);
出力結果(t=10の場合):
Test Data 10 10

2つの+は、どちらも
連結と解釈される
System.out.println("Test
System.out.println("Test Data");
Data");
System.out.println(t);
System.out.println(t);
System.out.println("Test
System.out.println("Test Data"
Data" ++ t);
t);
System.out.println(t+10);
System.out.println(t+10);
t=100*10;
t=100*10;
System.out.println(t+10);
System.out.println(t+10);
System.out.println("Test
System.out.println("Test Data
Data "" ++ (t
(t ++ 10));
10));
連結
括弧おかげで、
演算として解釈
ファイル名は
Sample02.java
public
public class
class Sample02{
Sample02{
public
public static
static void
void main(String[]
main(String[] args){
args){
int
int t=10;
t=10;
文字列と変数と値が+で並んでいる例:
出力結果(t=10の場合):
Test Data 20
+ は演算と解釈される。
演習2:
サンプルプログラム2
色んな例

+ 記号で連結できる
出力結果(t=10の場合):
Test Data 10
System.out.println(t);
System.out.println(t);

文字列 Test Data と整数型の変数 t の値を表示する
}}
}}
オブジェクト指向プログラミング
オブジェクト指向プログラミング
(基本編)
 複数のオブジェクトがある。
 それぞれのオブジェクトが処理を行う。
 オブジェクト間でデータをやりとりする。
Javaと
オブジェクト指向プログラミング


設計図と実物
オブジェクトの動作を
どこかで書かないと...
Javaは、オブジェクトを駆使して記述する言語。
 基本、多くがオブジェクト。
 クラス、インスタンス、メソッド → 次のページから解説
 理解するのは、結構、面倒です。
設計図を書いて、
それに基づいて
生成しよう
C言語は、関数を駆使して記述する言語。
 基本的に、全部の命令は関数。
同じ動作をする
オブジェクトも
簡単に作れる
オブジェクトって何?
直感とJava編
オブジェクトって何?
直感編
概念とか設計図の世界
実物(オブジェクト)の世界
缶A
缶
できること
• 中身を出す
• 中身を入れる
中身 = ??
何も言われないと
最初は空である
できること
• 中身を出す
• 中身を入れる
中身 = オレンジ色の液体
缶B
概念とか設計図の世界
変数
缶
コンストラクタ
中身 = 水色の液体
できること
• 中身を出す
• 中身を入れる
できること
• 中身を出す
• 中身を入れる
クラス
実物(オブジェクト)の世界
缶A
メソッド
中身 = オレンジ色の液体
できること
• 中身を出す
• 中身を入れる
中身 = ??
何も言われないと
空である
Javaだと
インスタンス
と呼ぶ
缶B
中身 = 水色の液体
できること
• 中身を出す
• 中身を入れる
インスタンス
インスタンス
オブジェクトって何?
Java編
概念とか設計図の世界
変数
Test
実物(オブジェクト)の世界
Data1 contents = 10;
コンストラクタ
contests=0;
Javaのプログラムの構造


メソッド
• pushContents();
• popContests();
int contents;


Data2 contents = 20;
メソッド
• pushContents();
• popContests();
クラス
Javaだと
インスタンス
と呼ぶ
メソッド
• pushContents();
• popContests();
メソッド
インスタンス

プログラム
1つ以上のクラスを持ちます。
クラス
クラスは、変数とコンストラクタ、メ
変数の宣言
ソッドを伴っています。省略可能です。
メソッド main を持つクラスが、必ず
コンストラクタ
必要です。
メソッド
プログラムのファイル名と、mainを
持つクラス名は、一致している必要
クラス
があります。
変数の宣言
 この main が実行されます
コンストラクタ
慣習として、クラス名は大文字から、
メソッド
メソッド名は小文字から初めます。
インスタンス
サンプル例1
 Hello.java の場合: mainを持っているクラス名がHello
なので、ファイル名はHello.java
public
public class
class Hello
Hello {{
クラスの記述と
インスタンスの生成
クラスが持っている変数は無し
コンストラクタも無し
public
public static
static void
void main(String[]
main(String[] args)
args) {{
System.out.println("Hello,
System.out.println("Hello, world!");
world!");
}}
}}
メソッドはmainだけ
やりたいこと
外観

1. クラスを書く
2. インスタンスを生成する
3. 実際に使ってみる
サンプルプログラム2を作りながら見ていきましょう
3つの部分
01行目
03~14行目
17~26行目
01:
01:
02:
02:
03:
03:
04:
04:
05:
05:
06:
06:
07:
07:
08:
08:
09:
09:
10:
10:
11:
11:
12:
12:
13:
13:
14:
14:
15:
15:
16:
16:
17:
17:
18:
18:
19
19
20:
20:
21:
21:
22:
22:
23:
23:
24:
24:
25:
25:
26:
26:
27:
27:
import
importjava.lang.String;
java.lang.String;
class
classHelloClass{
HelloClass{
String
Stringname;
name;
int
introop=1;
roop=1;
HelloClass(String
HelloClass(Stringx){
x){
name=x;
name=x;
}}
}}
public
publicvoid
voidhello(){
hello(){
System.out.println(this.name
System.out.println(this.name++":Hello
":HelloWorld");
World");
}}
public
publicclass
classHelloWorld{
HelloWorld{
public
publicstatic
staticvoid
voidmain(String[]
main(String[]args){
args){
int
inttestnum=5;
testnum=5;
HelloClass
HelloClassdt01
dt01==new
newHelloClass("OB01");
HelloClass("OB01");
HelloClass
HelloClassdt02
dt02==new
newHelloClass("OB02");
HelloClass("OB02");
}}
}}
dt01.hello();
dt01.hello();
dt02.hello();
dt02.hello();
書く際のお約束

修飾子について
サンプルプログラムを見ると、各行の末尾に
と思います。
このように、Javaは、1文の末尾に

構造上の塊を示すために、
{}
;
;

を書きます。


を使用します。

01:
01:
03と14行目:
クラスの宣言




Data3
publicなメソッド
privateなメソッド

1.
2.
3.
3つの部分に分けられる。
クラスを書く
インスタンスを生成する
実際に使ってみる
変数の宣言
03:
03: class
class HelloClass{
HelloClass{
04:
String
04:
String name;
name;
05:
int
05:
int roop=1;
roop=1;
コンストラクタ
06:
06:
07:
HelloClass(String
x){
07:
HelloClass(String x){
08:
name=x;
08:
name=x;
メソッド
09:
}}
09:
10:
10:
11:
public
11:
public void
void hello(){
hello(){
12:
System.out.println(this.name
12:
System.out.println(this.name ++ ":Hello
":Hello World");
World");
13:
}}
13:
14:
14: }}
クラスを書く
インスタンスを生成する
実際に使ってみる
最初にclassと書き、その後にクラス名を記述します。
直後の中括弧の間に、実際の中身を書きます。
記述方法
class
class クラスの名前{
クラスの名前{
中略
中略
}}
publicな変数
privateな変数
03~14行目:
クラスの記述
import
import java.lang.String;
java.lang.String;
1.
2.
3.
public : すべてのクラスのメソッドからアクセス可能
private:同じクラスのメソッドからのみアクセス可能
省略したら、同じパッケージ内でpublicになる
Data1
01行目:
パッケージのimport
Javaには、すでに多くのクラスが準備されている。
つまり、1から自分でわざわざ書く必要はない。
パッケージという形でまとめられている。
どのパッケージを使うのかを指定するときにimportを
使用する。
書き方:
import
import パッケージ名;
パッケージ名;
例:
クラスを書く
インスタンスを生成する
実際に使ってみる
修飾子というのが、これから出てきます。
 それぞれの変数やメソッドを、どこから利用でき
るかを指定します。
がある
"クラスはここからここまで"、"メソッドはここからここ
まで" ということを示す。
囲まれているのをブロックと呼んだりします。

1.
2.
3.
04と05行目:
変数の宣言




1.
2.
3.
クラスを書く
インスタンスを生成する
実際に使ってみる
変数とは、"値を保存しておく箱"のようなものです。
入れられるものの種類が決まっています。
最初に「こういうのを入れる、こういう名前の箱を使う」と
いうことを書いておく必要があります。→宣言
記述方法
型
型
変数名,
変数名, 変数名;
変数名;
記述例:
03:
03:
14:
14:
class
class HelloClass{
HelloClass{
中略
中略
}}

記述例:
05:
05:
int
int roop=1;
roop=1;
宣言と同時に値を代入する場合
1.
2.
3.
11~13行目
メソッド
クラスを書く
インスタンスを生成する
実際に使ってみる
メソッドとは、インスタンスに対する操作のこと。
インスタンスが何をするかを記述する。
「入力を貰い、何か処理をし、出力をする」が基本。



11~13行目
メソッドの書き方

修飾子
修飾子 返値の型
返値の型 メソッド名(引数1の型
メソッド名(引数1の型 引数1){
引数1){
文;
文;
出力がある場合書く
}}
出力
メソッド
入力
0~複数個
0~1個
何か処理をする
07~09行目
コンストラクタ
1.
2.
3.


この機能を使うと、柔軟に初期値とかを設定できます。



11:
11:
12:
12:
13:
13:
クラスを書く
インスタンスを生成する
実際に使ってみる
インスタンスを生成するときに、自動的に実行される。
返値のないメソッドのように記述される。
コンストラクタの名前は、クラスの名前と同一になります。
インスタンスを生成するときに渡す引数の種類によって、
使用するコンストラクタを切り替えることができます。
コンストラクタが無い場合は、何も行われない。

07:
07:
08:
08:
09:
09:
14:
14:
17:
17:
18:
18:
20:
20:
25:
25:
26:
26:
class HelloClass{
(略)
HelloClass(String x){
name=x;
}
(略)
}
コンストラクタ
インスタンス生成時の引数は、
コンストラクタに渡される。
インスタンスが生成され
たときに実行される。
public class HelloWorld{
public static void main(String[] args){
HelloClass dt01 = new HelloClass("OB01");
(略)
}
}
出力
メソッド
public
public void
void hello(){
hello(){
System.out.println(this.name
System.out.println(this.name ++ ":Hello
":Hello World");
World");
}}
1.
クラスを書く
2. インスタンスを生成する
07~09行目:
3. 実際に使ってみる
コンストラクタの書き方
返値の無いメソッドのように書きます。
クラス名(引数1の型
クラス名(引数1の型 引数1){
引数1){
文;
文;
}}
入力の個数文だけ書く
06:
06:
07:
07:
08:
08:
09:
09:
10:
10:
HelloClass(String
HelloClass(String x){
x){
name=x;
name=x;
}}
1.
2.
3.
クラスを書く
インスタンスを生成する
実際に使ってみる
20,21行目
インスタンスの生成 その1
コンストラクタの実行:
03:
03:
クラスを書く
インスタンスを生成する
実際に使ってみる
入力の個数文だけ書く
次のように書きます。
return
return 返値;
返値;
入力
1.
2.
3.

宣言と生成を行う必要がある。
宣言の仕方: クラス名
クラス名 インスタンス名;
インスタンス名;
生成の仕方: インスタンス名
インスタンス名 == new
new クラス名();
クラス名();
例えば、クラス HelloClass のインスタンス dt01 を生成
するなら、
HelloClass
HelloClass dt01;
dt01;
dt01
dt01 == new
new HelloClass();
HelloClass();
1.
2.
3.
クラスを書く
インスタンスを生成する
実際に使ってみる
20,21行目
インスタンスの生成 その2

宣言と生成を1行で書くこともできる。
クラス名
クラス名 インスタンス名
インスタンス名 == new
new クラス名();
クラス名();

例えば、クラス HelloClass のインスタンス dt01 を生成す
るなら、
1.
2.
3.
23,24行目:
使い方


クラスを書く
インスタンスを生成する
実際に使ってみる
インスタンスのメンバにアクセスするには、
インスタンス名.メンバ名
インスタンス名.メンバ名
ドット
とする。
インスタンス dt01 の変数 roop を参照したい場合、
dt01.roop
dt01.roop
HelloClass
HelloClass dt01
dt01 == new
new HelloClass();
HelloClass();

インスタンス dt01 のメソッド hello を実行したい場合、
dt01.hello()
dt01.hello()
流れ(1)


17:
17:
18:
18:
19
19
20:
20:
21:
21:
22:
22:
23:
23:
24:
24:
25:
25:
26:
26:
流れ(2)
20行目でdt01が生成。コンストラクタでdt01の変数
nameにはOB01が代入。
同様に、21行目でdt02が生成。
public
publicclass
classHelloWorld{
HelloWorld{
public
publicstatic
staticvoid
voidmain(String[]
main(String[]args){
args){
int
inttestnum=5;
testnum=5;
HelloClass
HelloClassdt01
dt01==new
newHelloClass("OB01");
HelloClass("OB01");
HelloClass
HelloClassdt02
dt02==new
newHelloClass("OB02");
HelloClass("OB02");
}}
}}
dt01.Hello();
dt01.Hello();
dt02.Hello();
dt02.Hello();
dt01
dt02
hello();
hello();
roop=1;
roop=1;
name="OB01";
name="OB02";


17:
17:
18:
18:
19
19
20:
20:
21:
21:
22:
22:
23:
23:
24:
24:
25:
25:
26:
26:
演習3:
内容



サンプルプログラム3を入力し、コンパイル、実行を行
います。
どのようなファイルができるか、確認していきます。
流れ:
1. ファイルをおくフォルダの作成
2. テキストエディタで HelloWorld.java を入力、作成
3. コマンドプロンプト上で、HelloWorld.javaをコンパ
イル
4. コマンドプロンプト上で、HelloWorld を実行
23行目でdt01のhelloを実行。
helloはnameの中身"OB01"と"Hello World"を出力。
同様に、24行目はdt02のhelloを実行。
public
publicclass
classHelloWorld{
HelloWorld{
public
publicstatic
staticvoid
voidmain(String[]
main(String[]args){
args){
int
inttestnum=5;
testnum=5;
HelloClass
HelloClassdt01
dt01==new
newHelloClass("OB01");
HelloClass("OB01");
HelloClass
HelloClassdt02
dt02==new
newHelloClass("OB02");
HelloClass("OB02");
}}
}}
dt01.Hello();
dt01.Hello();
dt02.Hello();
dt02.Hello();
dt01
dt02
hello();
hello();
roop=1;
roop=1;
name="OB01";
name="OB02";
演習3:
ソースの記述、コンパイル、実行
1.
2.
HelloWorld.java というファイル名で保存します。
コマンドプロンプトで、次を入力・実行します。
javac
javac HelloWorld.java
HelloWorld.java
3.
 フォルダ Java 内に、HelloWorld.class と
HelloClass.class ができたことを確認しましょう。
 1つのクラス毎に1つのファイルができます。
コマンドプロンプトで、次を入力・実行します。
java
java HelloWorld
HelloWorld
利点


スタティックなメソッド
メソッドの場合、わざわざインスタンスを生成しなくても、
その機能を利用できるようになります。
変数の場合、複数のインスタンスで共通に使える変数
を利用できるようになります。
注意する点

クラスメンバとインスタンスメンバ
static なメソッドの中では、インスタンスメンバな変数に
アクセスすることはできません。
class
class Test{
Test{
static
static int
int st_data;
st_data;
int
int data;
data;
staticなメソッドtest_func02の中からは、
変数dataは利用できない。
public
public static
static void
void test_func02(){
test_func02(){
文;
文;
}}
}}
変数やメソッドには、static をつけることができます。
 staticがついているものをクラスメンバ、ついていないも
のをインスタンスメンバと呼びます。
 staticがついている変数やメソッドに関しては、すべての
インスタンスが、同じモノを使うようになります。
 クラスメンバは、インスタンスを生成しなくても利用する
ことができます。
 クラスメンバには、
クラス名.メンバ名
クラス名.メンバ名
のようにアクセスします。

直感的な図
概念とか設計図の世界
int contents;
Test
static int st_cont;
•
pushContents();
•
static cont();
Test.st_cont=10;
•
Test. cont();
直感的な図
実物(オブジェクト)の世界
static と書かれたメンバが
居ることに注目!
概念とか設計図の世界
int contents;
Test
インスタンスを生成しなくても、
アクセス可能。
クラス名.メンバ名でアクセスする。
今回は、Test.st_cont の様にする。
実物(オブジェクト)の世界
Data1 contents = 10;
static int st_cont;
st_cont;
•
pushContents();
•
pushContents();
•
static cont();
•
cont();
Data2 contents = 20;
Test.st_cont=10;
st_cont;
•
•
pushContents();
•
cont();
Test. cont();
直感的な図
概念とか設計図の世界
実物(オブジェクト)の世界
Data1 contents = 10;
int contents;
Test
static int st_cont;
•
pushContents();
•
static cont();
直感的な図
同じものを利用。
概念とか設計図の世界
int contents;
Test
実物(オブジェクト)の世界
Data1 contents = 10;
st_cont;
static int st_cont;
st_cont;
•
pushContents();
•
pushContents();
•
pushContents();
•
cont();
• static cont();
Test.st_cont=15とすれば、
Data1.st_cont も15に。
•
cont();
Data2 contents = 20;
Data2 contents = 20;
Test.st_cont=10;
st_cont;
Test.st_cont=15;
st_cont;
•
•
pushContents();
•
•
pushContents();
•
cont();
•
cont();
Test.cont();
直感的な図
概念とか設計図の世界
int contents;
Test
クラスの書き方の例
ここに値を代入!
Data1.st_count=20
実物(オブジェクト)の世界
class
class Test{
Test{
static
static int
int st_data;
st_data;
int
int data;
data;
Data1 contents = 10;
static int st_cont;
st_cont;
•
pushContents();
•
pushContents();
•
static cont();
•
cont();
•
Test.cont();
public
public static
static void
void test_func02(){
test_func02(){
System.out.println(st_data);
System.out.println(st_data);
}}
}}
public
public class
class Sample04a{
Sample04a{
public
public static
static void
void main(String[]
main(String[] args){
args){
Test.st_data=10;
Test.st_data=10;
Test.test_func02();
インスタンスを生成しなく
Test.test_func02();
}}
ても使える
}
}
st_cont;
•
static と書くだけです
public
public void
void test_func01(){
test_func01(){
System.out.println(data);
System.out.println(data);
}}
Data2 contents = 20;
Test.st_cont=20;
Test.cont();
pushContents();
ここに代入と同じ結果
• cont();
に!
オーバーロードって?

メソッドのオーバーロード

メソッドも、
 引数のデータ型
 個数
 並び方
のどれかが異なっていれば、同じ名前で沢山定義する
ことができます。これをオーバーロードと言います。
異なる引数で同じ処理を行いたいとき等に便利です。
例2:
例:
public class Sample04d{
public static void main(String[] args){
calc(10,20);
calc(10.5,20.5);
}
同じクラスのメソッドは、
メソッド名だけで実行できます
引数が(整数,整数)
なので、こちらが実行
public static void calc(int data01, int data02){
System.out.println(data01*data02);
引数が(double,double)
}
なので、こちらが実行
public static void calc(double data01, double data02){
System.out.println(data01+data02);
}
}
2つ以上のコンストラクタを書くことができる。
どちらが実行されるかは、引数で判断される。
class Test{
int value;
Test(){
value=10;
}
Test(int value01){
value=value01*10;
}
}
引数が無いので、
こちらが実行される。
引数として
整数が一つ
渡されるので、
こちらが実行される。
public class Sample05{
public static void main(String[] args){
Test dt01 = new Test();
Test dt02 = new Test(100);
System.out.println(dt01.value);
System.out.println(dt02.value);
}
}
継承とは

あるクラスが存在しているとき、それを流用して、違うク
ラスを記述することができる!
int data02;
•


サブクラスの書き方

サブ
クラス
Test01 int data01;
•
スーパー
クラス
test_func01();
スーパークラス
class
class Test02
Test02 extends
extends Test01{
Test01{
int
data02;
int data02;
拡張された内容
}}
Test02
int data02;
拡張された
部分
test_func01();
class
class Test01{
Test01{
int
int data01;
data01;
void
void test_func01(){中略}
test_func01(){中略}
}}
}}
Test02
•
サブクラスの書き方例
もとのクラスを拡張(extends)する形で書きます。
直感的には、以下のような感じ。
test_func01();
もとのクラスをスーパークラス、新しくできたクラスをサ
ブクラスと呼びます。
新しくできたサブクラスは、普通のクラスと同様の方法
でインスタンスを生成し、使えます。
class
class サブクラス名
サブクラス名 extends
extends スーパークラス名
スーパークラス名 {{
拡張したい内容を書く。
拡張したい内容を書く。

Test02 int data01;
Test01 int data01;
継承
サブクラス
Test01 int data01;
int data02;
•
test_func01();
生成されたインスタンス
メソッドのオーバーライド
class
class Test01{
Test01{
int
int data01;
data01;
dt02.test_func01()のように、
void
void test_func01(){中略}
test_func01(){中略}
}}
普通にアクセス
class
class Test02
Test02 extends
extends Test01{
Test01{
int
dt02.data01のように、
int data02;
data02;
}}
普通にアクセス
public
public class
class Sample04d{
Sample04d{
public
public static
static void
void main(String[]
main(String[] args){
args){
Test02
Test02 dt02
dt02 == new
new Test02();
Test02();
以下略
以下略
dt02
サブクラスの方で、
class
class Test01{
Test01{
スーパークラスと同じ名前・引数の
int
int data01;
data01;
void
メソッドを定義した場合、
void test_func01(){中略}
test_func01(){中略}
}}
サブクラスで書いた方が有効に
class
class Test02
Test02 extends
extends Test01{
Test01{
int
int data02;
data02;
メソッドのオーバーライド
void
void test_func01(){中略}
test_func01(){中略}
}}
dt01(生成されたインスタンス) Test01
data01;
data02;
data01;
•
data02;
普通に生成
•
dt01.test_func01()として、
こちらが使われる。
test_func01();
•
test_func01();
test_func01();
こちらは使われない
アブストラクトとは

アブストラクトクラス
と
アブストラクトメソッド
アブストラクトクラス


拡張されることを前提としたクラス
書式:通常のクラスの書き方に abstract とつける。
abstract
abstract 修飾子
修飾子 class
class クラス名{
クラス名{
クラスと同じように、
クラスと同じように、
変数の宣言
変数の宣言
コンストラクタ
コンストラクタ
メソッド
メソッド
等を書く
等を書く
}}

クラスを書く際に、拡張されることを前提に、クラスを書
くことができる。
 アブストラクトクラス
 アブストラクトクラスは、拡張されることが前提なので、
それ自身をクラスにするインスタンスは作れない。
アブストラクトクラスの中では、拡張時にオーバーライド
されることを前提に、メソッドを書くことができる。
 アブストラクトメソッド
 アブストラクトメソッドは、サブクラス内でオーバーライ
ドしないと、コンパイル時にエラーが出る。
アブストラクトクラスの例
abstract class Test01{
void test01(){
System.out.println("Test 01");
}
}
class Test02 extends Test01{
void test02(){
System.out.println("Test 02");
}
}
アブストラクトクラス
Test01をスーパークラス
とするサブクラスTest02
public class Sample06a{
public static void main(String[] args){
インスタンスを生成。
Test02 dt01 = new Test02();
}
Test01 dt01 = new Test01();はできない。
}
アブストラクトメソッド



サブクラスで、オーバーライドされる前提のメソッド。
サブクラス内でオーバーライドされないと、コンパイル時
にエラーが出る。
書式:メソッドに abstract とつける。
abstract
abstract 修飾子
修飾子 class
class クラス名{
クラス名{
略
略
abstract
abstract 修飾子
修飾子 返値の型
返値の型 メソッド名(引数);
メソッド名(引数);
}}
必ずオーバーライドされるため、
実際に行う内容は、ここには書かない
アブストラクトメソッドの例
アブストラクト
クラス
abstract class Test01{
void test01(){
System.out.println("Test 01");
}
アブストラクト
abstract void test02();
}
メソッド
Test01を
スーパークラス
とする
サブクラスTest02
class Test02 extends Test01{
void test02(){
System.out.println("Test 02");
}
}
public class Sample06b{
public static void main(String[] args){
Test02 dt01 = new Test02();
}
}
必ずオーバーライド
インターフェースとは

インターフェース
クラスの書き方 その1
インターフェースの書き方

書式:

interface
interface interface名{
interface名{
記号定数の宣言
記号定数の宣言

アブストラクトメソッド
アブストラクトメソッド
このインターフェースに基づいたクラスを書くことを、
インターフェースを実装すると言います。
インターフェースを実装するには、次のように書きます。
 書式:
class
class クラス名
クラス名 implements
implements interface名{
interface名{
 省略
省略
}}

アブストラクトメソッドだけを宣言するための機能。
 インターフェース内には、定数とアブストラクトメソッド
のみを記述できる。
 インターフェースに基づいたクラスを書くことができる。
このことをインターフェースを実装するという。
 データのやり取りの方法を強制するので、インター
フェースと呼ばれる。
 クラスと異なり、2つのインターフェースを、1つのクラ
スに同時に実装できる。
interfaceの中では、記号定数の宣言とアブストラクト
メソッドしか書くことができません。
}}

アブストラクトメソッドは、クラス内でオーバーライドする
必要があります。
クラスの書き方 その2


2つ以上のインターフェースを同時に実装できます。
 書式:


クラスを継承し、さらにインターフェース実装できます。
 書式:
class
class クラス名
クラス名 implements
implements interface名,interface名{
interface名,interface名{
 省略
省略
class
class クラス名
クラス名 extends
extends クラス名
クラス名 implements
implements interface名{
interface名{
 省略
省略
}}
}}
, で区切って、インターフェース名を実装したいだけ繋げ
ます。
クラスの拡張とインターフェース

クラスの書き方 その3
クラスを拡張するとき、スーパークラスとして利用できる
のは、ただ1つだけ。
インターフェースは、複数を同時に利用できる。
普通の拡張
クラス その1
クラス その2
クラス
クラス
クラス
インターフェース その1
インターフェース その2
クラス
クラス
2つのスーパークラス
は持てない
インターフェースと
スーパークラスは同時
にもてる
インターフェースは
2つ同時でもOK
インターフェースの例
interface InterTest01{
double root_2 = 1.41421356;
void test01(double ddt);
}
class Test02 implements InterTest01{
public void test01(double ddt){
System.out.println(ddt*root_2);
}
}
public class Sample07a{
public static void main(String[] args){
Test02 dt01 = new Test02();
dt01.test01(100.0);
}
}
インターフェース
インターフェースを
実装したクラス
インスタンスを生成。
メソッドを実行。