たいやきさんからの回答がないですが(アクセスログも見ましたが、私が
質問を書いた以後ここを見ていないようです)、
たいやきさんって、ハンドルと発言内容からして、こちらで質問されている
taiyaki123さんですよね?
http://oshiete.goo.ne.jp/qa/6438120.html
>せっかく回答してくださって申し訳ないのですが、100%の自信がないのであれば
>回答くださらなくても結構です。ありがとうございました。
……まあこれはさておき。
他にこちらでも質問されているようですが、
http://oshiete.goo.ne.jp/qa/6438154.html
>信じられないのは、インスタンス変数が書き換えられるということです。
>サーブレットではインスタンス変数が共有されるのは理解していますが、
>サーブレットから呼ばれるインスタンスで定義されているインスタンス変数も
>それに該当するのでしょうか。
>それとも、サーブレット内だけの話で、サーブレットから呼ばれるインスタンスでは
>インスタンス変数は独立していると思ってよいでしょうか。
>後者の認識ですが、こういう書き方をされると、サーブレットから呼ばれた先でも
>インスタンス変数が共有されると読めて、怖くて仕方ないです。
どう見ても、明らかに「インスタンス」を理解してないですよね。
(そしておそらくは「参照」も)
「サーブレットから呼ばれるインスタンス」って、そもそもインスタンスは
呼ぶものではありません。呼ぶことができるのは「インスタンスのメソッド」です。
揚げ足取りに見えるかもしれませんが、おそらくこのケースでは違います。
なぜなら、No.1の回答の方への「お礼」のところに、taiyaki123さんは
以下のように書いているからです。
>念のため質問内容が分かるようなソースをつけます。
>SampleClassで定義されているメンバー変数(staticではない変数)が、
>スレッド毎に共有されるかという質問です。
>servletclass extends HttpServet{
> public int a = 0;
> public void doPost(){
> SampleClass sc = new SampleClass();
> }
>}
>
>SampleClass{
> public int x = 0;
>}
>このようなプログラムがあったとします。
>このプログラムを複数の人が、同時にアクセスした場合に、
>SampleClassで定義されているメンバー変数のxが共有されるかという意味です。
>もちろん、共有されないという認識です。
新しいSampleClassをdoPost()のたびにnewしてるんだから、
共有されないのは当たり前です。サーブレットは何も関係ありません。
以下も。
http://oshiete.goo.ne.jp/qa/6438120.html
>オブジェクトを作って実行するなら
>testclass tc = new testclass();
>tc.method();
>というように2行です。
>オブジェクトを作らないなら、testclass.method()
>というように1行です。
なにしろtaiyaki123さんはインスタンスを理解していないので、
インスタンスは、「メソッドを呼ぶときにnewするもの」でしかないのでしょう。
だから必要性もわからないし、「サーブレットから呼ばれるインスタンス」という
トンチンカンな言葉も出てくる。
もしこの人がプロのJavaプログラマなのだとすれば(想像したくないですが)、
よく聞く、staticメソッドだけで開発している職場なのかもしれません。
インスタンスを理解していないので、「どのインスタンスのメソッドを呼ぶのか」と
いう発想ができず、その場でnewして呼んでしまう。これは、私が以下のページで書いた
画面に線を引くたびにCanvasをnewした新人君と同レベルの発想です。
つまり、まったくのド素人です。
(いや、こんなのと一緒にしちゃ新人君に失礼ですが)
本来であれば、「疑りぶかい~」は、こういう人を対象読者としている
はずなのですが……
サーブレットの件で当然の疑問を提示しているNo.1やNo.2の人に、
>ですので、以下の回答は間違いですね。
とか
>まったくもって間違った回答ですね。
>サーブレットからインスタンスを呼ぶことができないなんて・・・。
とか答えて、せっかくのアドバイスを拒絶してしまうような人が相手では、
私の文章が理解されなかったのだとしても、私のせいではないでしょう。
http://oshiete.goo.ne.jp/qa/6402168.html
このへんも、ねえ……