インスタンスの作成について

このQ&Aのポイント
  • Hashtableのインスタンスを作成する方法とNullpointerExceptionの問題について説明します。
  • Hashtableのインスタンスを作成する手法に関する質問です。
  • has1がNullになる問題について、その原因と対処方法を教えてください。
回答を見る
  • ベストアンサー

インスタンスの作成について

下記の方法にてHashtableのインスタンスを作成しようと思ったのですが has1.put("key",1); の場所でNullpointerException が発生します。 has1がNullになってしまうのですが 下記のような手法でインスタンスは作れないのでしょうか。 public class InstanceCreate { Hashtable has1; Hashtable has2; Hashtable has3; public static void main(String[] args) { InstanceCreate instance = new InstanceCreate(); instance.exe(); } public void exe() { Hashtable hash[] = {has1,has2,has3}; for(int i=0; i<hash.length;i++){ hash[i] = new Hashtable(); hash[i].put("key", "value"); } has1.put("key",1); } }

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

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

hash[] にインスタンスを与えてるけど has1 には与えてない. int x = 1; int y = x; y = 4; としたときに x が 4 になるか, ってことと本質的に同じ.

関連するQ&A

  • GOF本のStrategyのJava版での質問です。

    GOF本のStrategyのJava版での質問です。 下記を実行すると、クラスCompositionのbreakCountの関数を実行した所で、NullPointerExceptionが発生してしまいます。(SimpleCompositorのcomposeの戻り値である1を期待しているのですが?)お分かりになる方、御教示ください。 //ここから public class Main { public static void main(String[] args) { Composition quick = new Composition(new SimpleCompositor()); quick.repair(); } } class Composition { public Composition(Compositor c) { _components = new Vector(); _lineBreaks = new Vector(); } public void repair() { Hashtable natural = new Hashtable(); Hashtable stretchability = new Hashtable(); Hashtable shrinkability = new Hashtable(); int componentCount; Hashtable breaks = new Hashtable(); // 初期化 componentCount = 0; _lineWidth = 0; natural.put("natural1", new Integer(0)); stretchability.put("stretchability1", new Integer(0)); shrinkability.put("shrinkability1", new Integer(0)); breaks.put("breaks1", new Integer(0)); // ブレーク位置を決める int breakCount; breakCount = _compositor.compose( natural, stretchability, shrinkability, componentCount, _lineWidth, breaks ); //  System.out.println(breakCount); } private Compositor _compositor; private Vector _components; private int _componentCount; private int _lineWidth; private Vector _lineBreaks; private int _lineCount; } abstract class Compositor { public Compositor() { } public abstract int compose( Hashtable natural, Hashtable stretch, Hashtable shrink, int componentCount, int lineWidth, Hashtable breaks ); } class SimpleCompositor extends Compositor { public SimpleCompositor() { } public int compose( Hashtable natural, Hashtable stretch, Hashtable shrink, int componentCount, int lineWidth, Hashtable breaks ) { // ... return 1; } }

    • ベストアンサー
    • Java
  • Runnableのインスタンス化について

    下記のコードについてです。 Runnableがインスタンス化されていますが、 どうしてそれが可能なのかが分かりません。 分からない点は 1.Runnableはインタフェースであるから、本来、直接インスタンス化は不可能であるはず。 2.しかし、Runnableはクラスライブラリjava.langパッケージに含まれている。 だからインスタンス化は可能なのかもしれない。 3.あるいは、下記のコードではメソッド内の無名クラスであるから、「new Runnable(){」の 部分でスーパークラスとしてのRunnableを継承したサブクラスを生成しているのかもしれない。 アドバイスをよろしくお願い致します。 public class Main{ public static void main(String[]args){ Runnable task = new Runnable(){ public void run(){ System.out.println("run"); } }; Thread thread = new Thread(task){ public synchronized void start(){ System.out.println("start"); } }; thread.start(); } }

    • ベストアンサー
    • Java
  • インスタンスを同じ名前で作成できる?

    最近Javaの勉強を始めました。 入門書に従って進めているのですが、 例題に下記のようなプログラムが載っていました。 for文の中でインスタンスを作ってループさせているのですが、 下記のプログラムだと"fusen" "label"という同名のインスタンスが複数できることになると思います。 結果は複数の付箋がデスクトップに表示されるので参考書通りといえばそうなのですが、 同名のインスタンスが複数作成されてしまうというのは例えば同じ名前の変数が複数、しかも同じブロック内で作成されてしまうというのと同じような気がします。 後々3番目に作ったインスタンスのメソッドだけを使いたいとかと思った場合、 困るのではないかと思いますし、そもそも同じ名前のインスタンスを複数作れるというのは 有りなのでしょうか? 上手く説明できないのですが、何だか気持ち悪くてしょうがありません。 どなたかアドバイス頂けないでしょうか? (注) "Dodai"クラスは入門書付属の拡張ライブラリなのですが、 デスクトップに付箋を表示するためのクラスです。 "JLabel"クラスは"Java Platform Standard Edition 6"のものを使用しています。 ----------------------------------------------------------- public static void main(String[] args){ //外側の繰り返し for( int i = 1; i <= 9; i++ ){ //内側の繰り返し for( int k = 1; k <= 9; k++ ){ Dodai fusen = new Dodai(); JLabel label = new JLabel(); label.setText(i + "x" + k + "=" + ( i*k )); fusen.add(label); fusen.setSize(50, 30); fusen.setLocation(i * 60, k * 40); fusen.setVisible(true); } } }

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

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

    • ベストアンサー
    • Java
  • 同一クラスインスタンス名で別クラスのインスタンス作成方法(C++)

    下記ソース(Java)の処理をするような、C++の実装方法を教えていただきたいです。 【処理内容】 クラスBのインスタンスを保持しており、クラスBのインスタンス名と同一であるクラスAのインスタンス生成 ClassA A_Instance = (ClassA)Class.forName(B_instance.name).newInstance(); 要はクラスインスタンスの名前の求め方がわからないのです。それさえわかれば、newしてクラスポインタを返すメソッドを用意すれば何とかなると考えていますが。 ※C++のAPI一覧はどこにあるのだろうか・・・

  • javaのhashtableに関する質問です

    以前にも質問させていただいた者ですが、またどなたかよろしくお願いします。  javaのhashtableを使いたいのですが、ソースコードの中で int a[]= char b[]= Hashtable<int,char> hash=new Hashtable<int,char>();       ~ hash.put(int[a],char[b]); と、put(,)の中にint型とchar型の配列を格納することは可能でしょうか?どうしてもエラーが出てしまいます。   どうしたらいいのでしょうか?

  • クラスとインスタンスについて

    はじめまして。Javaをはじめて3か月の超初心者です。 早速ではございますが、質問をさせていただきます。 以下のサンプルで、 class Foo { private int i = 0; Foo(int i) { this.i = i; } void func1() { System.out.println(this.i); } void func2(Foo foo) { System.out.println(foo.i); } } class Main { public static void main(String[] args) { Foo obj1 = new Foo(100); Foo obj2 = new Foo(500); obj1.func1(); obj1.func2(obj2); } } privateフィールドのスコープは同一クラス内からしか アクセスできないと参考書には記述されているの ですが、そのクラス内に上のサンプルのように this.iやfoo.iというように、クラスは同じでも インスタンスが異なるものがiにアクセスするとき、 上のサンプルは、どちらもアクセス制限のエラーが表 示されません。なぜなのでしょうか? this.iというアクセスは、現在実行中のインスタン ス内でのアクセスなので、privateスコープ内での アクセスであるというような感じがするのですが、 foo.iというアクセスの方は、現在実行中のインスタンスとは異なるインスタンス内でのアクセスなので、 privateスコープからはずれているような感じがして なりません。

    • ベストアンサー
    • Java
  • クラスのインスタンス

    お世話になります クラスのインスタンスを生成する際に class CTest { int m_i; } CTest* pTest = new CTest; void main() { pTest->m_i = 0; } CTest::~CTest() { delete pTest; } と、関数外でインスタンス化する際にも、newを使用するのでしょうか? もう1つ、newを使用しないで CTest Test; CTest* pTest = &Test; とするのと、何が違うのでしょうか? 多分、根本的な所が理解できていないと思われますが、よろしくお願い致します

  • インスタンス変数について

    JAVA勉強中のものです。 インスタンス変数についてわからないのですが、 class Data{int d;} classSample{ public static void main(String[] args){ Data data1 =new Data(); Data data2 =new Data(); data1.d = 100; data2 = data1; data2.d = 200; System.out.println(data1.d); } } 実行すると200が表示されますが、new演算子によってできたオブジェクトの実体を参照する ID がdata1およびdata2に入るのは理解できるのですが、 インスタンス変数のdはメモリ上でどう設定されているかイメージがわきません。 わかる方どうぞ教えて下さい。

    • ベストアンサー
    • Java
  • サブクラスで.newInstance()でインスタンス化できない

    以下のようにClass.forNameで取得したクラスをインスタンス化 しようとしていますが、できません サブクラスは.newInstance()でインスタンス化できないのでしょうか? 代替の方法はありますか? ーーーーーーーーーーーーーーーー public class test4121 { public static void main(String[] args) throws Throwable { new test4121(); } public test4121() throws Throwable { //これは実行できるが test4121_2 test = new test4121_2(); //これはできない Class.forName("test4121$test4121_2").newInstance(); } class test4121_2{ } } ーーーーーーーーーーーーーーーー