• 検索結果がありません。

Microsoft PowerPoint - java13bb.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - java13bb.ppt"

Copied!
17
0
0

読み込み中.... (全文を見る)

全文

(1)

平成

25年度静岡県立大学公開講座

Javaで学ぶプログラミング基礎

第1回

Java言語の概要

第2回

Javaプログラミングの基礎

第3回 コンソール・アプリケーション作成

第4回

Androidアプリケーション作成

JavaとJava仮想マシン

Javaとは

Sun Microsystems によって開発された。

オブジェクト指向言語。

プラットホーム非依存。

一度ソースを書くと、UNIXでもWindowsでも動く。

文法は、CやC++から多くを引き継いでいる。

ライブラリも充実している。

ネットワークやセキュリティに配慮されている。

配布されているファイル

Java実行環境(Java Runtime Environment; JRE)

Javaのプログラムを実行するのに必要。

自分の機種(WindowsとかLinuxとか)用が必要。

Windows用も無料で配布されています。

Java開発キット (Java Development Kit; JDK)

Javaの基本的なプログラムに必要。

自分の機種(WindowsとかLinuxとか)用が必要。

Windows用も無料で配布されています。

Javaのプログラムソース

テキストファイル。

それぞれの行が何を意味しているのかは、徐々に

やっていきます。

public class Hello {

public static void main(String[] args) { System.out.println("Hello, world!"); }

}

public class Hello {

public static void main(String[] args) { System.out.println("Hello, world!"); } }

プラットホーム非依存

 C言語の場合... プログラムを書く 

Javaの場合...

色んな環境で動かしたい!

Windows Linux その他 プログラムを書く Windows用 UNIX用 それぞれ 用に書く 必要 Windows Linux その他 Java 実行環境 Java 実行環境 Java 実行環境 どれでも動く

(2)

C言語でのプログラム作成

①プログラムを書く Windows Linux Windows用のソース Linux用のソース Windows用の Cコンパイラ Linux用のCコンパイラ Windows用 実行ファイル Linux用 実行ファイル 実行 実行 ②コンパイルする ③実行する プログラマの領域

Javaでのプログラム作成 その1

①プログラムを書く Windows Linux Javaのプログラムのソース Windows用の Javaのコンパイラ Java仮想マシン用のバイトコード Windows用の Java実行環境上で 実行 ②コンパイルする ③実行する Linux用の Java実行環境上で 実行 Linux用の Javaのコンパイラ プログラマの領域

Javaでのプログラム作成 その2

①プログラムを書く Windows Linux Javaのプログラムのソース Windows用の Javaのコンパイラ Java仮想マシン用のバイトコード Windows用の Java実行環境上で 実行 ②コンパイルする ③実行する Linux用の Java実行環境上で 実行 Linux用の Javaのコンパイラ

Windowsで

書いて

Linuxで実行

とかもできる

Java仮想マシン

Linux Javaのプログラムのソース Linux用 コンパイラ Java仮想マシン用の バイトコード Linux用 実行環境 

Java仮想マシンは、その名の

通り、仮想の計算機。

Javaバイトコードは、Java仮

想マシン上で動作する。

Javaコンパイラは、バイトコー

ドを生成。

Java実行環境は、バイトコー

ドを、各プラットホーム用に翻

訳して実行。

Windows Windows用 実行環境 Windows用 コンパイラ

コンパイルと実行

コンパイルと実行 その

1

Linux Javaのプログラムのソース Linux用 コンパイラ Java仮想マシン用の バイトコード Linux用 実行環境 Windows Windows用 実行環境 Windows用 コンパイラ

①プログラムを書く

テキストエディタとかで書く。

拡張子は

.java。

つまり、test.java のように

なる。

(3)

コンパイルと実行 その

2

Linux Javaのプログラムのソース Linux用 コンパイラ Java仮想マシン用の バイトコード Linux用 実行環境 Windows Windows用 実行環境 Windows用 コンパイラ

②コンパイル

javac ファイル名

javac ファイル名

コンソールで次のようにする

test.java をコンパイルしたい

なら、

拡張子が

.class のファイルが

できる。

javac test.java

javac test.java

コンソールで次のようにする。

test.class を実行したいなら、

コンパイルと実行 その

3

Linux Javaのプログラムのソース Linux用 コンパイラ Java仮想マシン用の バイトコード Linux用 実行環境 Windows Windows用 実行環境 Windows用 コンパイラ java 拡張子無しのファイル名 java 拡張子無しのファイル名

③実行

java test

java test

演習

1:コンパイルと実行

Hello World

演習

1の内容

サンプルプログラム

Hello World を入力し、コンパイ

ル、実行を行います。

どのようなファイルができるか、確認していきます。

流れ:

1.

ファイルをおくフォルダの作成

2.

テキストエディタで

hello.java を入力、作成

3.

コマンドプロンプト上で、hello.javaをコンパイル

4.

コマンドプロンプト上で、hello を実行

ソースを置く場所の作成

1.

デスクトップで右クリックし、コンテクストメニューで

[新規作成]→[フォルダ] とし、Java というフォルダを

作成。

コマンドプロンプトの立ち上げ

1.

左下のスタートボタン

を押す。

2.

ファイルの検索でcmdと入力。出てきたcmdを実行。

黒いコマンドプロンプトが立ち上がります。

3.

コマンドプロンプト上で、

と入力してEnterキーを押す。

プロンプトが

c:¥Users¥ユーザー名¥Desktop¥Java

となっているか確認しましょう。

cd Desktop¥Java

cd Desktop¥Java

(4)

ソースの記述

public class Hello {

public static void main(String[] args) {

System.out.println("Hello, world!");

}

}

public class Hello {

public static void main(String[] args) {

System.out.println("Hello, world!");

}

}

1.

テキストエディタでサンプルプログラム1を書きます。

実習室には、テキストエディタとしてサクラエディタ

がインストールされています。

2.

Hello.java というファイル名で保存します。

Hello.txtではないので注意しましょう。

コンパイル

1.

フォルダ

Java 内に、Hello.java があることを確認しま

しょう。

2.

コマンドプロンプトで、次を入力・実行します。

エラーが出た場合は、ソースに誤入力がないかを

確認してみてください。

3.

フォルダ

Java 内に、Hello.class ができたことを確認

しましょう。

javac Hello.java

javac Hello.java

実行

1.

コマンドプロンプトで、次を入力・実行します。

画面に

Hello Worldと出ます。

java Hello

java Hello

基本的なデータ型

Javaとデータと変数

処理するには、処理するものを蓄えておく場所が必要。

変数

ものには、種類がある

データの型

Javaで使用できるデータ型

Javaで使用できるデータ型

boolean 型 : true または faulse

char型

16bitのUnicode文字

byte型

8bit符号付き整数

short型

:16bit符号付き整数

int型

:32bit符号付き整数

long型

:64bit符号付き整数

float型

:32bit浮動小数点数

double型

:64bit浮動小数点数

(5)

変数の宣言

int roop; int roop; 

変数とは、"値を保存しておく箱"のようなものです。

入れられるものの種類が決まっています。

最初に「こういうのを入れる、こういう名前の箱を使う」と

いうことを書いておく必要があります。→宣言

記述方法

記述例:

型 変数名, 変数名; 型 変数名, 変数名;

変数の代入、参照

変数に値を保存することを代入と言います。

= で行う。

例:

宣言の時に、同時に値を代入することもできる。

変数に保存している値を参照したいとき(使用したいと

き)は、変数名をそのまま記述します。

変数名 = 代入する値;

変数名 = 代入する値;

i = 10;

i = 10;

int roop = 10;

int roop = 10;

演算 その

1

色々な演算子が使用できる。

算術演算子: x + y : x と y の和 x - y : x と y の差 x * y : x と y の積 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) 論理演算子: A && B :AかつB A || B :AもしくはB !A :Aの否定

演算 その

2

その他にも、ビット演算を行う演算子とかがある。

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を引いてから、値を渡す

代入演算子

加算代入:

整数型の変数

i に2を加えて i に代入したい

他にも、減算代入(-=)、乗算代入(*=)、除算代入

(/=)等、一通りあります。

i+=2;

i+=2;

(6)

標準出力への出力

printlnメソッドとprintメソッド

標準出力に文字を出力するメソッド

System.out.print()

出力した後、改行しない。

System.out.println()

出力した後、改行する。

改行する・しないの違いがあるだけで、他は一緒。

基本的な使い方 その

1

文字列 Test Data を表示する例:

System.out.println("Test Data"); System.out.println("Test Data"); 

int型の変数 t の値を表示する例:

""で文字を囲む System.out.println(t); System.out.println(t); そのまま、変数名を書けばOK 

値 100 を表示する例:

System.out.println(100); System.out.println(100); そのまま書くと、"100"と解釈して出力してくれる。

基本的な使い方 その

2

文字列 Test Data と整数型の変数 t の値を表示する

System.out.println("Test Data " + t); System.out.println("Test Data " + t); + 記号で連結できる 

t+10の値を表示する例:

System.out.println(t + 10); System.out.println(t + 10); + は演算と解釈される。 Test Data 10 出力結果(t=10の場合): 20 出力結果(t=10の場合):

色んな例

文字列と変数と値が+で並んでいる例:

System.out.println("Test Data " + t + 10); System.out.println("Test Data " + t + 10); Test Data 10 10 出力結果(t=10の場合): 2つの+は、どちらも 連結と解釈される 

文字列と変数と値が+で並んでいる例:

System.out.println("Test Data " + (t + 10)); System.out.println("Test Data " + (t + 10)); Test Data 20 出力結果(t=10の場合): 連結 括弧おかげで、 演算として解釈

public class Sample02{

public static void main(String[] args){ int t=10; System.out.println("Test Data"); System.out.println(t); System.out.println("Test Data" + t); System.out.println(t+10); t=100*10; System.out.println(t+10); } }

public class Sample02{

public static void main(String[] args){ int t=10; System.out.println("Test Data"); System.out.println(t); System.out.println("Test Data" + t); System.out.println(t+10); t=100*10; System.out.println(t+10); } }

演習

2:

サンプルプログラム

2

ファイル名は Sample02.java

(7)

オブジェクト指向プログラミング

(基本編)

オブジェクト指向プログラミング

複数のオブジェクトがある。

それぞれのオブジェクトが処理を行う。

オブジェクト間でデータをやりとりする。

Javaと

オブジェクト指向プログラミング

Javaは、オブジェクトを駆使して記述する言語。

基本、多くがオブジェクト。

クラス、インスタンス、メソッド → 次のページから解説

理解するのは、結構、面倒です。

C言語は、関数を駆使して記述する言語。

基本的に、全部の命令は関数。

設計図と実物

設計図を書いて、

それに基づいて

生成しよう

オブジェクトの動作を

どこかで書かないと...

同じ動作をする

オブジェクトも

簡単に作れる

オブジェクトって何?

直感編

概念とか設計図の世界 実物(オブジェクト)の世界 中身 = 水色の液体 できること • 中身を出す • 中身を入れる

缶B

中身 = オレンジ色の液体 できること • 中身を出す • 中身を入れる

缶A

中身 = ?? できること • 中身を出す • 中身を入れる 何も言われないと 最初は空である

オブジェクトって何?

直感と

Java編

概念とか設計図の世界 実物(オブジェクト)の世界 中身 = 水色の液体 できること • 中身を出す • 中身を入れる

缶B

中身 = オレンジ色の液体 できること • 中身を出す • 中身を入れる

缶A

中身 = ?? できること • 中身を出す • 中身を入れる 何も言われないと 空である Javaだと インスタンス と呼ぶ クラス 変数 コンストラクタ メソッド インスタンス インスタンス

(8)

オブジェクトって何?

Java編

概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; メソッド • pushContents(); • popContests();

Data2

contents = 10; メソッド • pushContents(); • popContests();

Data1

Test

int contents;

メソッド • pushContents(); • popContests(); contests=0; Javaだと インスタンス と呼ぶ クラス 変数 コンストラクタ メソッド インスタンス インスタンス

Javaのプログラムの構造

クラス 変数の宣言 コンストラクタ メソッド クラス 変数の宣言 コンストラクタ メソッド プログラム  1つ以上のクラスを持ちます。  クラスは、変数とコンストラクタ、メ ソッドを伴っています。省略可能です。  メソッドmain を持つクラスが、必ず 必要です。  プログラムのファイル名と、mainを 持つクラス名は、一致している必要 があります。 このmain が実行されます  慣習として、クラス名は大文字から、 メソッド名は小文字から初めます。

サンプル例1

public class Hello {

public static void main(String[] args) { System.out.println("Hello, world!"); }

}

public class Hello {

public static void main(String[] args) { System.out.println("Hello, world!"); } }

Hello.java の場合:

mainを持っているクラス名がHello なので、ファイル名はHello.java クラスが持っている変数は無し コンストラクタも無し メソッドはmainだけ

クラスの記述と

インスタンスの生成

やりたいこと

1.

クラスを書く

2.

インスタンスを生成する

3.

実際に使ってみる

サンプルプログラム2を作りながら見ていきましょう

外観

3つの部分

01行目

03~14行目

17~26行目

import java.lang.String; class HelloClass{ String name; int roop=1; HelloClass(String x){ name=x; }

public void hello(){

System.out.println(this.name + ":Hello World"); }

}

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.hello(); dt02.hello(); } } import java.lang.String; class HelloClass{ String name; int roop=1; HelloClass(String x){ name=x; }

public void hello(){

System.out.println(this.name + ":Hello World"); }

}

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.hello(); dt02.hello(); } } 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19 20: 21: 22: 23: 24: 25: 26: 27: 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19 20: 21: 22: 23: 24: 25: 26: 27:

(9)

書く際のお約束

サンプルプログラムを見ると、各行の末尾に

;

がある

と思います。

このように、Javaは、1文の末尾に

;

を書きます。

構造上の塊を示すために、

{ }

を使用します。

"クラスはここからここまで"、"メソッドはここからここ

まで" ということを示す。

囲まれているのをブロックと呼んだりします。

修飾子について

修飾子というのが、これから出てきます。

それぞれの変数やメソッドを、どこから利用でき

るかを指定します。

 public : すべてのクラスのメソッドからアクセス可能  private:同じクラスのメソッドからのみアクセス可能  省略したら、同じパッケージ内でpublicになる publicな変数 privateな変数 publicなメソッド privateなメソッド Data1 Data3 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる

01行目:

パッケージの

import

Javaには、すでに多くのクラスが準備されている。

つまり、1から自分でわざわざ書く必要はない。

パッケージという形でまとめられている。

どのパッケージを使うのかを指定するときにimportを

使用する。

書き方:

例:

import java.lang.String;

import java.lang.String;

01:

01:

import パッケージ名;

import パッケージ名;

03~14行目:

クラスの記述

3つの部分に分けられる。

class HelloClass{ String name; int roop=1; HelloClass(String x){ name=x; }

public void hello(){

System.out.println(this.name + ":Hello World"); } } class HelloClass{ String name; int roop=1; HelloClass(String x){ name=x; }

public void hello(){

System.out.println(this.name + ":Hello World"); } } 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14:

変数の宣言

メソッド

コンストラクタ

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる

03と14行目:

クラスの宣言

class HelloClass{ 中略 } class HelloClass{ 中略 } 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 03: 14: 03: 14: 

最初にclassと書き、その後にクラス名を記述します。

直後の中括弧の間に、実際の中身を書きます。

記述方法

記述例:

class クラスの名前{ 中略 } class クラスの名前{ 中略 }

04と05行目:

変数の宣言

int roop=1; int roop=1; 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 05: 05: 

変数とは、"値を保存しておく箱"のようなものです。

入れられるものの種類が決まっています。

最初に「こういうのを入れる、こういう名前の箱を使う」と

いうことを書いておく必要があります。→宣言

記述方法

記述例:

型 変数名, 変数名; 型 変数名, 変数名;

宣言と同時に値を代入する場合

(10)

11~13行目

メソッド

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 

メソッドとは、インスタンスに対する操作のこと。

インスタンスが何をするかを記述する。

「入力を貰い、何か処理をし、出力をする」が基本。

メソッド

入力

出力

0~複数個

何か処理をする

0~1個

11~13行目

メソッドの書き方

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 

次のように書きます。

メソッド 入力 出力

public void hello(){

System.out.println(this.name + ":Hello World"); }

public void hello(){

System.out.println(this.name + ":Hello World"); } 11: 12: 13: 11: 12: 13: 修飾子 返値の型 メソッド名(引数1の型 引数1){ 文; return 返値; } 修飾子 返値の型 メソッド名(引数1の型 引数1){ 文; return 返値; }

入力の個数文だけ書く

出力がある場合書く

07~09行目

コンストラクタ

インスタンスを生成するときに、自動的に実行される。

返値のないメソッドのように記述される。

コンストラクタの名前は、クラスの名前と同一になります。

インスタンスを生成するときに渡す引数の種類によって、

使用するコンストラクタを切り替えることができます。

コンストラクタが無い場合は、何も行われない。

この機能を使うと、柔軟に初期値とかを設定できます。

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる

07~09行目:

コンストラクタの書き方

返値の無いメソッドのように書きます。

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる HelloClass(String x){ name=x; } HelloClass(String x){ name=x; } 06: 07: 08: 09: 10: 06: 07: 08: 09: 10: クラス名(引数1の型 引数1){ 文; } クラス名(引数1の型 引数1){ 文; }

入力の個数文だけ書く

03: 07: 08: 09: 14: 17: 18: 20: 25: 26: 03: 07: 08: 09: 14: 17: 18: 20: 25: 26:

コンストラクタの実行:

class HelloClass{ (略) HelloClass(String x){ name=x; } (略) }

public class HelloWorld{

public static void main(String[] args){ HelloClass dt01 = new HelloClass("OB01");

(略) } } コンストラクタ インスタンスが生成され たときに実行される。 インスタンス生成時の引数は、 コンストラクタに渡される。

20,21行目

インスタンスの生成

その

1

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 

宣言と生成を行う必要がある。

宣言の仕方:

生成の仕方:

例えば、クラス HelloClass のインスタンス dt01 を生成

するなら、

クラス名 インスタンス名;

クラス名 インスタンス名;

インスタンス名 = new クラス名();

インスタンス名 = new クラス名();

HelloClass dt01;

dt01 = new HelloClass();

HelloClass dt01;

dt01 = new HelloClass();

(11)

20,21行目

インスタンスの生成 その

2

宣言と生成を1行で書くこともできる。

例えば、クラス HelloClass のインスタンス dt01 を生成す

るなら、

クラス名 インスタンス名 = new クラス名();

クラス名 インスタンス名 = new クラス名();

HelloClass dt01 = new HelloClass();

HelloClass dt01 = new HelloClass();

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる

23,24行目:

使い方

インスタンスのメンバにアクセスするには、

とする。

インスタンス dt01 の変数 roop を参照したい場合、

インスタンス dt01 のメソッド hello を実行したい場合、

インスタンス名.メンバ名

インスタンス名.メンバ名

1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる

dt01.roop

dt01.roop

ドット

dt01.hello()

dt01.hello()

流れ

(1)

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.Hello();

dt02.Hello(); }

}

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.Hello(); dt02.Hello(); } } 17: 18: 19 20: 21: 22: 23: 24: 25: 26: 17: 18: 19 20: 21: 22: 23: 24: 25: 26: roop=1; hello(); dt02 name="OB02"; roop=1; hello(); dt01 name="OB01"; 

20行目でdt01が生成。コンストラクタでdt01の変数

nameにはOB01が代入。

同様に、21行目でdt02が生成。

流れ

(2)

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.Hello();

dt02.Hello(); }

}

public class HelloWorld{

public static void main(String[] args){ int testnum=5;

HelloClass dt01 = new HelloClass("OB01"); HelloClass dt02 = new HelloClass("OB02"); dt01.Hello(); dt02.Hello(); } } 17: 18: 19 20: 21: 22: 23: 24: 25: 26: 17: 18: 19 20: 21: 22: 23: 24: 25: 26: roop=1; hello(); dt02 name="OB02"; roop=1; hello(); dt01 name="OB01"; 

23行目でdt01のhelloを実行。

helloはnameの中身"OB01"と"Hello World"を出力。

同様に、24行目はdt02のhelloを実行。

演習

3:

内容

サンプルプログラム3を入力し、コンパイル、実行を行

います。

どのようなファイルができるか、確認していきます。

流れ:

1.

ファイルをおくフォルダの作成

2.

テキストエディタで

HelloWorld.java を入力、作成

3.

コマンドプロンプト上で、HelloWorld.javaをコンパ

イル

4.

コマンドプロンプト上で、HelloWorld を実行

演習

3:

ソースの記述、コンパイル、実行

1.

HelloWorld.java というファイル名で保存します。

2.

コマンドプロンプトで、次を入力・実行します。

フォルダ

Java 内に、HelloWorld.class と

HelloClass.class ができたことを確認しましょう。

1つのクラス毎に1つのファイルができます。

3.

コマンドプロンプトで、次を入力・実行します。

javac HelloWorld.java

javac HelloWorld.java

java HelloWorld

java HelloWorld

(12)

スタティックなメソッド

利点

メソッドの場合、わざわざインスタンスを生成しなくても、

その機能を利用できるようになります。

変数の場合、複数のインスタンスで共通に使える変数

を利用できるようになります。

注意する点

static なメソッドの中では、インスタンスメンバな変数に

アクセスすることはできません。

class Test{

static int st_data; int data;

public static void test_func02(){ 文;

} }

class Test{

static int st_data; int data;

public static void test_func02(){ 文; } } staticなメソッドtest_func02の中からは、 変数dataは利用できない。

クラスメンバとインスタンスメンバ

変数やメソッドには、static をつけることができます。

staticがついているものをクラスメンバ、ついていないも

のをインスタンスメンバと呼びます。

staticがついている変数やメソッドに関しては、すべての

インスタンスが、同じモノを使うようになります。

クラスメンバは、インスタンスを生成しなくても利用する

ことができます。

クラスメンバには、

クラス名.メンバ名

クラス名.メンバ名

のようにアクセスします。

直感的な図

概念とか設計図の世界 実物(オブジェクト)の世界

Test

int contents; • pushContents(); staticint st_cont;

Test.st_cont=10; • staticcont(); • Test. cont(); インスタンスを生成しなくても、 アクセス可能。 クラス名.メンバ名でアクセスする。 今回は、Test.st_cont の様にする。 static と書かれたメンバが 居ることに注目!

直感的な図

概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; • pushContents();

Data2

contents = 10; • pushContents();

Data1

Test

int contents; • pushContents();

static int st_cont; st_cont;

st_cont; Test.st_cont=10; • static cont(); • Test. cont(); • cont(); • cont();

(13)

直感的な図

概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; • pushContents();

Data2

contents = 10; • pushContents();

Data1

Test

int contents; • pushContents();

static int st_cont; st_cont;

st_cont; Test.st_cont=10; • static cont(); • Test.cont(); • cont(); • cont(); 同じものを利用。

直感的な図

概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; • pushContents();

Data2

contents = 10; • pushContents();

Data1

Test

int contents; • pushContents();

static int st_cont; st_cont;

st_cont; Test.st_cont=15; • static cont(); • Test.cont(); • cont(); • cont(); Test.st_cont=15とすれば、 Data1.st_cont も15に。

直感的な図

概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; • pushContents();

Data2

contents = 10; • pushContents();

Data1

Test

int contents; • pushContents();

static int st_cont; st_cont;

st_cont; Test.st_cont=20; • static cont(); • Test.cont(); • cont(); • cont(); ここに値を代入! Data1.st_count=20 ここに代入と同じ結果 に!

クラスの書き方の例

class Test{

static int st_data; int data;

public void test_func01(){ System.out.println(data); }

public static void test_func02(){ System.out.println(st_data); }

}

public class Sample04a{

public static void main(String[] args){ Test.st_data=10;

Test.test_func02(); }

class Test{

staticint st_data; int data;

public void test_func01(){ System.out.println(data); }

public staticvoid test_func02(){ System.out.println(st_data); }

}

public class Sample04a{

public static void main(String[] args){

Test.st_data=10; Test.test_func02(); } } static と書くだけです インスタンスを生成しなく ても使える

メソッドのオーバーロード

オーバーロードって?

メソッドも、

引数のデータ型

個数

並び方

のどれかが異なっていれば、同じ名前で沢山定義する

ことができます。これをオーバーロードと言います。

異なる引数で同じ処理を行いたいとき等に便利です。

(14)

例:

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);

}

public static void calc(double data01, double data02){ System.out.println(data01+data02); } } 引数が(整数,整数) なので、こちらが実行 引数が(double,double) なので、こちらが実行 同じクラスのメソッドは、 メソッド名だけで実行できます

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); } } 2つ以上のコンストラクタを書くことができる。 どちらが実行されるかは、引数で判断される。 引数が無いので、 こちらが実行される。 引数として 整数が一つ 渡されるので、 こちらが実行される。

継承

継承とは

あるクラスが存在しているとき、それを流用して、違うク

ラスを記述することができる!

int data01; • test_func01();

Test01 int data01;

• test_func01(); Test02 int data02; 

もとのクラスをスーパークラス、新しくできたクラスをサ

ブクラスと呼びます。

新しくできたサブクラスは、普通のクラスと同様の方法

でインスタンスを生成し、使えます。

サブクラスの書き方

Test02 int data02; int data01; • test_func01(); Test01 class サブクラス名 extends スーパークラス名 { 拡張したい内容を書く。 } class サブクラス名 extends スーパークラス名 { 拡張したい内容を書く。 } 

もとのクラスを拡張(extends)する形で書きます。

直感的には、以下のような感じ。

拡張された 部分 スーパー クラス サブ クラス

サブクラスの書き方例

Test02 int data02; int data01; • test_func01(); Test01 class Test01{ int data01; void test_func01(){中略} }

class Test02 extends Test01{ int data02; } class Test01{ int data01; void test_func01(){中略} }

class Test02 extends Test01{ int data02;

}

スーパークラス

拡張された内容

(15)

class Test01{ int data01;

void test_func01(){中略} }

class Test02 extends Test01{ int data02;

}

public class Sample04d{

public static void main(String[] args){ Test02 dt02 = new Test02(); 以下略

class Test01{ int data01;

void test_func01(){中略} }

class Test02 extends Test01{ int data02;

}

public class Sample04d{

public static void main(String[] args){

Test02 dt02 = new Test02();

以下略

生成されたインスタンス

dt02 data02; data01; • test_func01(); 普通に生成 dt02.data01のように、 普通にアクセス dt02.test_func01()のように、 普通にアクセス class Test01{ int data01; void test_func01(){中略} }

class Test02 extends Test01{ int data02; void test_func01(){中略} } class Test01{ int data01; void test_func01(){中略} }

class Test02 extends Test01{ int data02; void test_func01(){中略} }

メソッドのオーバーライド

dt01(生成されたインスタンス) data02; data01; • test_func01(); Test01 • test_func01(); サブクラスの方で、 スーパークラスと同じ名前・引数の メソッドを定義した場合、 サブクラスで書いた方が有効に メソッドのオーバーライド dt01.test_func01()として、 こちらが使われる。 こちらは使われない

アブストラクトクラス

アブストラクトメソッド

アブストラクトとは

クラスを書く際に、拡張されることを前提に、クラスを書

くことができる。

アブストラクトクラス

アブストラクトクラスは、拡張されることが前提なので、

それ自身をクラスにするインスタンスは作れない。

アブストラクトクラスの中では、拡張時にオーバーライド

されることを前提に、メソッドを書くことができる。

アブストラクトメソッド

アブストラクトメソッドは、サブクラス内でオーバーライ

ドしないと、コンパイル時にエラーが出る。

アブストラクトクラス

拡張されることを前提としたクラス

書式:通常のクラスの書き方に

abstract

とつける。

abstract 修飾子 class クラス名{ クラスと同じように、 変数の宣言 コンストラクタ メソッド 等を書く } abstract修飾子 class クラス名{ クラスと同じように、 変数の宣言 コンストラクタ メソッド 等を書く }

アブストラクトクラスの例

abstractclass Test01{ void test01(){

System.out.println("Test 01"); }

}

class Test02 extends Test01{ void test02(){

System.out.println("Test 02"); }

}

public class Sample06a{

public static void main(String[] args){ Test02 dt01 = new Test02(); }

}

アブストラクトクラス

Test01 dt01 = new Test01();はできない。

Test01をスーパークラス

とするサブクラスTest02

(16)

アブストラクトメソッド

サブクラスで、オーバーライドされる前提のメソッド。

サブクラス内でオーバーライドされないと、コンパイル時

にエラーが出る。

書式:メソッドに

abstract

とつける。

abstract 修飾子 class クラス名{ 略 abstract 修飾子 返値の型 メソッド名(引数); } abstract修飾子 class クラス名{ 略 abstract修飾子 返値の型 メソッド名(引数); } 必ずオーバーライドされるため、 実際に行う内容は、ここには書かない

アブストラクトメソッドの例

abstractclass Test01{ void test01(){

System.out.println("Test 01"); }

abstractvoid 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(); } } アブストラクト クラス Test01を スーパークラス とする サブクラスTest02 アブストラクト メソッド 必ずオーバーライド

インターフェース

インターフェースとは

アブストラクトメソッドだけを宣言するための機能。

インターフェース内には、定数とアブストラクトメソッド

のみを記述できる。

インターフェースに基づいたクラスを書くことができる。

このことをインターフェースを実装するという。

データのやり取りの方法を強制するので、インター

フェースと呼ばれる。

クラスと異なり、2つのインターフェースを、1つのクラ

スに同時に実装できる。

インターフェースの書き方

書式:

interface interface名{ 記号定数の宣言 アブストラクトメソッド } interface interface名{ 記号定数の宣言 アブストラクトメソッド } 

interfaceの中では、記号定数の宣言とアブストラクト

メソッドしか書くことができません。

クラスの書き方 その

1

このインターフェースに基づいたクラスを書くことを、

インターフェースを実装すると言います。

インターフェースを実装するには、次のように書きます。

書式:

class クラス名 implements interface名{  省略

}

class クラス名 implements interface名{

 省略

}

アブストラクトメソッドは、クラス内でオーバーライドする

(17)

クラスの書き方 その

2

2つ以上のインターフェースを同時に実装できます。

書式:

class クラス名 implements interface名,interface名{  省略

}

class クラス名 implements interface名,interface名{

 省略 } 

, で区切って、インターフェース名を実装したいだけ繋げ

ます。

クラスの書き方 その

3

クラスを継承し、さらにインターフェース実装できます。

書式:

class クラス名 extends クラス名 implements interface名{  省略

}

class クラス名 extends クラス名 implements interface名{

 省略 }

クラスの拡張とインターフェース

クラスを拡張するとき、スーパークラスとして利用できる

のは、ただ1つだけ。

インターフェースは、複数を同時に利用できる。

クラス その1 クラス その2 インターフェース その1 インターフェース その2 クラス クラス クラス クラス クラス 普通の拡張 インターフェースは 2つ同時でもOK インターフェースと スーパークラスは同時 にもてる 2つのスーパークラス は持てない

インターフェースの例

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); } } インターフェース インターフェースを 実装したクラス インスタンスを生成。 メソッドを実行。

参照

関連したドキュメント

Windows スタートメニュー &gt; よく使うアプリ(すべてのプログラム)の HARUKA フォルダの中.

SVF Migration Tool の動作を制御するための設定を設定ファイルに記述します。Windows 環境 の場合は「SVF Migration Tool の動作設定 (p. 20)」を、UNIX/Linux

Internet Explorer 11 Windows 8.1 Windows 10 Microsoft Edge Windows 10..

本節では本研究で実際にスレッドのトレースを行うた めに用いた Linux ftrace 及び ftrace を利用する Android Systrace について説明する.. 2.1

項目 MAP-19-01vx.xx AL- ( Ⅱシリーズ初期データ編集ソフト) サポート OS ・ Microsoft Windows 7 32 ( ビット版). ・ Microsoft Windows Vista x86

MPIO サポートを選択すると、 Windows Unified Host Utilities によって、 Windows Server 2016 に含まれている MPIO 機能が有効になります。.

ESET Server Security for Windows Server、ESET Mail/File/Gateway Security for Linux は

・M.2 Flash モジュール専用RAID設定サービス[PYBAS1SM2]とWindows Server 2022 Standard(16コア/Hyper-V)[PYBWPS5H]インストール/Windows Server 2019