JavaServletが同時実行された(同一クラスのインスタンスが複数生成された?)時に、どうも不具合が起きているようで、その解決策を検討しています。
その中で、JAVAのスコープについて再度勉強し直していたのですが、以下の記述がいまいち理解できなかったので、教えて下さい。
<アクセス修飾子private>
同じクラス内からしか呼び出せないが、同じクラスから作られたオブジェクト同士であれば、相互の private メンバーにアクセスできる。
出典:http://msugai.fc2web.com/java/permitmod.html
「同じクラス内からしか呼び出せない」は分かります。ですが、「同じクラスから作られたオブジェクト同士であれば、相互の private メンバーにアクセスできる」というのが、具体的に想像できないのです。これは、同じクラスから生成されたインスタンスが複数存在する場合に、別のインスタンスのクラス変数の値を参照してしまう場合がありうるということでしょうか?
ちなみに、改修を検討しているクラスは、クラス変数をprivate、メインとなるメソッドAはprotected、メソッドAから呼び出されるメソッドBがpublicで定義されています。クラス変数はメソッドA・B両方から参照されています。
少なくともメソッドBはprivateに変更しなくてはいけないな、とは考えています。
No.3ベストアンサー
- 回答日時:
サーブレットにメンバ変数?
サーブレットは、ひとつのインスタンスで複数のブラウザからの
要求を同時に処理するので、メンバ変数は使わないのが定石。
使いたい場合はスレッドセーフにするために、細心の注意を払って
スレッド同期を行うか、処理毎にサービスクラスのインスタンス
を生成するようにします。
大丈夫ですか?
回答ありがとうございます。
>サーブレットは、ひとつのインスタンスで複数のブラウザからの
>要求を同時に処理するので、メンバ変数は使わないのが定石。
そうなんですね!基本を忘れていました。多分、作った人も、あんまり詳しくない人だったんだと思います。
メンバ変数の定義をメソッド内に移動し、必要があれば、メソッド間は引数で受け渡しするように修正します。
ありがとうございました。
No.2
- 回答日時:
もちろん「2」と表示されるんですが, それで「問題はない」とするなら何が問題なのでしょうか? いちおう
「同じクラスから生成されたインスタンスが複数存在する」場合に「別のインスタンスのメンバ変数の値を参照」している
例のつもりとして書いたんですけど....
ああいう場合でないとするならどういう状況なのか, 簡単な例で書いてもらえませんか?
返信が遅くなり申し訳ありませんでした。
返答を考えている間に、別作業が入ってきてしまって。
tknakamuriさんからご指摘頂きましたが、そもそもサーブレットのインスタンスは1つなんですね。
もう一度基礎を復習し直してから改修作業に入りたいと思います。
No.1
- 回答日時:
あるクラスにおいて private なメンバーは, その同じクラスのメソッドから自由にアクセスすることができます. だから「同じクラスから生成されたインスタンスが複数存在する場合に、別のインスタンスのクラス変数の値を参照してしまう」こともできますし, あるいは「クラスメソッドから private なインスタンスメソッドを呼び出す」ことも可能です.
例えば
public class A {
public static void main(String[] args) {
A a = new A(1), b = new A(2);
a.print(b);
}
public A(int x) { this.x = x; }
private void print(A t) { System.out.println(t.x); }
private int x;
}
とか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
オブジェクト参照がオブジェク...
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
「インスタンス」の意味をわか...
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
メソッドの引数としてのthisの意味
-
クラスのインスタンス名をクラ...
-
エクセル(複数インスタンス)...
-
他のファイルの変数参照
-
別のフォームでインスタンスを使う
-
変数の参照でエラーが出てしま...
-
文字列を日付に変換でParseExce...
-
インスタンス生成で、○○.xxx();...
-
フィールドでのnewとコンストラ...
-
C# 自作クラスのキャストについて
-
フォームのCheck boxとOLEObjec...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
次の日本語の意味を教えて下さい
-
複数の変数を宣言する時、同時...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
オブジェクト参照がオブジェク...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
フォームの存在をチェックする方法
-
エクセル(複数インスタンス)...
-
SQLを連続発行する時の正しい(?...
-
C#の構造体の開放のしかた
-
newしないインスタンス?実体化...
-
他のファイルの変数参照
-
javaのクラスの作り方、エラー...
おすすめ情報
文中の「クラス変数」はメンバ変数の間違いでした。(static無し)
メインとなるメソッドAはserviceメソッドです。
staticは、当該クラス内では一切使用されていません。
JAVAを扱うのは久しぶりなもので、失礼致しました・・・