タケチ 的个人资料人が存在するってどういうこと?照片日志列表 工具 帮助

タケチ タケチ

职业
タケチです。
尚未添加列表。
2月5日

メソッドの呼び出し

2008年2月5日(火) ハレハレ
 
newを使わずにインスタンスを生成できたので、今度はMethodクラスを使ってメソッドを呼び出すことにチャレンジです。

========================================================
  String className = "TestHashTable";
  try{
   Class nodeClass = Class.forName(className);
   try{
   
    Method nodeMethod = nodeClass.getMethod("methodA", new Class[]{});
    System.out.println("method call invoke():" +  nodeMethod.invoke(nodeClass.newInstance(), new Object[]{}));
   
    Method nodeMethodB = nodeClass.getMethod("methodB", new Class[]{int.class});
    System.out.println("method call invoke():" +  nodeMethodB.invoke(nodeClass.newInstance(), new Object[]{new Integer(100)}));
   
    Method nodeMethodC = nodeClass.getMethod("methodC", new Class[]{String.class, int.class});
    System.out.println("method call invoke():" +  nodeMethodC.invoke(nodeClass.newInstance(), new Object[]{"moji", 20}));
   
   }catch(NoSuchMethodException e){
    e.printStackTrace();
   }catch(IllegalAccessException e){
    e.printStackTrace();
   }catch(InvocationTargetException e){
    e.printStackTrace();
   }catch(InstantiationException e){
    e.printStackTrace();
   }
  }catch(ClassNotFoundException e){
   System.out.println("vrml97 Loader: Initialization error: Can't " + "find class for VRML node: " + className);
   e.printStackTrace();
  }

========================================================

メソッドの戻り値は元のメソッドの戻り値同じで
戻り値がprimitive型の場合はラッパークラスとして返り、
voidの場合は、nullが返る。

▲呼び出すメソッドに引数なし
nodeClass.getMethod("methodA")
nodeClass.getMethod("methodA", new Class[]{})
nodeClass.getMethod("methodA", new Class[0])
getMethodでクラスから取得する
第1引数:取得するメソッド名
第2引数:メソッド引数の型を指定する

nodeMethod.invoke(nodeClass.newInstance())
nodeMethod.invoke(nodeClass.newInstance(), new Object[]{})
nodeMethod.invoke(nodeClass.newInstance(), new Object[0])
invokeでメソッドを呼び出す
第1引数:メソッドが属するクラスのインスタンス
第2引数:呼び出すメソッドに渡す値

▲呼び出すメソッドに引数あり
nodeClass.getMethod("methodB", new Class[]{int.class})
nodeMethodB.invoke(nodeClass.newInstance(), new Object[]{1})

nodeClass.getMethod("methodC", new Class[]{String.class, int.class})
nodeMethodC.invoke(nodeClass.newInstance(), new Object[]{"moji", 1})

11月30日

クラスのインスタンス化

2007年11月30日(金)
 
ClassクラスからConstructorクラスそしてインスタンス化。
 
1.Classクラスで「クラス名」のClassインスタンスを取得。
ex:String className = "InstanceCount";
ex:Class testClass = Class.forName(className);
2.ConsturctorクラスでClassインスタンスから「クラス名」のコンストラクタを取得。
ex:Constructor constructor = testClass.getConstructor(new Class[]{});
3.Objectクラスで「クラス名」のインスタンスを取得。
newInstance()はObject型を返す。(ex1)
「クラス名」のオブジェクトが欲しい場合はキャストする必要がある。(ex2)
ex1:Object instance = constructor.newInstance(new Object[]{});
ex2:InstanceCount instance = (InstanceCount)constructor.newInstance(new Object[]{});
 
●エラー発生●
########### 修正前 #############
class InstanceCount{
 InstanceCount(){
 }
 InstanceCount(String str){
  }
  int getCount(){
  }
  int getCounter(){
  }
}
#################################
############ 実行エラー #########
java.lang.NoSuchMethodException: InstanceCount.<init>()
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.getConstructor(Unknown Source)
        at TestInstanceMain.main(TestInstanceMain.java:39)
#################################
 
InstanceCountクラスにInstanceCountメソッドがありませんといわれてるようです。
 
########### 修正後 #############
class InstanceCount{
 public InstanceCount(){
 }
 public InstanceCount(String str){
  }
  int getCount(){
  }
  int getCounter(){
  }
}
#################################
 
原因はInstanceCount()がpublicでなかったからみたいです。
APIにも書いてありました。
 
やっとインスタンスを取得することができたぁ。°(ノд`)°。
11月21日

javaのオベンキョ

2007年11月21日(水) 晴ればれ
 
■メソッドにおける可変長引数■
JDK5では、コマンドラインから複数の引数を取得できたmainメソッドのように
そのほかのメソッドでもmainメソッドのように取得できるようになった。
 
test(String... args)
 
こんな感じで記述すると配列で取得できるようです。
 
 
 
■拡張forループ■
JDK5では、「配列やリストなどの全要素に対するループ」が簡略記述できるようになりました。
 
for (int i=0; i<array.length; i++) sum+=array[i];
 
こんなだったのが
 
for (int a : array) sum+=a;
 
こんなふうになるようです。
 
 
 ■printfメソッド■
あれですねc言語でおなじみの画面出力のおまじないですね。
 
printf(書式文字列, 引数, ...)
 
移植するときに役立つんですって。

コレクションフレームワーク

2007年11月20日(火) 晴れ
 
配列以外で値を保持しておくものはないか調べてみたら、
コレクションフレームワークというものを発見。
HashtableやらHashmapやらArrayListやらetc。
 
配列は格納番号を指定して値を取り出すけど
HashtableやHashmapはキーとそのキーで取り出す値を決めることで
キーを指定して値を取り出すことができるんですねぇ。
しかし、キーで取り出せる値は一つのみです。
同じキーで値を追加しても上書きされてしまいます。
RPGのセーブデータみたいなもんですかね。
 
 
他に何かないかなぁ。
11月8日

三項演算子!?

2007年11月6日(火)
 
こんなのがあったんですね。
 
(条件式)?(A):(B)
 
条件式がtrueであれば A
条件式がfalseであれば B
 
11月5日

Hashtableクラス

2007年11月5日(水) 晴れ時々曇りのちくもり
 
うわぁ~、何ヶ月ぶりだぁ。
とりあえず、javaについてお勉強したことでも書いてきます。
 
今VRMLファイルを読み込んで頂点座標や色情報などを取得するためのプログラムを作成中。
しかし、sunのHPにj3d-vrmlというJava3DでVRMLを読み込んで表示するパッケージがあるじゃないですか!?
なもんで、jarファイルを解凍してVRMLを読み込むための大本のソース「Parser.java」(おそらく)を見てみたのですが・・・・。
プログラム技術がない上、知識も少ないので、何が書いてあるのかチンプンカンプン(;´-`)=3
なもんで、やっぱり自分で作ろうかと・・・・。(大変かな?)
 
とまあ、VRMLのノード名でクラスをマッピングしている(だろう)ところはなんとか理解できた(と思う)ので、
このHashtableの使い方を学んでみようかと。(なんとなく使えそうな予感(`・ω・´)ムム)
 
で、さっそく作ってみたのですが・・・・
コンパイルすると
 
注:TestHashtable.java の操作は、未チェックまたは安全ではありません。
注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください
 
となったので、-Xlintオプションで再コンパイルすると
 
TestHashtable.java:8: 警告:[unchecked] raw 型 java.util.Hashtable のメンバとしての put(K,V) への無検査呼び出しです。
 
と、叱られました(-_-、)
なもんで、なにか策はないかと調べたところ
 
 Hashtable table = new Hashtable();
 
これだと、何に何をマッピングするんじゃわれぃ( '皿')ってなるみたいなので
下のように指定してあげることでコンパイルがすんなりとおるんですって('-'*)

 Hashtable<String, String> table = new Hashtable<String, String>();

理解できると楽しいっすね(^_^)
5月14日

mixiはじめました

ミクシィはじめました。
 
よろしくです('-'*)
 
第 1 张,共 8 张