javaのプログラミングが追えず困っている初心者の質問

このQ&Aのポイント
  • プログラム3のmainメソッドにて、mainメソッドが所属しているクラスはTimerTestであり、自クラスはnewする必要があるのか、TimerTest型の変数に格納しなくてもよいのかについて質問している。
  • プログラム3のtimeメソッドにて、Timerクラスのメソッドを呼び出しているが、他クラスなのにnewしなくても使える理由や、Timer.createTimeのTimerがクラス名なのかメソッド名なのかについて質問している。
  • 初心者が理解できていない部分を勉強したいと質問しており、プログラミングの基礎的な知識を教えてもらいたいという意向を示している。
回答を見る
  • ベストアンサー

基本情報処理技術者 平成24年度秋 JAVA

javaのプログラミングは長らくやっていない状態で、問題を解き始めましたが、 プログラムが追えず困っています。 初歩的な質問になってしまいますが、下記についてどなたか教えてください。 1.プログラム3のmainメソッドにて new TimerTest().test(); とありますが、mainメソッドが所属しているクラスはTimerTestですよね? 自クラスってnewしないといけないんでしょうか。 また、newしているのに、インスタンスをTimerTest型の変数に格納しなくていいのでしょうか。 2.プログラム3のtimeメソッドにて、 longTimer = Timer.createTime("long timer",..................) とありますが、これはプログラム2のTimerクラスのメソッドを呼び出していますよね? 他クラスなのに、newしなくても使えるんでしょうか。 Timerクラスがpublicだからnewしなくていいという解釈であっていますか? それともcreateTimerメソッドがstaticだからでしょうか? Timer.createTimeのTimerは、クラス名なのか、 createTimeメソッドの形名?なんでしょうか。 初歩的なところですみません・・・ この質問を見て「このあたりが理解できていない」というような感じ方がありましたら、 そこを勉強したいのでご教示お願いします。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.1

※基本情報処理技術者 平成24年度秋 の問題を持っていないと回答できないような  質問のしかたは、上手くないですよ。 1.プログラム3のmainメソッドにて 自クラスでも new することはできます。 test メソッドがインスタンスメソッドであるなら、このメソッドは new しないと 使えません。 2.プログラム3のtimeメソッドにて createTimer メソッドが static だから、new する必要がありません。 「インスタンスメソッド」と「static メソッド」の違いをよく押さえてください。

hizumin
質問者

お礼

ご回答ありがとうございます! 問題をお持ちの方に質問したかったのですが、 その旨抜けていましたね。すみませんでした。 「インスタンスメソッド」と「static メソッド」の違いについて、勉強しようと思います! クラスの種類などを調べていたのですが、メソッドについては全くでした! ありがとうございます!! 大変助かりました!

関連するQ&A

  • 基本情報平成25年度秋季javaの問題について

    こんにちは。 基本情報の試験へ向けて勉強している者です。 今過去問をやっているのですが、分からないところがあります。 私はjavaはあまり得意ではなかったのですが、基本情報を受けるにあたって、経験のあるjavaを選択し、もう一度基本から勉強しようと思いました。 理解するためには実際に手を動かしてみるのが一番いい、という事だったので、過去問を解き、そのプログラムを実装してみたのですが、エラーが出て実行できません。 別に実行できなくても問題を解くのには差し障りないのですが、なんだか気持ちが悪いので、解決して次に進みたいです。 下のURLに問題があります。 http://情報処理試験.jp/FE24b-pm/t11.html エラーが出ている箇所は、 Timerクラスの timerAction.onStart(Timer.this, currentTime()); timerAction.onAlarm(Timer.this, currentTime()); timerAction.onCancel(Timer.this, currentTime()); onStart、onAlarm、onCancelそれぞれに、 「Timer~ のメソッド on~(Timer, long) は引数 (Timer, long) に適用できません」 というエラーが出ています。 また、TimerTestクラスのクラス名に、 「型 TimerTest は継承された抽象メソッド TimerAction.onStart(Timer, long) を実装する必要があります」 というエラーが出ています。 もちろん、問題にあるのと同じプログラムを書いているのですが…。 何を間違っているのかわかりません。 ご指摘よろしくお願いします。

    • ベストアンサー
    • Java
  • ”メンバ指定”で表示させる順がわかりません

    一番したにかいたプログラムなんですが、 System.out.println("**********基本的なメンバ操作***********"); の次の表示させるコードは System.out.println("+++++++++++クラスメンバをインスタンス名で操作+++++++++++"); となっているのに、実行結果が **********基本的なメンバ操作*********** インスタンスメソッド: インスタンス変数=100クラス変数=300 インスタンスメソッド: インスタンス変数=200クラス変数=300 クラスメソッド;クラス変数=300 +++++++++++クラスメンバをインスタンス名で操作+++++++++++ d1のクラス変数=400 d2のクラス変数=400 MyClsのクラス変数=400 でした。 どういう順で処理されているのでしょうか。 超初心者です。変なことをたぶん聞いていると思いますが教えてください。 class MyCls { int ins_hensu = 0; static int cls_hensu = 0; public void ins_method() { System.out.println("インスタンスメソッド: インスタンス変数=" + ins_hensu + "クラス変数=" + cls_hensu); } public static void cls_method(){ System.out.println("クラスメソッド;クラス変数=" + cls_hensu); } } public class JaCls08{ public static void main(String args[]) { MyCls d1 = new MyCls(),d2 = new MyCls(); System.out.println("**********基本的なメンバ操作***********"); d1.ins_hensu = 100; d2.ins_hensu = 200; MyCls.cls_hensu = 300; d1.ins_method(); d2.ins_method(); MyCls.cls_method(); System.out.println("+++++++++++クラスメンバをインスタンス名で操作+++++++++++"); d1.cls_hensu =400; System.out.println("d1のクラス変数=" + d1.cls_hensu); System.out.println("d2のクラス変数=" + d2.cls_hensu); System.out.println("MyClsのクラス変数=" + MyCls.cls_hensu); } }

    • ベストアンサー
    • Java
  • 実行時引数をrun()メソッドに渡すには?

    初めまして。宜しくお願いします。 Javaの初心者で現在勉強中で、一定時間ごとに命令を走らせるプログラムを作ろうとしており、様々なサイトや本を参考にした結果、Timerクラス、TimerTaskクラスを使うと良さそうという事がわかりました。 一定周期毎に標準出力するのみのプログラムなら出来たのですが、実行時引数を一定周期毎に標準出力するプログラム作成時に躓いてしまいました。 望む挙動: $ java test1 abcdef とターミナルに入力して、一定周期毎に、"abcdef"が表示し続ける挙動。 躓いている点: main()メソッドからrun()メソッドに実行時引数(この場合、String st = String new args[0];)を渡そうと試みてる点。 -----------------ソースコード--------------------- import java.util.Timer; import java.util.TimerTask; public class test1 { public static void main(String args[]) throws Exception{ String st = new String(args[0]); Timer timer = new Timer(); timer.schedule(new TestTimer(), 0, 1000); } /** * 指定間隔置きに呼ばれる処理 */ static class TestTimer extends TimerTask{ public void run(){ System.out.println(st); // System.out.println("Hello, World!"); } } } ---------------------------------------------- 宜しくお願いします。

    • ベストアンサー
    • Java
  • クラス変数/メソッドとインスタンス変数/メソッドの見え方について

    Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。   ・クラスが2つあり、1つはもう1つのクラスを継承しています。     それぞれを「スーパー」「サブ」と以下で呼びます。   ・インスタンスは"サブ"の型です。   ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。   ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。           [フィールド]  [メソッド]   [1.static ]  スーパーの   スーパーの   [2.非static]  スーパーの   サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。   フィールドの場合、参照変数の型のものが見える。   メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数      " + sub.staticField ); System.out.print( "2.クラスメソッド    " ); sub.staticMethod(); System.out.println( "3.インスタンス変数   " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数      " + sup.staticField ); System.out.print( "6.クラスメソッド    " ); sup.staticMethod(); System.out.println( "7.インスタンス変数   " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数      90 2.クラスメソッド    staticField = 90 3.インスタンス変数   900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数      10 6.クラスメソッド    staticField = 10 7.インスタンス変数   100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JAVAプログラムの基本的な書き方

    JAVAを始めて数日の者です。 クラス、メソッド、コンストラクタ、インターフェイスなど初心者にはかなりキツイです! どうも理解できません。 プログラムを書くとき、クラス定義したらその度にnew演算子を使うのでしょうか? メソッドとは処理する内容を記述するものなのでしょうか? メインは最後に記述するのでしょうか? 最初に呼び出されるのはメインですか? プログラムを書くとき、頭の中で流れを考えながら英語みたいに組み立てていくのでしょうか? 訳のわからない質問ですが、プログラムを書くときの基本的な注意点を教えてください!

  • Javaについて教えてください!

    sampleパッケージに属するMain.javaとSub.javaがあり、Main.javaのmainはSub.javaのsubメソッドを呼び出して「OK」と表示させるプログラムを教えてください! //Main.java package sample; public class Main{ public static void main(String[] args){ Sub.sub(); }} //Sub.java package sample; public class Sub{ static String str = "OK"; public static void sub(){ System.out.println(str); }} String型の変数strはクラス変数で行いたいのですが、どこを改善すれば良いでしょうか?

    • ベストアンサー
    • Java
  • Java 型指定を伴わないインスタンスの作成?

    問題集で以下のプログラム(一部)を見かけました。 class Test{ public static void main(String args[]){ new Animal("A"); } } Animalクラスのインスタンスを作成しているということなのですが、 これまでであれば、 Animal a = new Animal(); というようにイコールの左で インスタンスの型と変数を指定する形で学んで来ました。 型や変数を指定しないでインスタンスの作成をすることが できるのですか? 回答をお願いします。

    • ベストアンサー
    • Java
  • javaの基本的な質問

    下記を実行すると、上から順番にメソッドが実行され、 「Hello Java  Hello Java」 と表示されるような気がしてしまうのですが… なぜ、一度しか表示されないのでしょうか。 class Main { public static void main(String[] args) { hello(); } public static void hello() { System.out.println("Hello Java"); } }

    • ベストアンサー
    • Java
  • Timerについて教えて下さい

    ある処理を5秒おきに、n回だけ実行したいのですが、「n回」をどのように実現したらよいのかわかりません。Timerクラスのメソッドにはないようなのですが。。簡単なサンプルコードを書いてみましたので以下を元に修正方法を教えて頂けると助かります。 import java.util.Timer; import java.util.TimerTask; public class TimerTest { public static void main(String[] args) { int n=10; Timer timer = new Timer(); timer.schedule(new sendTask(), 5000, 5000); } } class sendTask extends TimerTask { public void run() { System.out.println("Hello World"); } }

    • ベストアンサー
    • Java
  • ご教示ください。

    ご教示ください。 javaで日付操作をやっています。 通常、クラスのインスタンスを作成する場合 クラス名 変数名 = new クラス名(); ですが、カレンダークラスを使用した際に Calender 変数名 = Calender.getInstance(); と出てきました。 Calenderクラスにある、getInstanceメソッドを呼び出していると思います。 クラスをインスタンスすることで、そのクラス内にある、メソッドやフィールドを初期値で使えて(コンストラクタがない場合)と認識しています。 インスタンスで、直接、メソッドを呼び出せる場合があるのでしょうか?

専門家に質問してみよう