Más contenido relacionado Java基礎勉強会7. 1
2 package study;
3
4 public class TestClass {
5
6 public static void main(String[] args) {
8 System.out.println("Hello! World!");
9 }
10
11 }
12
Javaのおさらい
7
8. 1
2 package study;
3
4 public class TestClass {
5
6 public static void main(String[] args) {
8 System.out.println("Hello! World!");
9 }
10
11 }
12
Javaのおさらい
クラス
8
9. Javaのおさらい
1 package study;
2
3 public class Chicken {
4
5 public void sing(){
6 System.out.println("コケコッコー!");
7 }
8 }
9
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
クラス
クラス
9
14. Javaのきほん1
17 public final class String
18 implements java.io.Serializable,
Comparable<String>, CharSequence
19 {
20 private final char value[];
21 private final int offset;
22 private final int count;
23 private int hash; // Default to 0
25
26 public String(String original) {
27 int size = original.count;
28 char[] originalValue = original.value;
29 char[] v;
30 if (originalValue.length > size) {
31 int off = original.offset;
Javaのおさらい
すべてって..? Stringのクラス
14
24. Javaのおさらい
1 package study;
2
3 public class Chicken {
4
5 public void sing(){
6 System.out.println("コケコッコー!");
7 }
8 }
9
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
24
25. Javaのおさらい
1 package study;
2
3 public class Chicken {
4
5 public void sing(){
6 System.out.println("コケコッコー!");
7 }
8 }
9
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
メソッド
メソッド
Javaを実行すると、
まずmainメソッドが
呼ばれるよ
25
28. Javaのおさらい
1 package study;
2
3 public class Chicken {
4
5 public void sing(){
6 System.out.println("コケコッコー!");
7 }
8 }
9
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
メソッド名
戻り値
28
29. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
29
30. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
30
31. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
文字列を付けて
呼び出してね!
31
32. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
sを返すよ!
32
33. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
sをリターンしよう...
Stringを返すよ!
33
34. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
OK! Stringが返ってくるから、
Stringに代入されるようにします
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
34
35. 3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
35
36. キャッチボール
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
strには コケコッコー!!! が入る
3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
36
37. 3 public class Chicken {
4
5 public String sing(String feeling){
6 if (feeling.equals("元気")){
7 String s = "コケコッコー!!!";
8 return s;
9 }
10 return feeling;
11 }
12 }
実は
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
これもメソッド。
sing()と同じ。
Stringクラスの中に書かれています
37
40. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
クラスの中身
40
41. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
クラスの中身
41
42. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
そういえばこれっ
て何してんの?
42
43. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10Stringと書いてたのと
同じ。「型」。
(データの形式)
Checkenインスタンス
を作ります宣言
43
44. メモリの中
Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
スタック領域
int a = 2
int b = 3
ヒープ領域
Checkenインスタンス
を作ります宣言
1:Chickenインスタンス
44
47. メモリの中
Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
スタック領域
int a = 2
int b = 3
ヒープ領域
Checkenインスタンス
を作ります宣言
1:Chickenインスタンス
オブジェクトが
できる!
47
48. メモリの中
Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
スタック領域
int a = 2
int b = 3
Chicken cはヒープ領
域の1番
ヒープ領域
1:Chickenインスタンス
Chicken型の変数c
48
50. メモリの中
Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 c.sing();
8 }
9 }
10
スタック領域
int a = 2
int b = 3
Chicken cはヒープ領
域の1番
ヒープ領域
1:Chickenインスタンス
Chicken型の変数c
参照
50
55. Javaはオブジェクトの受け渡しを色んなところでする
Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if feeling.equals("元気"){
7 String s = "コケコッコー!!!"
8 return s
9 }
10 }
11 }
55
56. Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if feeling.equals("元気"){
7 String s = "コケコッコー!!!"
8 return s
9 }
10 }
11 }
スタック領域
CheckenクラスのString feeling
はヒープ領域の1番です
ChickenクラスのString sはヒー
プ領域の2番です
PersonクラスのString strはヒー
プ領域の2番です
ヒープ領域
1: 元気
2: コケコッコー!!!
56
57. Javaのおさらい
1 Chicken c = new Chicken();
2 String str = c.sing(“元気”);
3 public class Chicken {
4
5 public String sing(String feeling){
6 if feeling.equals("元気"){
7 String s = "コケコッコー!!!"
8 return s
9 }
10 }
11 }
スタック領域
CheckenクラスのString feeling
はヒープ領域の1番です
ChickenクラスのString sはヒー
プ領域の2番です
PersonクラスのString strはヒー
プ領域の2番です
ヒープ領域
1: 元気
2: コケコッコー!!!
複数の変数に参照されている
57
59. もし参照型でないと...
Javaのおさらい
スタック領域
Chicken a = Checkenインスタンス1
Checken b =Checkenインスタンス1
Checken c =Checkenインスタンス1
めちゃくちゃメモリを食う!
+ スタック領域
Chicken a = Checkenインスタンス1
Checken b = Checkenインスタンス1
Checken c = Checkenインスタンス1
Checkenインスタンス1の変更しよっ
と♪
Checkenインスタンス1全てを変更
しなければならない
59
61. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 Chicken c2; //Chicken型の新しい変数を定義
8 c2 = c;
9
10 c2.weight = 30;
11 System.out.println(c.weight);
12 }
13 }
61
62. Javaのおさらい
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 Chicken c2; //Chicken型の新しい変数を定義
8 c2 = c;
9
10 c2.weight = 30;
11 System.out.println(c.weight);
12 }
13 }
スタック領域
Chicken cはヒープ領域の1番
Chicken c2 = 参照なし
ヒープ領域
1:Chickenインスタンス
スタック領域
Chicken cはヒープ領域の1番
Chicken c2はヒープ領域の1番
新しいインスタンスを作成するので
はなく、参照が渡された!!
(c2にはcの持つ参照がそのまま渡さ
れました)1 2
62
63. Javaのおさらい
1 package study;
2
3 public class Chicken {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッ
コー!");
9 }
10 }
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 Chicken c2; //Chicken型の新しい変数を定義
8 c2 = c;
9
10 c2.weight = 30;
11 System.out.println(c.weight);
12 }
13 }
30
63
64. Javaのおさらい
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 Chicken c2; //Chicken型の新しい変数を定義
8 c2 = c;
9
10 c2.weight = 30;
11 System.out.println(c.weight);
12 }
13 }
ヒープ領域
1:Chickenインスタンス
スタック領域
Chicken cはヒープ領域の1番
Chicken c2はヒープ領域の1番
1番目のChickenインスタンスの情
報を変更している
結局中身一緒!
cとc2両方の
weightの情報が
書き換わった!
64
65. 新しいインスタンスが出来るのは、
new ∼() したときだけ!
Javaのおさらい
ヒープ領域
1:Chickenインスタンス
スタック領域
Chicken aはヒープ領域の1番
Chicken a2はヒープ領域の2番
2:Chickenインスタンス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken a = new Chicken();
7 Chicken a2 = new Chicken();
8 }
9 }
65
78. Javaのおさらい
1 package study;
2
3 public class Chicken extends Bird {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
1.Birdクラスを作る
78
79. Javaのおさらい
1 package study;
2
3 public class Chicken extends Bird {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
1.Birdクラスを作る
2.Birdクラスを継承する
79
80. Javaのおさらい
1 package study;
2
3 public class Chicken extends Bird {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
1.Birdクラスを作る
(fly()メソッドを持つ)
2.Birdクラスを継承する
(Chickenにはfly()メソッドはない)
Personクラス
Chicken c = new Chicken();
c.fly();
3.Chickenクラスのfly()メ
ソッドを呼び出す
80
81. Javaのおさらい
1 package study;
2
3 public class Chicken extends Bird {
4 // メンバ変数
5 int weight = 5
6 // メソッド
7 public void sing(){
8 System.out.println("コケコッコー!");
9 }
10 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
1.Birdクラスを作る
2.Birdクラスを継承する
Personクラス
Chicken c = new Chicken();
c.fly();
3.Chickenクラスのfly()メ
ソッドを呼び出す
飛んでます!
出力
81
85. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
次にかもクラスを作ります
85
86. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
次にかもクラスを作ります
かもは飛べないので、fly()
に 飛べません と出力させたい
86
87. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
かもは飛べないので、fly()
に 飛べません と出力させたい
同じメソッド名だ!
87
88. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
さてどうなる?
Personクラス
Duck d = new Duck();
d.fly();
88
89. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
さてどうなる?
Personクラス
Duck d = new Duck();
d.fly();
飛べません!
出力
89
90. オーバーライドの話
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
サブクラスが優先される
Personクラス
Duck d = new Duck();
d.fly();
飛べません!
90
100. 余談
Javaのおさらい
1 package study;
2
3 public class Duck {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
Personクラス
Duck d = new Duck();
System.out.println(d);
toString()を
オーバーライドしていない状態
でDuckオブジェクトを出力
100
101. 余談
Javaのおさらい
1 package study;
2
3 public class Duck extends Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 }
1 package study;
2
3 public class Bird {
4 // メソッド
5 public void fly(){
6 System.out.println("飛んでます!");
7 }
8 }
Personクラス
Duck d = new Duck();
System.out.println(d);
オーバーライドしていない
状態で出力
study.Chicken@35a8767
出力
( @以降はクラスによって変わるよ )
101
102. 余談
Javaのおさらい
1 package study;
2
3 public class Duck {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 public String toString(){
return “Duckオブジェクトです”
}
8 }
Personクラス
Duck d = new Duck();
System.out.println(d);
toString()を
オーバーライドしてDuck
オブジェクトを出力
オーバーライド!
Objectクラス
102
103. 余談
Javaのおさらい
1 package study;
2
3 public class Duck {
4 // メソッド
5 public void fly(){
6 System.out.println("飛べません!");
7 }
8 public String toString(){
return “Duckオブジェクトです”
}
8 }
Personクラス
Duck d = new Duck();
System.out.println(d);
toString()を
オーバーライドして出力
オーバーライド!
Objectクラス
Duckオブジェクトです
出力
103
111. 余談2
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス オブジェクト生成
スタック領域
Context contextはヒープの1
ヒープ領域
1:InitialContextインスタンス
イメージ図
111
112. 余談2
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス オブジェクト生成(Context
クラスがnew
DataSource() を裏でして
くれるイメージ)
オブジェクト生成(Context
クラスがnew
DataSource() を裏でして
くれるイメージ)
スタック領域
Context contextはヒープの1
DataSource dsはヒープの2
ヒープ領域
1:InitialContextインスタンス
2:DataSourceインスタンス
イメージ図
112
113. 余談2
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス オブジェクト生成
(DataSourceクラスがnew
Connection() を裏でして
くれるイメージ)
113
114. 余談2
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス
オブジェクト生成
(Stringの場合のみ
これでオブジェクトが作ら
れる)
114
115. 余談2
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 PreparedStatement stmt = con.prepareStatemant(sql);
クラス
オブジェクト生成
(Connectionクラスの中でnew
PreparedStatement()をして
くれるイメージ)
115
133. Javaのおさらい
クラス
1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Chicken c = new Chicken();
7 Chicken c2; //Chicken型の新しい変数を定義
8 c2 = c;
9
10 c2.weight = 30;
11 System.out.println(c.weight);
12 }
13 }
型
Chicken型に、Chickenインスタンス(の参照)
をぶちこむ!
133
135. 1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Bird b = new Duck();
7 b.fly();
8 }
9 }
Javaのおさらい
型
インスタンス
135
136. 1 package study;
2
3 public class Person {
4 public static void main(String[] args) {
5
6 Bird b = new Duck();
7 b.fly();
8 }
9 }
Javaのおさらい
型
インスタンス
スタック領域
Bird bはヒープ領域の1番目
ヒープ領域
1: Duckインスタンス
136
150. ウソをついていました
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス オブジェクト生成
(DataSourceクラスがnew
Connection() を裏でして
くれるイメージ)
これ、裏でnew
Connection()はやっていませ
ん
150
151. ウソをついていました
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
クラス オブジェクト生成
(DataSourceクラスがnew
Connection() を裏でして
くれるイメージ)
これ、裏でnew
Connection()はやっていませ
ん
実はConnectionを継承(実装)した
クラスのインスタンスを作ってました
151
153. だけど、Javaでの使い方は
全て同じです
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
どの製品の接続・利用クラスも
DataSourseだったりConnection
だったりを継承(実装)しています
製品によって、それぞれ接続・
利用クラスが提供されています
ここで使う製品を決めていま
す
153
154. だけど、Javaでの使い方は
全て同じです
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
製品によって、それぞれ接続・
利用クラスが提供されています
指定した製品用のインスタンスを
newしてくれるメソッドです
154
155. だけど、Javaでの使い方は
全て同じです
・データベース
Javaのおさらい
1 Context context=new InitialContext();
2 DataSource ds = (DataSource)context.lookup("java:comp/env/
jdbc/***");
3 Connection con = ds.getConnection();
4
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
製品によって、それぞれ接続・
利用クラスが提供されています
MySQLConnecttion
Connection
OracleConnection
PostgreSQLConnectionヒープ領域スタック領域
Connection conは
ヒープ領域の1番目
1: OracleConnection
インスタンス
155
156. 実際の実装をみてみよう
(Connectionインターフェース)
Javaのおさらい
1 package java.sql;
2 import java.util.Properties;
3 public interface Connection extends Wrapper {
4 Statement createStatement() throws
SQLException;
5 PreparedStatement prepareStatement(String
sql) throws SQLException;
6 CallableStatement prepareCall(String sql)
throws SQLException;
7 String nativeSQL(String sql) throws
SQLException;
MySQLConnecttion
Connection
OracleConnection
PostgreSQLConnectio
n
classじゃない!interfaceだ!
156
157. 実際の実装をみてみよう
(Connectionインターフェース)
Javaのおさらい
1 package java.sql;
2 import java.util.Properties;
3 public interface Connection extends Wrapper {
4 Statement createStatement() throws
SQLException;
5 PreparedStatement prepareStatement(String
sql) throws SQLException;
6 CallableStatement prepareCall(String sql)
throws SQLException;
7 String nativeSQL(String sql) throws
SQLException;
MySQLConnecttion
Connection
OracleConnection
PostgreSQLConnectio
n
あ!PreparedStatementだ!
3 Connection con = ds.getConnection();
5 String sql = "SELECT * FROM TEST";
6 stmt = con.prepareStatemant(sql);
継承したクラスの機能を
ポリモフィズムで使ってたんだなあ
157
158. インターフェースとは
メソッドの中身が
記載されていないクラス
Javaのおさらい
1 package java.sql;
2 import java.util.Properties;
3 public interface Connection extends Wrapper {
4 Statement createStatement() throws
SQLException;
5 PreparedStatement prepareStatement(String
sql) throws SQLException;
6 CallableStatement prepareCall(String sql)
throws SQLException;
7 String nativeSQL(String sql) throws
SQLException;
158
195. 使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
継承
195
196. 使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
剣士オブジェクトを作る
継承
196
197. 使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
剣士型の変数sに、
剣士オブジェクトの参照を代入
継承
197
198. 使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
(武器クラスを継承した)普通の剣
オブジェクト生成
継承
198
199. 使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
武器型の変数armに、
普通の剣オブジェクト参照代入
継承
199
200. 剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
剣士オブジェクトの持つ変数armに普通の剣オブジェクトの参照を代入
継承
普通の剣
useArms();
200
201. 剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
剣士オブジェクトのfightメソッドを
実行!
継承
普通の剣
useArms();
201
202. 剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
armは普通の剣の参照を持っている!!
継承
普通の剣
useArms();
参照
202
203. 剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
armは普通の剣の参照を持っている!!
継承
普通の剣
useArms();
参照
普通の剣を
使いました!
と表示するメソッド
203
204. 剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
使い方
Strategy(戦略)パターン
1 public class Player{
2 public static void main(String[] args){
3 Swordsman s = new Swordsman();
4 Arms arm = new NormalSword();
5 s.setArms(arm);
6 s.fight();
7 }
8 } Arms
useArms();
普通の剣
useArms();
勇者の剣
useArms();
錆びた剣
useArms();
剣士
fight(){
arm.useAr
ms();
}
Arms型の
armは普通の剣の参照を持っている!!
継承
普通の剣
useArms();
参照
普通の剣を
使いました!
と表示するメソッド
普通の剣を使いました!
出力
204
206. Strategy(戦略)パターン
剣士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
騎士
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
山賊
fight(){
arm.useArms();
}
setArms(Arms a){
arm = a;
}
Arms型のarm変数
必要なクラスは、
職業の数+アイテムだけ!多様性(ポリモフィズム)を利用
同じ型だけど振る舞いが変わる
(どの武器も同じように扱える!)
arm(Arms型)に
普通の剣が入っていたら、
「普通の剣を使いました!」
勇者の剣が入っていたら、
「勇者の剣を使いました!」
と表示される
206
221. Compositeパターン
1 public interface Component{
2 void add(Component com);
3 void print();
4 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
221
222. Compositeパターン
1 public class Member implements component{
2 String name;
3
4 public Member(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 }
10
11 public void print(){
12 System.out.println(name);
13 }
14 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
222
223. Compositeパターン
1 public class Member implements component{
2 String name;
3
4 public Member(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 }
10
11 public void print(){
12 System.out.println(name);
13 }
14 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
コンストラクタ
223
224. Compositeパターン
1 public class Member implements component{
2 String name;
3
4 public Member(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 }
10
11 public void print(){
12 System.out.println(name);
13 }
14 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
コンストラクタ
実は...
Component com = new Member();
これは、Member()コンストラクタを使って
オブジェクトを生成するって意味なのです
クラスに
クラス名(引数)というコンストラクタ
書いておくと...
好きなコンストラクタを設定することができます
例: Member()
Member(String s)
Member(Component com)などなど...
224
225. Compositeパターン
1 public class Member implements component{
2 String name;
3
4 public Member(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 }
10
11 public void print(){
12 System.out.println(name);
13 }
14 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
thisを付けるとメンバ変数
のnameを意味します
こっちは引数のname
225
226. Compositeパターン
1 public class Member implements component{
2 String name;
3
4 public Member(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 }
10
11 public void print(){
12 System.out.println(name);
13 }
14 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
226
227. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
227
228. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
ArrayListって?
ArrayListは、簡単に言うと便利な配列です。
今の段階では、
add(Object o)メソッドを使うと配列にオブ
ジェクトを追加できる
get(int i)メソッドを使うと、格納した番号の
オブジェクトを取得できるという機能だけ
理解してください
【補足】ArrayListなどのCollectionは、
ジェネリック型やIterator、拡張for文などなどの良い勉強になるよ
なに言ってんの
add( おはよう )
add( こんにちは )
add( こんばんは )
すると..
get(0)で おはよう
get(1)で こんにちは
get(2)で こんばんは
が取り出せる
228
229. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
229
235. Compositeパターン
1 public class MakeMemberList{
2 public static void main(String[] args){
3 Component honbu = new Group("営業本部");
4
5 Component honbuchou = new Member("中田本部長");
6 Component fukuhoubuchou = new Member("高橋副本部長");
7 Component ichibu = new Group("営業1部");
8 Component nibu = new Group("営業2部");
9
10 Component yoshinaga = new Member("吉永部長");
11 Component tanaka = new Member("田中");
12 Component suzuki = new Member("鈴木部長");
13 Component nakajima = new Member("中島");
14 }
15 }
営業1部
営業本
部
営業2部
中田
本部長
高橋
副本部
吉永
部長
田中
鈴木
部長
中島
Group
Memeber
Memeber
Memeber Memeber Memeber Memeber
Group Group
とりあえずオブジェクトを
作ろう
1
235
236. Compositeパターン
1 honbu.add(honbuchou);
2 honbu.add(fukuhoubuchou);
3 honbu.add(ichibu);
4 honbu.add(nibu);
5
6 ichibu.add(yoshinaga);
7 ichibu.add(tanaka);
8
9 nibu.add(suzuki);
10 nibu.add(nakajima);
営業1部
営業本
部
営業2部
中田
本部長
高橋
副本部
吉永
部長
田中
鈴木
部長
中島
Group
Memeber
Memeber
Memeber Memeber Memeber Memeber
Group Group
Groupの中には、GroupもMember
も格納できます
(どっちもComponentインター
フェースを実装しているから!
Component型が使える!)
2
add(Component com)
print()
Group
String name
ArrayList list
236
237. Compositeパターン
1 honbu.add(honbuchou);
2 honbu.add(fukuhoubuchou);
3 honbu.add(ichibu);
4 honbu.add(nibu);
5
6 ichibu.add(yoshinaga);
7 ichibu.add(tanaka);
8
9 nibu.add(suzuki);
10 nibu.add(nakajima);
営業1部
営業本
部
営業2部
中田
本部長
高橋
副本部
吉永
部長
田中
鈴木
部長
中島
Group
Memeber
Memeber
Memeber Memeber Memeber Memeber
Group Group
Groupの中には、GroupもMember
も格納できます
(どっちもComponentインター
フェースを実装しているから!
Component型が使える!)
2
add(Component com)
print()
Group
String name
ArrayList list
本部にMemberとGroupオブジェクト格納
1部にMember格納
2部にMember格納
237
238. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
add(Component com)メソッド
を使うと、comを
ArrayList(便利な配列)
の中に格納します
Groupクラス
238
243. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
add(Component com)
print()
Component
インターフェース
add(Component com)
print()
Group
add(Component com)
print()
String name
ArrayList list
String name
Member
まず最初に、自分のオブジェクト
の名前を出力します
Groupクラスのprintメソッドをみてみよう
243
244. Compositeパターン
1 public class Group implements Component {
2 ArrayList list = new ArrayList();
3 String name;
4 public Group(String name){
5 this.name = name;
6 }
7
8 public void add(Component com){
9 list.add(com);
10 }
11
12 public void print(){
13 System.out.println("¥n" + name);
14 for(int i = 0; i < list.size(); i++){
15 Component com = (Component)list.get(i);
16 com.print();
17 }
18 }
19 }
次に、ArrayListに格納されているComponent型のオブジェクトを取り出し、取り出したオブジェクトの
print()を実行します
Groupクラスのprintメソッドをみてみよう
for文で、格納されている全てのオブジェクト
のprint()を実行してるよ
244