- PR -

サーブレットの定義

投稿者投稿内容
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-28 11:35
引用:

YOU@ITさんの書き込み (2004-09-28 11:19) より:
横ヤリですみません。
引数がオブジェクト参照の場合は、気をつけないといけないですよね。


まあそれはそうなんですが、それを言い出すとローカル変数も安全とは言いがたくなって
しまいますよね。あくまでそのクラスの範囲では、ということで。
ペンギン
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 12:04
ukさん、YOU@ITさんご指導ありがとうございます。

なにやらまだまだ奥が深い部分があるようですね。

そういう部分も含めて理解していくためには、やはり参考書や実際の経験が必要になってくるのでしょうね。

何かよい参考書などがありましたら、お教え頂けると幸いです。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-09-28 13:18
引用:

ukさんの書き込み (2004-09-28 11:35) より:
まあそれはそうなんですが、それを言い出すとローカル変数も安全とは言いがたくなって
しまいますよね。あくまでそのクラスの範囲では、ということで。


ローカル変数に別の場所で生成されたインスタンスへの参照をセットする場合...等でしょうか。

引用:

ペンギンさんの書き込み (2004-09-28 12:04) より:
何かよい参考書などがありましたら、お教え頂けると幸いです。


超有名なので既にご存知かもしれませんが、「Effeciteve Java」がおすすめです。

# そういえば同書に「防御的コピー」と言う手法がありますが、
# 正直そこまでやるか、って感じでした。
tak3
ベテラン
会議室デビュー日: 2004/04/15
投稿数: 80
お住まい・勤務地: 菜の花・銀杏
投稿日時: 2004-09-28 13:25
そんなに難しくないですよ。

コード:
public class Hoge {
    Object v1; // インスタンス変数
    static Object v2; // クラス変数
}
----
        Hoge a = new Hoge();
        Hoge b = new Hoge();
        Hoge c = a;


という場合に、 aのインスタンス変数(v1)を変更したらcのv1が変わりますよってだけです。(bのv1は当然変わりません)
クラス変数(v2)の場合は、a,b,cのどれかで変更したものが他のインスタンスというかクラス全体に反映します

すごく当たり前のことですよね。(入門書でも解説されてると思います)

Servletの場合、1つのインスタンスを複数のスレッド(リクエスト)で使いまわされるので
スレッドセーフにしない予期せぬ動作をしますよというだけです
(上記例の、Hoge a と Hoge c の関係)

変数の種類については、Java言語規定にあります
http://www.y-adagio.com/public/standards/tr_javalang2/typesValues.doc.html#28536
ペンギン
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 15:18
YOU@ITさん、tak3さん、ご指導ありがとうございます。
引用:

超有名なので既にご存知かもしれませんが、「Effeciteve Java」がおすすめです。


YOU@ITさん、早速本屋にいってどのようの内容なのか(私が今の知識で理解できるのか)をチェックしてみます。

引用:


コード:
 
public class Hoge {
    Object v1; // インスタンス変数
    static Object v2; // クラス変数
}
----
        Hoge a = new Hoge();
        Hoge b = new Hoge();
        Hoge c = a;




という場合に、 aのインスタンス変数(v1)を変更したらcのv1が変わりますよってだけです。(bのv1は当然変わりません)
クラス変数(v2)の場合は、a,b,cのどれかで変更したものが他のインスタンスというかクラス全体に反映します

すごく当たり前のことですよね。(入門書でも解説されてると思います)


tak3さん、こちらの意味は、参照型変数aとcで同じインスタンスを参照してしまっているaのインスタンス変数(v1)を変更したらcのv1も変わってしまいますってことですよね?
私が持っている参考書にも解説されていたと思います。


私はわからないことだらけで、これからもukさん、YOU@ITさん、tak3さんや他の皆さんにもご指導いただくことがあると思いますが、よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)