ダークホースプログラマー_ハイテク

10933 ワード

--------------------------------androidトレーニングJAvaトレーニング、あなたと交流することを期待します!---------------------------------------
 
 

まとめ:


列挙


列挙とは、あるタイプの変数の値をいくつかの固定値のうちの1つにすることです.そうしないと、コンパイラはエラーを報告します.列挙はコンパイラに
 
コンパイル時にソースプログラムに記入された不正値を制御することができ,通常変数の方式では開発段階ではこの目標を実現できない.
 
列挙はクラスに相当し、構造メソッド、メンバー変数、一般メソッド、抽象メソッドを定義することもできます.
 
列挙要素は、列挙体の最初の部分にある必要があります.列挙要素のリストの後に、他のメンバーとセミコロンで区切らなければなりません.
 
列挙中のメンバーメソッドや変数などを列挙要素の前に置き、コンパイラはエラーを報告します.
 
コンストラクションメソッド付き列挙コンストラクションメソッドは、プライベートとして定義する必要があります.複数のコンストラクションメソッドがある場合、どのコンストラクションメソッドを選択しますか?
 
列挙要素MONはMON()の効果と同様に,デフォルトの構築方法を呼び出す.メソッド付き列挙定義列挙TrafficLamp実装
 
一般的なnextメソッドは抽象的なnextメソッドを実現します:各要素はそれぞれ列挙クラスのサブクラスによって生成されたインスタンスオブジェクトで、これらのサブクラスは内部クラスのような方を採用します
 
式を定義します.上表示時間を増やす仕組み
 
 
 

可変パラメータ


可変パラメータは、パラメータリストの最後にのみ配置できます.
 
配列として使用
 

はんしゃ


質問:Methodオブジェクトに渡されるinvoke()メソッドの最初のパラメータがnullである場合、これはどのような意味を持つのでしょうか.
 
答え:Methodオブジェクトは、配列パラメータを受け入れる静的メソッドのメンバーメソッドに対応しています.
 
解決方法:
 
1.Methodオブジェクトinvoke(null,Object[]{new String[]{"xxx"}});
 
2.Methodオブジェクトinvoke(null,(Object)new String[]{"xxx"});
 
beanutilsはカスケード操作をサポートし、BeanUtils.setproperty(オブジェクト、オブジェクトのプロパティ名、値を反射します);
 
BeanUtils.setproperty(pt1,"birthday.time","111");
 
JAva 7の新しい特性:Mapmap=(name:“zxx”,age:“100”);
 
BeanUtilsはjavaを文字列で操作するPropertyUtilsは属性そのもののタイプで操作する
 
各バイトコードに対応するインスタンスオブジェクト(Classタイプ)を取得するにはどうすればいいですか?
 
类名class、例えばSystem.class
 
オブジェクトgetClass()、例えばnew Date().getClass()
 
Class.forName(「クラス名」)、たとえばClass.forName("java.util.Date");  
9つの事前定義Classインスタンスオブジェクト:
Classを参照isPrimitiveメソッドのヘルプ
Int.class == Integer.TYPE
配列タイプのClassインスタンスオブジェクトClass.isArray()
要するに、ソースプログラムに現れるタイプであれば、それぞれのClassインスタンスオブジェクト、例えばint[],void...

JAva注記


まとめ:注釈は1種の標識に相当して、プログラムの中で注釈をプラスしてプログラムのためにある種の標識を打ったことに等しくて、プラスしていないで、ある種の標識がないことに等しくて、後で、
 
JAvacコンパイラ、開発ツール、その他のプログラムは反射であなたのクラスと各種要素にどんなマークがあるかを知ることができて、あなたがどんなマークがあるかを見て、相応のことをします
 
事.タグは、パッケージ、クラス、フィールド、メソッド、メソッドのパラメータ、およびローカル変数に追加できます.Javaを見てlangパッケージ、JDKで提供されている最も基本的な
 
annotation.

汎用型


ArrayListクラス定義およびArrayListクラス参照には、次の用語が含まれます.
 
全体的にArrayList汎用タイプArrayListと呼ばれるEをタイプ変数またはタイプパラメータと呼ぶ
 
ArrayList全体をパラメトリックタイプと呼ぶ
 
ArrayListのIntegerをタイプパラメータと呼ぶインスタンスまたは実際のタイプパラメータ
 
ArrayListの<>はtypeofを読んでいます
 
ArrayListは元のタイプパラメトリックタイプと呼ばれ、タイプパラメータの継承関係を考慮しない.
 
Vector v = new Vector();//エラー「Object」を書かないのは間違いなく、書いたのは故犯を知っているからだ.
 
Vector v = new Vector();//間違っています!
 
Vector v1 = new Vector();//できる
 
Vector v = v1;//できる
 
まとめ:使う?ワイルドカードは他のパラメータ化されたタイプを参照できます.
 
?ワイルドカードで定義された変数は主に参照として使用され、パラメータ化に関係のないメソッドを呼び出すことができ、パラメータ化に関連するメソッドを呼び出すことはできません.
 
ワイルドカードの上部境界を定義するには、次の手順に従います.
 
正しい:Vector x = new Vector();
 
エラー:Vector x = new Vector();
 
ワイルドカードの下の境界を定義します.
 
正しい:Vector x = new Vector();
 
エラー:Vector x = new Vector();
 
ヒント:ワイルドカードにはいつも自分が含まれています.?参照としてのみ使用でき、他の変数に値を割り当てることはできません.
 
Vector y = new Vector();
 
Vector x = y;
 
上のコードエラー、原理はVectorx 11=new Vector();同様に、強制型変換方式のみで
 
値を付ける.
 
まとめ:基本データ型ともにNumber型
 
注意:
 
1.汎用型をパラメータ化する場合、タイプパラメータのインスタンスは参照タイプでなければなりません.ベースタイプではありません.
 
2.1つの変数が汎用として宣言された場合、インスタンス変数とメソッドのみで呼び出されます(埋め込みタイプもあります).静的変数と静的メソッドでは使用できません.
 
を呼び出します.静的メンバーは、パラメータ化されたクラスによって共有されるため、静的メンバーにはクラスレベルのタイプパラメータがあるべきではありません.
 
注意:
1) public static void applyVector (Vector v1){ }
2) public static void applyVector(Vector v1){ }
バイトコードが同じなので、リロードする方法ではありません.
 
 
ポイント:
 
変数名による変数の汎用タイプの取得
 
方法:public static void applyVector(Vectorv 1){}
 
手順:
 
1)Method applyMethod=クラス名.class.getMethod("applyVector",Vector);
 
2)Type[] types = applyMethod.getGenericParameterTypes();
 
3)ParameterizedType pType = (ParameterizedType)types[0];
 
4)syso("pType.getRawType()");//パラメータタイプの取得
 
5)syso(pType.getACtualTypeArguments()[0]); メソッドの内部関数メソッドのローカル変数にアクセスするには、必ず
 
必須final
 

重点——動的エージェント:


package cn.itcast.day3;

import java.lang.reflect.Method;

public class MyAdvice implements Advice {
	long beginTime = 0;
	public void afterMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println(" !");		
		long endTime = System.currentTimeMillis();
		System.out.println(method.getName() + " running time of " + (endTime - beginTime));

	}

	public void beforeMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println(" !");
		beginTime = System.currentTimeMillis();
	}

}
 

package cn.itcast.day3;

import java.lang.reflect.Method;

public interface Advice {
	void beforeMethod(Method method);
	void afterMethod(Method method);
}
 

package cn.itcast.day3;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;

public class ProxyTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
		System.out.println(clazzProxy1.getName());
		
		System.out.println("----------begin constructors list----------");
		/*$Proxy0()
		$Proxy0(InvocationHandler,int)*/
		Constructor[] constructors = clazzProxy1.getConstructors();
		for(Constructor constructor : constructors){
			String name = constructor.getName();
			StringBuilder sBuilder = new StringBuilder(name);
			sBuilder.append('(');
			Class[] clazzParams = constructor.getParameterTypes();
			for(Class clazzParam : clazzParams){
				sBuilder.append(clazzParam.getName()).append(',');
			}
			if(clazzParams!=null && clazzParams.length != 0)
				sBuilder.deleteCharAt(sBuilder.length()-1);
			sBuilder.append(')');
			System.out.println(sBuilder.toString());			
		}

		System.out.println("----------begin methods list----------");
		/*$Proxy0()
		$Proxy0(InvocationHandler,int)*/
		Method[] methods = clazzProxy1.getMethods();
		for(Method method : methods){
			String name = method.getName();
			StringBuilder sBuilder = new StringBuilder(name);
			sBuilder.append('(');
			Class[] clazzParams = method.getParameterTypes();
			for(Class clazzParam : clazzParams){
				sBuilder.append(clazzParam.getName()).append(',');
			}
			if(clazzParams!=null && clazzParams.length != 0)
				sBuilder.deleteCharAt(sBuilder.length()-1);
			sBuilder.append(')');
			System.out.println(sBuilder.toString());			
		}
		
		System.out.println("----------begin create instance object----------");
		//Object obj = clazzProxy1.newInstance();
		Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
		class MyInvocationHander1 implements InvocationHandler{

			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				// TODO Auto-generated method stub
				return null;
			}
		
		}
		Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHander1());
		
		System.out.println(proxy1);
		proxy1.clear();
		//proxy1.size();
		//System.out.println("111111111111111");
		
		Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){

			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				return null;
			}
			
		});
		
		final ArrayList target = new ArrayList();			
		Collection proxy3 = (Collection)getProxy(target,new MyAdvice());
		proxy3.add("zxx");
		proxy3.add("lhm");
		proxy3.add("bxd");
		System.out.println(proxy3.size());
		System.out.println(proxy3.getClass().getName());
	}

	private static Object getProxy(final Object target,final Advice advice) {
		Object proxy3 = Proxy.newProxyInstance(
				target.getClass().getClassLoader(),
				/*new Class[]{Collection.class},*/
				target.getClass().getInterfaces(),
				new InvocationHandler(){
				
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {

						/*long beginTime = System.currentTimeMillis();
						Object retVal = method.invoke(target, args);
						long endTime = System.currentTimeMillis();
						System.out.println(method.getName() + " running time of " + (endTime - beginTime));
						return retVal;*/
						

						advice.beforeMethod(method);
						Object retVal = method.invoke(target, args);
						advice.afterMethod(method);
						return retVal;						
						
					}
				}
				);
		return proxy3;
	}

}
 
----------
----------
--------
androidトレーニング
JAvaトレーニング
、あなたとの交流を楽しみにしています!
----------
----------
----------
----