• ベストアンサー

メソッドの書き方

Java初心者の者です。メソッドのルールがまだ良く分かりません。少し見て頂けますか? int abc = Util.getInt(request, "abc" , 1); String countQuery="select count(distinct no) from ******** "; StringBuffer selectQuery=new StringBuffer(); selectQuery.append("select no, abc, age from DB "); というソースがあるのですが、Util.getInt(request,abc,1)の使い方が分かりません「Util.getInt」で調べても答えになるサイトは出てこないですし。誰か教えてくれませんか? あとQuery関連も分かりません。selectQueryとかcountQueryとか・・・

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

>あと()って何のためについているのですか?引数とか未だに理解できないです。(哀泣 そっか、引数のイメージがつかないんですね。勘違いしてました。 「自販機」クラスがあって、100円のジュースを買ったときのお釣りを計算してくれるメソッドがあったとします。 あなたはこれだけで答えが出せますか?? 100円を入れた人にはお釣りはかえってこないし、1000円を入れた人には900円かえってきますよね??ではこれをどうやって区別したらいいのでしょうか? ここで言う100円や1000円が引数です。引数を使って初めてメソッドの答えが出てきますね? つまり、このメソッドは例えば int juice100(int money) { if(money<100) return 0; else return money-100; }; みたいになります。(実装方法は人によりますが)引数のイメージがつきましたか?

javatea_1985
質問者

お礼

 どうしてint moneyとしないのかという解答としては メソッドを定義しておいて後で繰り返し使えるようにするということでいいのですよね。 考えないで発言してしまいました。 すいません。。 ただ、メソッドを作成する理由は 他にもあるのですか?

javatea_1985
質問者

補足

int juice100(int money) { if(money<100) return 0; else return money-100; }; なるほど、引数を戻り値と勘違いしていました。 ただ、第一文でint juice100(int money)のところを単に int moneyとしてしまうのはダメなのでしょうか? あと上記の例文ではmoneyに値をいつ代入するのでしょうか?教えていただけますか?

その他の回答 (5)

回答No.6

どのような経緯で、どのような目的で質問されているのかが不明ですが、まずは、Javaの入門書を読まれてはいかがでしょうか? または、入門レベルの情報が書かれているサイトを見るのもいいのではと思います。 ご質問の中で示されているソースは、DBアクセスするServletかStruts Actionなどの一部だと思いますが、基礎的なことを理解しないまま、このレベルのソースを読むのは、少し無理があるように思えます。

参考URL:
http://www.hellohiro.com/
javatea_1985
質問者

補足

 ご意見ありがとうございます。 やはり時期尚早ですよね。 それを客観的に言って頂けただけでも 気が楽になりました。 (実は入門書を読む余裕が無いのです・・) 基礎レベルから理解していきたいです。

回答No.4

>Sample sample = new Sample(); という記述を見るのですが、これはインスタンスの生成ですよね。 そうですね。Sampleクラスのインスタンスを生成しています。 >インスタンスを生成するのはメソッドを呼び出すため・・・。 別にメソッドを呼び出すためだけでもないですが。 例えば String str="test"; といってStringクラスのstrを作ってstrをそのまま参照するしか使わないことだってありますよね?(つまり、Stringクラスのsubstringとかのメソッドを呼び出さないこともありますよね??) >クラスのSampleでは代用できないのですか?だってクラスのSampleとsampleは同じものなのでしょう??そこが分かってないです。 正確には同じものではありません。 クラスとはわかりやすく言うと例えば「人間」という定義を示しているだけのものです。で、実際にイチロー、松井という「人間」がオブジェクトです。 つまり、 Sample・・人間 sample・・イチロー、松井 という関係です。わかりましたか?? Javaってこういう感じの使い方が多いんです。 例えば、人間と言うクラスに100mを走る時間というメソッドがあるとします。 int run_100m(); です。 これって人間クラスにこのメソッドがあったとしても何が返ってくるかはわかりませんよね??人によって走る速さは違うわけですから。 これがイチローや松井と言うオブジェクトができていれば答えが返ってくるといったイメージです。 >あと()って何のためについているのですか?引数とか未だに理解できないです。(哀泣 何のためって言われても難しいですが、それがないとどうなるかわかりますか?? つまり、()がないとメソッドと変数の区別がつかないのです。 ところで、requestは解決しましたか?

javatea_1985
質問者

お礼

||Sample・・人間 |sample・・イチロー、松井 |100m走る 非常に分かりやすい説明ありがとうございます。 今まで乗り物ー自動車・飛行機等の例えは聞いたことがあったのですがそれ以上の枠で考えられませんでした。ただ、どのレベルが問題設定にふさわしいかなどのイメージがわかないので少し例題を見て見ます。 requestについては、結局同じような使い方をしている文しか見受けられませんでした。すいません

回答No.3

>(1)でインスタンスを生成しているのは分かるのですがなぜそんなことをするのか これはまた答えづらい質問ですねぇ。。 どのレベルで答えていいのかはわかりませんが。 1) ソースで何回も同じものを使いたいときはfinal int sum=100;とかやって変数を使いたくなりませんか?? 2) (new StringBuffer()).append("select no, abc, age from DB "); って書いてもいいですけど、そのappendしたものを参照できないので、その瞬間意味がないものとなってしまいます。 3) staticなメソッドはUtil.getIntのようにしてインスタンスを生成しなくても呼び出せますが、staticでないメソッドは一旦インスタンスを生成しないと呼び出せません この3つの答えのどれかで満足するものはありますか??もし3つとも答えの観点が違うならそれを伝えてください。 >(2)でbクラス下のappendメソッド利用しているのはわかるのですがなぜ要素を括弧でくくるのかなどが分かりません。せっかく説明してもらっているのにその説明文すら分からない感じです。。 えーっと、Javaでは"aaa"と書くと即それがStringクラスのオブジェクトになるんです。 つまり、 String selectstr="select no, abc, age from DB "; b.append(selectstr); と書いてもいいんですが、それを省略しただけです。(このとき下のappendメソッドは引数にStringクラスのオブジェクトを取っているので引数が数あるappendメソッドの中からappend(String str) を選択しました) 補足 上の1)の答えにつながると思いますが、 String selectstr="select no, abc, age from DB "; b.append(selectstr); とした方が、selectstrを何回も使いたいときには便利です。つまり、bの他にcとdがあったとして String selectstr="select no, abc, age from DB "; b.append(selectstr); c.append(selectstr); d.append(selectstr); とした方が b.append("select no, abc, age from DB ");  c.append("select no, abc, age from DB ");  d.append("select no, abc, age from DB "); と書くより便利です。特に"select no, abc, age from DB "という部分を日本語にしたい!なんて思ったときには変更しなきゃいけない行数に違いが出てくることが一目瞭然だと思います。 >ただ、変数のrequestが結局なんなのかはよく分かりませんでした。 これを今あなたが開示しているソースだけ見て何なのか分かれといっても無理な話です。メソッドgetIntの引数の情報も開示していないわけですし。("abc",1と言う表記からStringとint等の整数を引数として使っていることはわかりますが) そのソースの上の方かどこかに ~ request=~~; という表記があるはずなのでそれを示してください。 (多分java.sqlパッケージにあるクラスかインターフェースのどれかだとは思ってますが。ConnectionかResultSet辺りかな?)

javatea_1985
質問者

補足

 インスタンスを生成する目的ですが、3番が一番近いと思います。超初心者の人に丁寧に答えて頂きありがとうございます。 その、、よく Sample sample = new Sample(); という記述を見るのですが、これはインスタンスの生成ですよね。インスタンスを生成するのはメソッドを呼び出すため・・・。クラスのSampleでは代用できないのですか?だってクラスのSampleとsampleは同じものなのでしょう??そこが分かってないです。あと ()って何のためについているのですか?引数とか未だに理解できないです。(哀泣

回答No.2

こんにちは。 まずはgetIntについてですが、 おそらく、これは 『requestという配列?か何かから"abc"という名称の列の1番目の値をint型というデータ型で取得する』 という意味だと思います。 思います、という風になってしまっている理由が2つあります。 1つ目は、getIntの上についているUtilが何なのかいまいちよくわからないということです。 getIntはメソッドで、Utilはおそらくクラスなんですが、 Utilというのはいわば略称なので、色々な可能性があります。 このクラスを修飾子抜きで呼び出せるということは、 このクラスにまつわる、import文が、 このテキストのもっと上の方にあるのではないかな? と思いました。 2つ目ですが、『request』っていうワードが出てきますよね。 これは変数です。 ここではこの変数の宣言部分が省かれてますので、 どういったデータ型のものなのかが、 残念ながらわかりません。 名称的には、画面入力によりプログラムに渡された値か何かでしょうか? あと、Queryですが、 まずselectQueryとかcountQueryは変数名です。 ここで使用している名前にすぎません。 上記のテキストでは、宣言するところまでしか記述されていませんので、 どのように使用しているかは、わかりませんが、 この2つには違いがあります。 それは、データ型です。 countQueryはString型で宣言されている変数で、 文字列を一気に代入しています。 一方selectQueryは、StringBuffer型の変数ですね。 こちらは、中身を一気に代入するのでなく、 ちょこちょこと後ろに継ぎ足していくことができます。 ここでは、SQLが代入されていますが、 例えばif文などを使い、後ろに続く文章を 場合によって変化させ、継ぎ足すことが可能です。 どちらもこの段階では、SQLの文字列に過ぎませんから、 この後、このSQLを解釈して、DBから値を取得したりするメソッドに渡すのでしょう。 メソッドとは、同じ処理を毎回全文書かなくても良いように、 名前と、処理に必要な値(引数)の個数と型、処理の結果発生する値(戻り値)の型 で識別できるような形にして、 他の場所からも呼び出せるようにしたものです。 メソッドを利用すれば、同じことを何度も書かなくてすみます。 それ以外にも、色々な利点はあるのですが、 まずは、何度も書かなくて済む程度に考えておけばよいと思います。

javatea_1985
質問者

補足

丁寧な説明をありがとうございます。 何とか付いていけたと思います。 ただ、変数のrequestが結局なんなのかはよく分かりませんでした。他人のソースを見ているのでそうなってしまうのですが、このrequestというパラメーターはデータベースの何を表す記号なのでしょうか? NoとNameの2つのカラムを持った行数20のデーブルなのですが・・

回答No.1

まず、Javaで使える一般的なクラスは以下のHPに書かれています。まずはそこでチェックすることを心がけましょう。 で、今回のUtil.getIntですが、javax.rmi.CORBA.Util にはそのようなメソッドがないので多分自作のクラス/メソッドでしょうね。周りにUtilクラスがないかまず調べてみましょう。(Eclipseとか使っていたらそのコードをすぐに参照できたりはするのですが) >あとQuery関連も分かりません。selectQueryとかcountQueryとか・・・ この2つはインスタンスをそういう名前にしているだけです。 countQueryはjava.lang.Stringそのままだし、selectQueryもjava.lang.StringBufferそのままです。(2つとも下記URLに載っているクラスです) つまり、 String a="select count(distinct no) from ******** "; とか StringBuffer b=new StringBuffer(); b.append("select no, abc, age from DB "); とか書いても全く問題はありません。 (何に使っているかをわかりやすくしているだけです) appendについてはStringBufferクラスに append(String str) というメソッドがあるのでそれを確認してください。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html
javatea_1985
質問者

お礼

ホムペを参考にさせて頂きました。 今まで意味も分からずインポートしていたパッケージの役割がはっきりしました。ありがとうございます! ただ、 StringBuffer b=new StringBuffer();  ・・・(1)  b.append("select no, abc, age from DB "); ・・・(2) (1)でインスタンスを生成しているのは分かるのですがなぜそんなことをするのか (2)でbクラス下のappendメソッド利用しているのはわかるのですがなぜ要素を括弧でくくるのかなどが分かりません。せっかく説明してもらっているのにその説明文すら分からない感じです。。 すいませんが説明して頂いていいですか?

関連するQ&A