- PR -

サーブレットの定義

投稿者投稿内容
来夏
会議室デビュー日: 2004/09/24
投稿数: 11
投稿日時: 2004-09-25 01:11
mogeさん何度も返答ありがとうございました。
とてもよくわかりました。
本当にありがとうございました!
ペンギン
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-27 11:32
はじめて投稿させていただきます。

皆さんのやり取りを拝見させていただき、サーブレットのメソッド内で定義したHOGEクラスのオブジェクトのインスタンス変数は、共有されないでクラス変数は共有されるってことはわかりました。

そして、サーブレット内のメソッドで定義したローカル変数も共有されないということはわかりました。

では、HOGEクラスのクラスメソッドは、同時にアクセスされたときにクラスメソッド内のローカル変数はどのようになるのでしょうか?

あまり説明が得意でないのでYOU@ITさんのコードを引用させていただきます。

コード:

public class HogeServlet extends HttpServlet {
	private String a; // 共有される
	private static String b; // 共有される

	public void init(HttpServletRequest req,HttpServletResponse res) throws Exception{
			  String c = ...; // 共有されない
			  Moge moge = new Moge(); // 共有されない
	}
}

class Moge {
	private String d; // 共有されない
	private static String e; // 共有される

	public static String penpen(String f){
	//fは共有されない?戻り値も共有されない? 
	  int g; // gは共有されない? 
	}
}



どうかご指導をよろしくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-27 12:50
引用:

ペンギンさんの書き込み (2004-09-27 11:32) より:
皆さんのやり取りを拝見させていただき、サーブレットのメソッド内で定義したHOGEクラスのオブジェクトのインスタンス変数は、共有されないでクラス変数は共有されるってことはわかりました。


「メソッド内で定義した」の意味がよくわかりませんが、「インスタンス変数」であれば、
どこで生成されようが共有されます。インスタンス変数とローカル変数の区別は大丈夫でしょうか。

引用:

では、HOGEクラスのクラスメソッドは、同時にアクセスされたときにクラスメソッド内のローカル変数はどのようになるのでしょうか?


クラスメソッドでもあっても、ローカル変数は共有されません。
ペンギン
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-27 15:09
すいません。
書き方がよくありませんでした。

引用:

「メソッド内で定義した」の意味がよくわかりませんが、「インスタンス変数」であれば、
どこで生成されようが共有されます。インスタンス変数とローカル変数の区別は大丈夫でしょうか。



下記のソースで言えば、HogeServlet内のinitメソッド内のMogeクラス内のインスタンス変数dのことです。
ローカル変数とは、initメソッド内の変数cのことですよね?
ちなみにメソッドの戻り値、引数もローカル変数になるのでしょうか?

コード:
public class HogeServlet extends HttpServlet {
	private String a; // 共有される
	private static String b; // 共有される

	public void init(HttpServletRequest req,HttpServletResponse res) throws Exception{
			  String c = ...; // 共有されない
			  Moge moge = new Moge(); // 共有されない
	}
}

class Moge {
	private String d; // 共有されない
	private static String e; // 共有される

	public static String penpen(String f){
	//fは共有されない?戻り値も共有されない? 
	  int g; // gは共有されない? 
	}
}



ご指導よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-27 15:46
引用:

ペンギンさんの書き込み (2004-09-27 15:09) より:
下記のソースで言えば、HogeServlet内のinitメソッド内のMogeクラス内のインスタンス変数dのことです。


ああ、そういうことですか。ローカル変数(この場合はmoge)で参照されているオブジェクトの
インスタンス変数(この場合はMogeクラスのd)であれば共有されません。ですので、その理解
で正しいと思います。
ペンギン
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-27 18:46
ukさん、たびたびのご指導ありがとうございます。

インスタンスメソッド及びクラスメソッドの引数も共有されないと考えてよろしいのでしょうか?(引数は、ローカル変数と同じようなものだから)

しつこいようで申し訳ありませんが、ご指導よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-28 10:59
引用:

ペンギンさんの書き込み (2004-09-27 18:46) より:
インスタンスメソッド及びクラスメソッドの引数も共有されないと考えてよろしいのでしょうか?(引数は、ローカル変数と同じようなものだから)


はい、その通りです。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-09-28 11:19
引用:

ukさんの書き込み (2004-09-28 10:59) より:
引用:

ペンギンさんの書き込み (2004-09-27 18:46) より:
インスタンスメソッド及びクラスメソッドの引数も共有されないと考えてよろしいのでしょうか?(引数は、ローカル変数と同じようなものだから)


はい、その通りです。



横ヤリですみません。
引数がオブジェクト参照の場合は、気をつけないといけないですよね。

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