no title

1: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:48:29 ID:/QmwZ/KV0

みんな俺にJavaプログラミング教えてくれーー

詳しい人教えて


スポンサードリンク

2: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:49:08 ID:szOCe4SK0

お洗濯ジャバジャバ


4: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:49:54 ID:/QmwZ/KV0

>>2
洗濯のやり方は今度でいいです


3: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:49:50 ID:n30FtDZ00

本屋で入門書を買う


おわり

スッキリわかるJava入門
中山 清喬 国本 大悟
インプレスジャパン
売り上げランキング: 1,152

5: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:50:25 ID:/QmwZ/KV0

>>3
入門書とかいらねえwww使えねえだろ多分


9: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:52:04 ID:KDy7mdUI0

まずeclipseをダウンロードします


12: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:52:40 ID:/QmwZ/KV0

>>9
いやもってるからな


7: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:51:20 ID:Yq+iAoDz0

セッターとゲッター作っとけばいい


10: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:52:08 ID:/QmwZ/KV0

>>7
まあ使うときは使うが
そんなところはどうでもいい


13: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:53:07 ID:SqN/eOs+0

>>10
何が知りたいんだよ


14: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:53:39 ID:/QmwZ/KV0

>>13
んじゃ今日はリフレクションにするか
誰か講座開いてくれ


19: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:56:14 ID:SqN/eOs+0

リフレクションという概念それ自体が分からないの?
それとも、リフレクションの使いどころ?


23: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:58:57 ID:/QmwZ/KV0

>>19
リフレクションを以前いじったときに変に詰まったので
誰かに問題とか出したりとか講座を開いてほしかった


25: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:03:25 ID:SqN/eOs+0

>>23
どんなところで詰まったのかkwsk


31: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:15:06 ID:/QmwZ/KV0

>>25
インスタンスを取得するまでの一連の流れ


16: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:54:51 ID:/QmwZ/KV0

第一回java講座 リフレクショ


17: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:55:25 ID:SqN/eOs+0

ま、Javaなんて似非オブジェクト指向の概念が理解できてりゃいい

public class Person {
private String _name; // getter, setter 省略

}

さて、コンストラクタはどうなる?


21: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:57:24 ID:/QmwZ/KV0

>>17
public Person(String _name){
this._name = _name;
}


22: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 01:58:41 ID:3gEdpYTQ0

prefixが気になる…


24: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:01:16 ID:SqN/eOs+0

あ、すまん
コンストラクタを定義しない状態でコンパイルしたら、どうなるか、って質問だった

ちなみに、>>21のコードはよくない

_name という名前の_は、その変数を内部に隠蔽するよ、って気持ちが込められている。
それを外に公開するのはよろしくない。何のためのgetter/setterなのか。

書くなら、

public class Person {
private String _name;
public void setName(String name) {
this._name = name;
}
// getter 省略

public Person(String name) {
this.setName(name);
}
...


26: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:05:45 ID:/QmwZ/KV0

>>24
うん確かにそのとうりですねカプセル化の意味がないね、そこまで深く考えてないで書いた

ちなみにコンパイルは通るって答えたらいいの??
デフォルトコンストラクタが呼ばれるって答え??


28: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:07:41 ID:SqN/eOs+0

>>26
コンパイル時にデフォルトコンストラクタが「生成される」と言えるとベスト


29: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:11:24 ID:/QmwZ/KV0

>>28
はい、生成ですね


30: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:12:04 ID:SqN/eOs+0

せっかくコンストラクタの話題が出たので、もう少し問題を出そう

public class Hoge {
 private int a = 0;

 { a = 100; }
 Hoge() { a = 200; }
 { a = 300; }

}

さて、これはコンパイルが通るか(実際にコンパイルしないで答えてくれ)
コンパイルが通る場合、aには何が代入されるのか


32: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:15:08 ID:brrU0ckv0

基礎じゃねえか


33: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:17:07 ID:/QmwZ/KV0

質問
それは
Hoge hoge = new Hoge();
をメインでやったあとの状態aの値を聞いてるんですか??


36: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:21:59 ID:SqN/eOs+0

>>33
失礼
>>33をやった後の状態のaを聞いてる


40: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:27:20 ID:94LSpxF70

???
>>30ってスタティックイニシャライザ使ってなくね?


42: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:31:05 ID:SqN/eOs+0

>>40
おっと、すまん
staticキーワードが抜けてた
インスタンスイニシャライザになってた
ま、結果は一緒だけども


34: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:20:15 ID:/QmwZ/KV0

一応↑だと仮定して200と予想してみる。


38: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:23:09 ID:SqN/eOs+0

>>34
正解
Javaのスタティックイニシャライザは、「定義された順番に呼ばれる」
定義された順番に呼ばれない言語もあるから注意してくれ


39: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:24:15 ID:/QmwZ/KV0

>>38
なるほど勉強になった


35: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:21:02 ID:SqN/eOs+0

public class Person {
private String _name;
public void setName(String name) {
this._name = name;
}
// getter 省略

public Person(String name) {
this.setName(name);
}

public class Tester {

public static void main(String[] args) {
// (1)この方法は、クラスを直接リンクしなきゃいけない
Class c1 = Person.class;

// (2)こっちの方法は、クラスを動的にリンクするので、実行時に実行環境に対象のクラスが入っていればいい
Class c2 = Class.forName("Person");

}
}


(2)の方法は、特にテスト時に、連結対象のプログラムがまだ出来上がっていないから、ダミーのプログラムでとりあえず動かしたい、ってときに重宝する。
Personという名前のダミークラスを実行環境に用意しておいて、コンパイル無しで後から交換できる


ここまでOK?


37: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:22:25 ID:/QmwZ/KV0

>>35
OKOKです!


41: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:28:05 ID:SqN/eOs+0

ちょっと例を変えるか

// 名前をとるだけのインタフェース
public interface Person {
String getName();
}

// Personインタフェースの実装クラスその1
public class Taro implements Person {
@Override
public String getName() { return "太郎"; }
}

// Personインタフェースの実装クラスその2
public class Hanako implements Person {
@Override
public String getName() { return "花子"; }
}


44: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:37:16 ID:SqN/eOs+0

public class Tester {
public static void main(String[] args) {
// (2)こっちの方法は、クラスを動的にリンクするので、実行時に実行環境に対象のクラスが入っていればいい
// プロパティファイルや環境変数、起動引数等でクラスパスを指定することで、
// 起動時に読み込みたいクラスを指定できるようになる
Class c = Class.forName(args[0]);
// 実行例: java Tester Taro

// これをインスタンス化する
// new Taro(); と同じ
// ここで、リフレクション対象のクラスは、「デフォルトコンストラクタ」を備えておくことをおすすめする
// いちいちインスタンス生成時に、個別具体的なパラメータが必要になってくると、抽象的なプログラムが書きづらくなるから
Object obj = c.newInstance();

// 生成されたインスタンスは「Object」型になっている
// このままじゃ使いものにならないので、先ほど定義したインタフェースが効いてくる
Person p = (Person) obj;
System.out.println("name = " + p.getName());
}
}


これで個別具体的な実装と、それを呼び出す側を分離できた
これを疎結合にする、という


47: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:48:02 ID:/QmwZ/KV0

>>44
なるほどー具体的なパラメータはない方がいいのか
確かに抽象的なプログラムがかきづらいね


43: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:32:17 ID:/QmwZ/KV0

問題は?


45: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:40:12 ID:SqN/eOs+0

>>43
改行多すぎ警告で萎えるわ
>>44のテクニックだけで十分使えるけど、あと何が知りたい?
実際はSpringみたいなDIコンテナに任せるといいけど


46: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:43:25 ID:/QmwZ/KV0

>>45
改行すまなかった。おk何となく理解した。ジェネリックって指定しなかったけ??
Class<?> c = Class.forName("");
みたいな感じでワイルドカードとか指定してたような記憶が


48: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:52:33 ID:SqN/eOs+0

>>46
どっちでもコンパイルは通るし、実行できる
型安全にするならジェネリクスを指定したほうがいいね


50: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:54:54 ID:/QmwZ/KV0

>>48
サンクス、とりあえずなんとか理解できたので今度いろいろやってみたいと思う


49: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:54:17 ID:SqN/eOs+0

>>47
それに、コンストラクタ自体はインタフェース化できないからね
フィールドへの設定はgetter/setterを動的に呼び出すことで設定したほうが汎用性が高い


51: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 02:59:45 ID:/QmwZ/KV0

次回は第二回java講座はjava8講座です。
では、またいつかお会いしましょう。
さようなら~


52: 以下、名無しにかわりましてVIPがお送りします 2014/01/06 03:00:55 ID:SqN/eOs+0

ラムダ式ならまかせろ
おやすみ


元スレ:http://hayabusa.2ch.net/test/read.cgi/news4vip/1388940509/