java 高新技術 總結(一)



java 技術提升,複習,總結(一)

1:方法的多變參數 

看代碼理解:

public static void main(String[] args) {
		System.out.println(sum(1,2,3));
		System.out.println(sumfor(1,2,3));
	}
	/**
	 * 多變參數
	 * @param i
	 * @param args
	 * @return
	 */
	public static int sum(int i ,int ...args){
		int sum = 0;
		for (int j = 0; j < args.length; j++) {
			sum+=args[i];
		}
		return sum;
	}
	/**
	 * 增強for循環
	 * @param i
	 * @param args
	 * @return
	 */
	public static int sumfor(int i ,int ...args){
		int sum = i;//注意此處
		for (int arg : args) {
			sum+=arg;
		}
		return sum;
	}

2:枚舉的運用


	public static void main(String[] args) {
		
		System.out.println(WeekDays.SUN);
//		System.out.println(WeekDays.SUN.name());
//		System.out.println(WeekDays.SUN.name().toString());
//		System.out.println(WeekDays.SUN.ordinal());
//		System.out.println(WeekDays.valueOf("SUN").name());
//		System.out.println(WeekDays.values().length);
		
		
	}
	
	public enum WeekDays{
		
		SUN(1),MON(2,3),TUS,WED,THI,FRI,STA;
		private WeekDays() {
			System.out.println("frist");
			
		}
		private WeekDays(int day) {
			System.out.println("second");
		}
		private WeekDays(int day,int name) {
			System.out.println("third");
		}
		
	}
	/**
	 * 帶抽象方法
	 * 有構造方法
	 * @author Administrator
	 *
	 */
	public enum Light{
		
		RED(20){

			@Override
			public Light getLight() {
				// TODO Auto-generated method stub
				return null;
			}
			
		},
		GREEN(40){

			@Override
			public Light getLight() {
				// TODO Auto-generated method stub
				return null;
			}
			
		};
		public abstract Light getLight();
		private int time;
		private Light(int time){
			this.time  = time;
		};
		
	}
3:反射;

/**
 * 反射輔助類
 * @author JiaRH
 *
 */
public class FieldReflect {

	private int x = 0;
	public int y = 0;
	
	public String aa1="bbbaaa";
	public String aa2="bbbaaa";
	public String aa3="bbbaaa";
	public FieldReflect(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return aa1+"=="+aa2+"=="+aa3;
		
	}
}

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflect {

	public static void main(String[] args) {
		String str1 = "abc";
		Class cl1 = str1.getClass();
		Class cl2 = String.class;
		try {
			/**
			 * 反射基本方法
			 */
			 Class cl3 = Class.forName("java.lang.String");
			 System.out.println(cl1==cl2);
			 System.out.println(cl1==cl3);
			 System.out.println(cl2==cl3);
			 System.out.println(int.class == Integer.TYPE );
			 System.out.println(cl1.isPrimitive());
			 System.out.println(cl2.isPrimitive());
			 System.out.println(cl3.isPrimitive());
			 System.out.println(Integer.class.isPrimitive());
			 System.out.println(int.class.isPrimitive());
			 /**
			  * 
			  * 獲取 構造方法,並實例新的對象
			  */
			 Constructor constructor = String.class.getConstructor(StringBuffer.class);
			 String str2 = (String)constructor.newInstance(new StringBuffer("abc"));
			 System.out.println(str2.charAt(2));
			 /**
			  * 字段
			  * 獲取成員變量的值
			  */
			 FieldReflect f1 = new FieldReflect(2, 5);
			 FieldReflect f2 = new FieldReflect(2, 6);
			 //獲取成員變量對象
			 Field ff1 = f1.getClass().getField("y");
			 Field ff2 = f1.getClass().getField("y");
			 //取值
			 System.out.println(ff1.get(f1)+"");//注意獲取值的方法
			 System.out.println(ff2.get(f2)+"");
			 
			 /**
			  * 獲取私有的成員變量
			  * (暴力反射)
			  */
			 Field ff3 = f1.getClass().getDeclaredField("x");
			 ff3.setAccessible(true);
			 System.out.println(ff3.get(f1)+"");
			 
			 /**
			  * 利用反射改變值
			  * 將f1對象中所有的成員變量中含有的a變爲b
			  */
			 Field[] fields = f1.getClass().getFields();
			 
			 for (Field field: fields) {
				 if (field.getType()==String.class) {
					 String priValue = (String) field.get(f1);
					 String newValue = priValue.replace('a', 'b');
					 field.set(f1, newValue);
					
				}
			}
			 System.out.println(f1);
			 
			 /**
			  * 獲取方法
			  * 調用方法
			  */
			 //new String().charAt(index)
			 Method methodCharat=String.class.getMethod("charAt", int.class);
			 System.out.println(methodCharat.invoke(str2, 1));
			 //System.out.println(methodCharat.invoke(null, 1));//表明是一個靜態方法
			 
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
}

利用反射調用其它類的main()方法


class TestArguments{
	public static void main(String[] args){
		for(String arg : args){
			System.out.println(arg);
		}
	}
}


//TestArguments.main(new String[]{"111","222","333"});
		String startingClassName = args[0];
		Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
		//mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
		mainMethod.invoke(null, (Object)new String[]{"111","222","333"});

關於更多反射請看java 技術提升,複習,總結(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章