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; }
:
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"});