実行の順番を教えてください。

このQ&Aのポイント
  • 現在JAVAの学習をおこなっていて、参考書で勉強しています。実行の順番を教えて頂けないでしょうか。
  • サンプル1では、testAllクラスのmainメソッドが最初に実行され、その中でtestAクラスのインスタンスが作成されます。サンプル2では、mainメソッドが最初に実行され、appleメソッドが呼び出されます。最後にサンプル3では、mainメソッドが実行され、orangeクラスのi変数の値が出力されます。
  • 実行順番: サンプル1 -> サンプル2 -> サンプル3
回答を見る
  • ベストアンサー

実行の順番を教えてください。

現在JAVAの学習をおこなっていて、参考書で勉強しています。 しかし、以下の3つのソースコードはどの順番で実行されているか理解できておりません。 すみませんが、実行の順番を教えて頂けないでしょうか。 実行の順に数字を振ったりしていただけますと特に嬉しいです。 お願いします。 ※サンプル1 class testA{ testB b; testA(){ b=new testB(this); } } class testB{ testA a; testB(testA a){ this.a=a; } } class testAll{ public static void main(String args[]){ new testAll().banana(); //ソースコード } void banana(){ testA test = new testA(); } } ※サンプル2 public class A{ public static void apple(Integer i){ int ta =i.intValue(); ta+=3 ; i=new Integer(ta); } public static void main(String args[]){ Integer i = new Integer (0); apple(i); System.out.println(i.intValue()); } } ※サンプル3 public class Test{ public static void main (String args[]){ class orange{ public int i =9; } Object o=(Object)new orange(); orange orange = (orange)o; System.out.println("i="+orange.i); } }

  • Java
  • 回答数3
  • ありがとう数0

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

  • ベストアンサー
  • nicepeace
  • ベストアンサー率58% (7/12)
回答No.2

public class A{ public static void apple(Integer i){//4 int ta =i.intValue();//5 ta+=3 ;//6 i=new Integer(ta);//7 } public static void main(String args[]){//1 Integer i = new Integer (0);//2 apple(i);//3 System.out.println(i.intValue());//8 } } 1:メインメソッドを実行 2:Integerをインスタンス化0をラップ 3:appleにInteger型のiを渡す 4:appleを実行 5:intValueメソッドでint型を取り出す 6:ta+=3;を実行 7:Integer型にまたラップ 8:intValue()でint型を取り出す 因みに表示されるのは0です。 appleメソッドで3になっていますが、戻り値等がないのでmainメソッド内の変数iは何も変わっていません。

その他の回答 (2)

  • nicepeace
  • ベストアンサー率58% (7/12)
回答No.3

public class Test{ public static void main (String args[]){ class orange{ public int i =9; } Object o=(Object)new orange(); orange orange = (orange)o; System.out.println("i="+orange.i); } } 1:メインメソッド実行 2:Object型でorangeをインスタンス化 3:orange型にキャストし直して変数orangeに代入 4:内部クラスorangeの変数iを表示

  • nicepeace
  • ベストアンサー率58% (7/12)
回答No.1

class testA{ testB b; testA(){//5 b=new testB(this);//6 } } class testB{ testA a; testB(testA a){//7 this.a=a;//8 } } class testAll{ public static void main(String args[]){//1 new testAll().banana();//2 } void banana(){//3 testA test = new testA();//4 } } 1:testAllをインスタンス化そのままbanana()を呼ぶ 2:banana()の中でtestAをインスタンス化 3:testAのコンストラクタでtestBをインスタンス化 4:testBのコンストラクタの引数にthisでtestAのインスタンス自身を渡す。

関連するQ&A

  • javaのインスタンス変数とクラス変数の意味がわからない。

    かなり初心者です。全然意味がわかりません。教えてください。よろしくおねがいします。 この意味すべてわからないです。 public class TestCount{ static int counterA; int counterB; public static void main(String []args){ TestCount testA=new TestCount(); TestCount testB=new TestCount(); testA.count(); testB.count(); } public void count(){ for(int i=0;i<5;i++){ counterA++; counterB++; } System.out.println("counterA="+counterA); System.out.println("counterB="+counterB); } } 実行結果 counterA=5 counterA=5 counterB=10 counterB=5 なんでこうなるのかが知りたいです。

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

     今晩は、java初心者です、宜しくお願いします。    Integerクラスについて下のように「i1 = new Integer("1");」と書いても「i2 = new Integer(1);」 と書いても、どちらも数字として認識されているようです。  正式な書き方としてはどちらなんでしょうか、宜しくお願いします。 ========================================================================= public class Test1 { public static void main(String[] args) { Integer i1 = new Integer("1"); System.out.println((i1+2)); Integer i2 = new Integer(1); System.out.println((i2+3)); } }

    • ベストアンサー
    • Java
  • Integerについて

    class Sample5_7_Integer { /** * Integerクラスのメソッド */ public static void main(String[] args) { //String → int int i1 = Integer.parseInt(args[0]); //int型にすることにより計算可能 System.out.println(i1 + 100); //String → integer Integer i2 = Integer.valueOf(args[0]); System.out.println(i2); Integer i3 = new Integer(100); System.out.println(i2.equals(i3)); } } をEclipseで実行したところ、 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at benkyou.Sample5_7_Integer.main(Sample5_7_Integer.java:10) というエラーになってしまいます。 どなたか解決法をお願いします。

    • ベストアンサー
    • Java
  • mainクラスのpublicの意味を教えて下さい

     お早う御座います、JAVA初心者です、宜しくお願いします。  main クラスの public をコメントアウトしてもエラーもなく走ります。  これは、「public static void main(String[] args)」を持っているクラスを自動的に「main クラス」と判断しているということでしょうか。 ============================================================ class Sub { void disp() { System.out.println(" a "); } } /*public*/ class Main { public static void main(String[] args) { Sub s = new Sub(); s.disp(); } }

    • ベストアンサー
    • Java
  • 例外(throws)について

    例外のthrowsがよくわかりません。 (例1) public static void main(String[] args) throws Exception { new testClass().testA(); } void testA() throws Exception { FileReader exFile = new FileReader("exFile.txt"); } (例2) public static void main(String[] args) throws FileNotFoundException { new testClass().testA(); } void testA() throws FileNotFoundException { FileReader exFile = new FileReader("exFile.txt"); } 上記2つの例ではどちらも 「java.io.FileNotFoundException: exFile.txt (指定されたファイルが見つかりません。)」 というログが出力されるようです。 throws ExceptionにしてもFileNotFoundExceptionと判別できるのならば、 あえてthrows FileNotFoundExceptionにする必要がなく、大抵の場合 throws Exceptionにしておけばよいと思うのですが、 その解釈は間違っているでしょうか?

    • ベストアンサー
    • Java
  • Integer.parseInt()について public static void main(String[] args) { int a =

    初歩的な質問だと思うのですが、、、 public class TestTree { public static void main(String[] args) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); GreatTree myTree = new GreatTree(a, b); myTree.makeTree(); myTree.makeGround(); } } というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

    • ベストアンサー
    • Java
  • プログラムコードを書いて実行するとエラーが起きる

    今JAVAのプログラムの勉強(初心者)をしているのですが、とある参考書のプログラムコードを書いて実行すると Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at rensyu7.pkg1.Rensyu71.main(Rensyu71.java:18) Java Result: 1 というエラーが起きておりどこがエラーなのかコードを眺めてみたのですがよくわかりません。 クラス: Rensyu71 package rensyu7.pkg1; import java.lang.reflect.*; public class Rensyu71 { /////////////////////////////////////////////////////////////////////////////// // mainメソッド ////////////////////////////////////////////////////////////////////////////// public static void main (String[] args) { String FQCN = args[0]; String hairetu = args[1]; try { Class<?>class1 = Class.forName (FQCN); listMethods (class1); //listMethodsの呼び出し if (hairetu.equals ("E")) { launchInternal (class1); //launchInternalメソッドの呼び出し }else if(hairetu.equals ("I")){ launchInternal (class1); //launchInternalメソッドの呼び出し }else{ throw new IllegalArgumentException ("起動方法が不正です"); } } catch (Exception e) { System.out.println (e.getMessage ()); e.printStackTrace (); System.exit (1); } showmemory (); //showmemoryの呼び出し System.exit (0); } /////////////////////////////////////////////////////////////////////////// // listMethodsメソッド //////////////////////////////////////////////////////////////////////////// public static void listMethods(Class<?>class1){ System.out.println ("メソッド一覧を表示します"); Method[]hairetu2 = class1.getDeclaredMethods (); for (Method m : hairetu2) { System.out.println (m.getName ()); } } //////////////////////////////////////////////////////////////////////////// // launchExternalメソッド //////////////////////////////////////////////////////////////////////////// public static void launchexternal(Class<?>class1) throws Exception{ ProcessBuilder PB = new ProcessBuilder ("java",class1.getName ()); Process process = PB.start (); process.waitFor (); } //////////////////////////////////////////////////////////////////////////// /// launchInternalメソッド //////////////////////////////////////////////////////////////////////////// public static void launchInternal(Class<?>class1)throws Exception{ Method m = class1.getMethod ("main", String[].class); String[] args = {}; m.invoke (null, (Object)args); // } //////////////////////////////////////////////////////////////////////////////// // shoememoryメソッド /////////////////////////////////////////////////////////////////////////////// public static void showmemory(){ long free = Runtime.getRuntime ().freeMemory (); long total = Runtime.getRuntime ().totalMemory (); long memorisiyouryou = (total-free)/1024/1024; System.out.println ("現在のメモリの使用量:"+memorisiyouryou+"MB"); } } ============================================================================ クラス:MemoryEater package rensyu7.pkg1; public class MemoryEater { public static void main (String[] args) { System.out.println ("eating memory・・・・・・・"); long[] larry = new long[128000]; for (int i = 0; i <larry.length; i++) { larry[i]=i; } } } 滅茶苦茶なプログラムですが、初心者ですので大目にみてください。 どこを直せば実行できますか?どなたかご教授願います。

    • ベストアンサー
    • Java
  • キャストの仕方がわかりません

    キャストの仕方がわかりません メソッド内でクラスを生成し、 そのクラスで共通処理を行いたいのですが、上手くいきません。 ジェネリクスの使い方が悪いのか、キャストで怒られてしまいます。 お分かりの方、いらっしゃいましたら教授願えますか。 以下、ソースです。 interface ToolInterface { /** 結果 */ public abstract Object toolResult(); } class TestA implements ToolInterface{ @Override public Object toolResult() { return "Aです"; } } class TestB implements ToolInterface{ @Override public Object toolResult() { return "Bです"; } } public class TestMain { public static void main(String args[]) { TestMain me = new TestMain(); me.dispResult(TestA.class); me.dispResult(TestB.class); } /** このメソッドでインスタンス化及び処理を行う */ private void dispResult(Class<?> obj) { try { obj.newInstance(); //ここでキャストか何かして表示させたい ToolInterface resObj = (ToolInterface) obj; System.out.println(resObj.toolResult()); } catch (InstantiationException e) { } catch (IllegalAccessException e) { } } }

    • ベストアンサー
    • Java
  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • あれ?

    すいません。 長い間、 疑問に思ってたことがあるんですけれども、 (1) import javax.swing.*; class Sample {  public static void main (String args[])  {   ........   Aメソッド()  } } (2) import javax.swing.*; class Sample extends aiueo {   public static void main (String args[])  {   ........   Aメソッド()  } } (3) class Sample extends aiueo {  public static void main (String args[])  {    ........   Aメソッド()  } } の違いが、 考えれば考えるほどわからなくなってきました。 パッケージと継承の関係について、 どうやら理解できていないみたいです。 どなたか分かりやすく教えてください。 よろしくお願いします。 (注) Aメソッドはaiueoクラスのメソッドとし、 aiueoクラスはjavax.swingパッケージに入っているものとします。

    • ベストアンサー
    • Java

専門家に質問してみよう