• ベストアンサー

staticと+=の意味を・・・

いろいろ調べたのですが、staticはクラスフィールドやクラスメソッドの宣言などに使うと書いてありますが、public static void mainとか以外に見たことありませんし使ったこともないんです・・・。 なのでイマイチ理解できません・・・。使い方を教えてください。あと、+=加算代入と書いてありますが、これもよくわかりません・・・。 なんか一語一語「これってどういう意味なんだろう?」とかって思うと調べても漠然とした説明ばかりで理解に苦しみます。 なにかいいアドバイスがあれば教えてください。よろしくお願いします。

  • aika25
  • お礼率49% (168/340)
  • Java
  • 回答数8
  • ありがとう数7

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

  • ベストアンサー
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.6

失礼ながら、ご質問の内容から、kaihou100さんの回答が分かりづらいのではないかと思いましたので、補足しておきます。 簡単に言うと、static メソッドと言うのは、インスタンスがいらないメソッドです。 インスタンスがいらないとは、そのクラスを new する必要が無いと言う事です。 kaihou100さんの例を借りて説明すると、 通常、クラスのメソッドを使用するときは、まずクラスのインスタンスを作成する必要がありますね? kaihou100さんのクラス Single で例えると、 Single s = new Single(); と書きたいところです。 しかし、Single クラスは、private 宣言されています。 他から参照できないのです。 じゃぁ、どうやって、このクラスのインスタンスを得るのでしょう?? そこで、このクラスのインスタンスを得るために、 Single s = Single.getInstance(); と呼び出します。(getInstance() の前はクラス名だと言う事に注意して下さい) getInstance() が何をしているかを見ると、自分のクラスの中で保持している自分自身のインスタンス を返しています。(ややこしいですね。。) 要は、勝手にいろいろな個所で new される事を防ぐ為にこのデザインパターンが使われるのです。 new されないようにする為に、コンストラクタを private にし、インスタンスを返すメソッドを public(どこからでも使える)で static(インスタンスが無くても使える)なメソッドとするのです。 単純に static メソッドの説明をするには、例があまり良くなかったかも知れませんね。。。 要するに static メソッドとは、最初に書いたとおりです。 もし、まだ分かりづらいようでしたら、補足してください。

その他の回答 (7)

  • hameggs
  • ベストアンサー率38% (8/21)
回答No.8

加算代入に関しては省略。 とりあえずstaticに関して参考になるかもしれません。 結構、わかりやすいかと。

参考URL:
http://www.wakhok.ac.jp/~tatsuo/prog2000/6shuu/static.html
aika25
質問者

お礼

かなり参考になりました! ありがとうございます!

  • Snowman
  • ベストアンサー率66% (6/9)
回答No.7

 クラスメソッドとはいったい何かをわかりやすく解説してます。  ご参考にどうぞ。

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=188680
aika25
質問者

お礼

こういうサイトもあるんですねσ(^^) とっても参考になりました! ありがとうございましたσ(^^)

  • kaihou100
  • ベストアンサー率83% (10/12)
回答No.5

 static fieldと自己代入演算子は他の方が説明している ようですから、static method の扱い方を補足しておきます。  まず最初に、デザインパターンはご存知でしょうか?  オブジェクト指向開発を行う場合、よく使われる コーディングパターンを抽象化したものの事なのですが。  それを見ると、分かるかもしれません。  例えば、あるクラスのインスタンスが一つであることを 保証する、Singleton patternなどでは、使われます。  下記のコードのような感じですね。 public class Single{  private Single _instance = new Single();  private Single(){  }  public static Single getInstance(){   return _instance;  } }  ほかにも、java.util.Arraysのような、ユーティリティ… Cのライブラリのように扱いたい物にも、こういう手法は 使われます。  さらに言うと、意識しないでも使っているものも在ります。  java,lang.System の outフィールドですね。  こんな感じで、意外と、いたるところにありますから、 さまざまなコードを読まれてみては如何でしょうか?

aika25
質問者

お礼

ちょっと難しかったですけど、いい感じです♪ ありがとうございました!

回答No.4

私も初心者の域をようやく抜けようとした段階ですが、はじめは+=とか-=とかぜんぜん納得いかなくて駄目だったのですが、自分である程度組める様になってくると理解できるようになって来ました。しかしstaticの意味はいまだ分かりません。。。 でも、JSPとかサーブレットとか初めは難しそうだなー、と思っていたのも分かり。今では、大体の本は読め、プログラムを組めるようになりました。 単語自体が分からないと不安だと思いますが、単語からプログラムを理解するのは不可能だとお思います。実践的に興味のあるものを組んでいったほうが、確実にできるようになると思いますよ。

aika25
質問者

お礼

そうですよね~まだ実践がないのでよくわかんないです・・。 ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

<+=などについて> 私もはじめ戸惑いました。PLIやBASICでは<>や=<しか見たことがなかったので。 (1)+=は開発者は本心は1文字で表したかったのではないでしょうか。C言語を開発当初にタイプライター時代でそれに適当な文字がないので2文字にしたのではないでしょうか。==や++やに出会ってビックリしたことを思いだしました。 (2)a+=3を、+と=を逆転して=+とし、(1)=(2)+3とし、そこに(1)と(2)にaを入れて、a=a+3と憶えたり (3)現在の変数の現在の値に+(プラス)して(a+3), 「同じ変数」に「=」(代入)すると初めは覚えました。 しかしそのうちにそんなもんかと違和感がなくなりました。

aika25
質問者

お礼

ほんと私もビックリしましたよ(w ややこしいし・・・。 でも慣れなんでしょうね。。 どうもありがとうございました!

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

+= というのは、変数に入っている値に指定した値を足すという動作をします。 例えば、 a += 3; と書くと、 a = a + 3; と同じ動作が行われます。 aの値が5だった場合、aの値には新しく8が代入されるといった具合です。 また、 a -= 3; と書くと、 a = a - 3; と同じです。 aの値が7だった場合、aの値には新しく4が代入されるという感じです。 ほかにも、*= や /= などがあり、これらは「複合代入演算子」と呼ばれます。 static ではないフィールドは、オブジェクトごとにそれぞれの値を持ちます。 つまり、オブジェクトを作るたびに、それぞれのフィールドが作られます。 1つのフィールドが1つのオブジェクトに対応しているわけです。 それに対し、static なフィールドは、1つのクラスに対し値を持ちます。 いくらオブジェクトを作っても、同じクラスならフィールドは1つです。 1つのフィールドが1つのクラスに対応しているわけです。 static フィールドは、定数を定めておくのに良く使われます。 円周率の値をPIという変数で定数として宣言する例↓ public static final double PI = 3.14159265358979; java.lang.Integer の MAX_VALUE などのフィールドがそうです。 static メソッドは、オブジェクトを作らなくても実行できることがポイントです。java.lang.Mathクラスにあるたくさんのstaticメソッドが良い例です。 逆に、static ではないメソッドの意味を考えてみましょう。 例えば java.lang.Stringクラスには、charAtというメソッドがありますが、このメソッドを実行するにあたっては、どのオブジェクトに対してメソッドを使うかが重要です。同じStringでも、オブジェクトが違うと結果も変わります。なぜなら、このようなstaticでないメソッドは、そのオブジェクトに固有の値(つまりstaticでないフィールド)を使用して動作するからです。

aika25
質問者

お礼

とてもとてもわかりやすかったです! UKYさんにポイントあげようと思ったのですが、間違えてしまいました・・・。 すみません・・・。 じゃあ30pあげます(w ありがとうございましたσ(^^)

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.1

正直、Javaはよく知りません。(少しだけ業務外で触った程度なので) 以下は他のプログラムでどういう認識か、ということです。間違っていたらごめんなさい。 staticとは「静的」という意味があります。 イメージでいうと ある関数Aの中で変数Bを定義します。 そして、その関数Aを出るとBは参照できません。 そしてまたAに入ると、Bは再度定義されてしまいます。 static変数ですと、再定義されません。 そのままの値を保持します。 ただ、関数の外からは参照できません。 下記、擬似言語で書きます。 PG------------------------------- MAIN{  関数A呼び出し  呼び出し結果出力  関数A呼び出し  呼び出し結果出力 } 関数A{  static変数B = 0を宣言  B=B+10 } 実行結果----------------------------- 10 20 このように値を保持します。 これがstaticです。 上記したように、私はJavaはよくわかりませんが、staticがこういうものだと理解していただければ、なんらかの解決が見えるのではないでしょうか? 次いで、「+=」はそのものに加算することです。 PG----------------------------------- a = 1; a += 3 a出力 a += 5 a出力 実行結果----------------------------- 4 9

関連するQ&A

  • staticなフィールドをstaticじゃないメソッドで使うには?

    いつもお世話になっています。よろしくお願いします。 javaで、staticなメインメソッドからも、staticじゃないメソッドからも1つの メンバ変数(フィールド)を処理したいと思います。 private static String nr; というフィールドを宣言しました。 (staticであるmainメソッドの中で使えるようにstaticで宣言しようと思いました。) 次に、 private void Kensaku() { このstaticではないメソッドの中でString nrを使って処理を行いたいです。 } 初歩の初歩なことを質問してすみませんが、調べても分かりませんでした。 どうか、よろしくお願いします。

    • ベストアンサー
    • Java
  • メインメソッドのstatic

    javaでstaticは静的という意味があると思うのですがメインメソッドにも使われていますよね? public static void main(String[] args) publicはどこからでもアクセスできるという意味だったと思うのですが メインメソッドにstaticがついている意味などはあるのでしょうか? 素朴な疑問です。

    • ベストアンサー
    • Java
  • abstract と static を一緒に付けることはある?

    抽象クラスの抽象メソッドにstaticを付ける(abstract と static をメソッドに一緒に付ける)ことはありますか? 例えば、 abstract class Super {  static abstract void meth(); } class Sub extends Super {  static void meth() {   System.out.print("hello");  } } として、mainの中に  Sub.meth(); を書いてみたのですが、普通にコンパイルは通りhelloが出力されます。 staticの意味を考えると、こういうことをするのは意味がないと思うのですが、独学なので身近に聞ける人もいません。 御教授よろしくお願いします。

  • クラスについての質問です!!

    本に下のような説明があったのですが、ここで出てくる「メンバ」という言葉がわかりません。 これはどういう意味合いなのでしょうか? よろしくお願いします。 ――――――――――――――――――――――――――― public class JsMsg1{ public static void main (String args[ ]) { ・・・ } } というプログラムはJsMsgというクラスがあり、メンバとしてmain()メソッドがあり、フィールドはないというクラス構成をしています。

    • ベストアンサー
    • Java
  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

    mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつけなければならないのでしょうか? そのような記述を見掛けたのですが、もしこれが正しいという場合、 それは、なぜなのでしょう? java初心者ですが、どうぞ宜しくお願いいたします。 class MainClass{  //先頭のstaticに注目  static void sub(){   ~~  }  //mainメソッド  public static void main(String[] args){   sub();  } }

    • ベストアンサー
    • Java
  • mainクラス内に書いたメソッドの宣言の仕方(staticの必要性)

    java を勉強中の超初心者です、宜しくお願いします。 main と同じクラスに disp というメソッドを作成してやり、” void disp(int a , int b )”と書いてやりましたが、mainからアクセス出来ません。 そこで、” static void disp(int a , int b )” という風に” static ” を先頭につけてやりましたら、うまく動きました。 これは、mainメソッドから他のメソッドにアクセスする場合には、必ず” static ” をつけてやる必要があるということでしょうか。 ======================================================= class クラス練習 { public static void main(String[] args) { disp(5,10); } /*static*/ void disp(int a , int b ) { System.out.println("a+b = " + (a+b)); } }

    • ベストアンサー
    • Java
  • メソッド宣言内でクラス名が書かれる理由

    public static void main(String arg[]){ 上記は、メソッド宣言ですが、このメソッド宣言の中に書かれているStringは、「標準クラスの1つ」だと聞いています。(標準クラスの意味さえ僕はわかりませんが、、参考書に書かれてあるのを見てもチンプンカンプン) 何故Stringは標準クラスの1つなのに、メソッド宣言の中に書かれているんですか? 質問1:私の仮説では、メソッドがどこのクラスに属するかを明示するためにメソッド宣言内にStringが書かれていると考えてます。それでよろしいですか? 質問2:メソッド宣言とは本質的にどういうことですか?プログラミング初心者の僕でもわかるように解説お願いします。

    • ベストアンサー
    • Java
  • Javaのstaticメソッドの意味を教えて下さい

    Javaのstaticメソッドの意味を教えて下さい。 現在の解釈では、staticなメソッドとはインスタンスの生成に依存せず呼び出せる処理のことだと認識しています。逆にstaticでないメソッドは、生成後のインスタンスにしか使えない処理だと理解しています。 しかし、コンストラクタがstaticでないことに気がつき、疑問が生まれました。コンストラクタはstaticではないので、コンストラクタを呼び出す時にはそのクラスのインスタンスが必要になるはずです。しかしこのインスタンスを作るのにもコンストラクタが必要です。コンストラクタを使うためにインスタンスが必要で、インスタンスを作るためにコンストラクタが必要という無限ループになってしまいました。 そこで改めて、staticメソッドの意味を教えて頂きたいです。

  • voidとかstaticとか

    javaでpublic static void main(String[ ] args) {とかあるんですが よく意味が分かりません 解説のHPを見てもフォーマットなど専門用語を使って説明してるので意味が分かりません System.out.print("hello");は ("")なかが出力するのはわかるんですが 何故 System.outなのか気になります public static void main(String[ ] args) {もよくわかりません 詳しく 凄くわかりやすく説明してくれる人いたら教えて下さい モヤモヤ度MAXです

  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP

専門家に質問してみよう