ダークホースプログラマーjava基礎強化ー列挙、反射

5391 ワード

--------------and roid教育javaトレーニング、あなたとの交流を期待します。
 
列挙:
メンバーが一人しかいない場合は、一例として実現できます。
列挙は一つの種類に相当します。構造方法、メンバー方法、一般的な方法、抽象的な方法も定義できます。
エニュメレート・エレメントは、エニュメレート・ボディの最初の部分にある必要があります。リストの後ろには、セミコロンがあります。
列挙に構造方法があれば、この方法はprvateと定義しなければならない。
 
オーバーロード vs Override:
 
オーバーロード :方法の積載は、法名の同じパラメータの個数が異なっていて、パラメータの種類が違っています。一つの方法のパラメータの個数とパラメータの種類が同じなら、戻り値だけが違っていても、方法の重積載と戻り値は関係がないからです。
Override:方法書き換え、方法書き換えはサブクラスで発生します。方法の戻り値タイプ、方法名、パラメータリストと親タイプの方法は完全に一致しており、サブクラスのアクセスレベルは親タイプのアクセスレベルを下回ってはいけない。しかし、子供の中のこの方法がprvateのものなら、親の中の方法を書き換えるのではなく、完全に別の方法です。
享元モード:多くの小さいオブジェクトが同じ属性を持っている場合、それらを一つのオブジェクトにカプセル化し、それらの異なる属性は外部オブジェクトにパッケージ化して方法としてパラメータとして伝えられ、外部状態と呼ばれる方法である。
 
 
反射:
クラス このクラスはメモリのバイトコードの一部を表しています。
クラスのバイトコードを得るには3つの方法があります。
クラス名.クラス——クラス c 1=Date.class
対象.get Class()--new Date().get Class();
      反射クラス.forName(クラス名)――
Class.forNameを使います。を返します。
1、バイトコードです。仮想マシンにロードしました。戻りさえすればいいです。
2、仮想マシンにはまだバイトコードがありません。クラスキャリアでロードして、ロードされたバイトコードを仮想マシンにキャッシュして返します。
     元のタイプかどうかを判断する:
 
String s="abc"; 
Class c1=s.getClass(); 
System.out.println(c1.isPrimitive());
System.out.println(int.class.isPrimitive()); 
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE); 
System.out.println(int[].class.isPrimitive()); 
          Class    : 
System.out.println(int[].class.isArray());

 
 
反射とは、java類の様々な成分をそれぞれのjava類にマッピングすることです。 
ある種類のすべての構造方法を取得します。
コンストラクター[]コンストラクター=
Class.forName(java.lang.String).get Controuctors()
ある種類の構造方法を得る:
コンストラクタ constructor=
Class.forName(java.lang.String)
get Constructor(StringBurer.class)//方法を得るには、タイプが必要です。
インスタンスオブジェクトを作成:
通常方式:String str=new String(new StringBuffer(「abc」);
反射方式:String str=
(Stering)constructor.newInstance(new) StringBuffer("abc")///。取得した方法を呼び出すときは、上記の同じタイプのインスタンスオブジェクトを使用します。
Field クラス:あるクラスのメンバー変数を表します。
 
public class ReflactPoint {
	public int x;
	private int y;
	public String a="abckedg";
	public String b="basket";
	public String c="telnalPhona";
	public ReflactPoint(){}
	public ReflactPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	@Override
	public String toString(){
		return "a:"+a+"b:"+b+"c:"+c;
	}
}
Public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchFieldException {

		ReflactPoint rp=new ReflactPoint(12,45);
		//      x
		//Field               ,              
		Field fieldX=rp.getClass().getField("x");
		System.out.println(fieldX.get(rp));
		//     y
		Field fieldY=rp.getClass().getDeclaredField("y");
		fieldY.setAccessible(true);
		System.out.println(fieldY.get(rp));
          ==   ,   .equals
//  :        String       b  a.
public static void main(String[] args) throws...
		ReflactPoint rp=new ReflactPoint();
		changeString(rp);
		System.out.println(rp);

public static void changeString(Object obj) throws IllegalArgumentException, IllegalAccessException{
		Field[] fields=obj.getClass().getFields();
		for (Field field : fields) {
			if(field.getType()==String.class){
				String oldStr=(String) field.get(obj);
				String newStr=oldStr.replace("a", "e");
				field.set(obj, newStr);
			}
		}
 
 
Method:あるクラスのメンバー方法です。
クラスのいずれかを得る方法:
Method charAt=
Class.forName(「java.lang.String」).get Method(「name」、parameterTypes)
 例えば:
//入手方法
methodCharAt=String.class.get Method(「charAt」,int.class);
methodCharAt.invoke(str,1)//呼び出し方法
呼び出し方法:
通常の方式:System.out.println(str.chart(1));
反射方式:System.out.println(charAt.invoke(str,1));
Methodオブジェクトに渡すinvoke()方法の最初のパラメータがnullである場合、このMethodオブジェクトが対応するのは静的方法であることを示す。
同じ次元と要素タイプを持つ配列は同じタイプ、つまり同じクラスのインスタンスオブジェクトであり、配列を表すクラスのインスタンスオブジェクトのget SuperClass()方法で返される親はObjectクラスに対応するクラスクラスクラスクラスである。
基本データタイプの1次元配列は、 Objectタイプとして使用しても、Object[]タイプとしては使用できません。ベースデータタイプでない1次元配列はObjectタイプとしても使用できますし、Object[]タイプとしても使用できます。
Arays.asList()メソッドの処理int[]とStering[]は異なる。
配列の反射:
Arayツールクラスは、配列に対する反射動作を完了するために使用されます。
ArayList_HashSetの比較とHashcodeの分析:
ArayListの底の実装は、配列データ構造であり、順序付きのセットであり、オブジェクトの参照が格納されており、その中の要素は重複することができる。
HashSetは、その下の実装であり、ハッシュ・テーブルであり、格納されている要素は重複を許さない。
Hashcodeの役割:
hashcodeを変更するとメモリが漏れやすくなります。
プロファイルをロードする3つの方法:
InputStream is=new FileInputStream(「ファイル名」)
InputStream is=
Person.class.get Class Loader().getsResource AsStream(「経路」);
InputStream is=Person.class.gets Resource AsStream(「ファイル名」)
 
 
--------------and roid教育javaトレーニング、あなたとの交流を期待します。