package com; import java.util.*; public class ArrayListTest { public static void main(String[] args) { // fill the staff array list with three Employee objects // 声明和构造一个保存Employee对象的数组列表 ArrayList<Employee> staff = new ArrayList<Employee> () ; Employee temp1 = new Employee("Eric", "Zhang", 80000, 1989, 3, 14) ; Employee temp2 = new Employee("Huiyi", "Chen", 80000, 1989, 3, 14) ; staff.add(new Employee("Carl", "Cracker", 75000, 1987, 12, 15)) ; staff.add(new Employee("Harry", "Hacker", 50000, 1989, 10, 1)) ; staff.add(new Employee("Tony", "Tester", 40000, 1990, 3, 15)) ; staff.add(temp2) ; //使用add方法将对象添加到列表的指定位置,而不会覆盖原值,原有值会自动往下移动一格 staff.add(0 , temp1) ; //使用set方法将对象添加到列表的指定位置,会覆盖原值 staff.set(4 , temp2) ; // 使用remove方法将指定位置的对象从列表中删除,其后的对象将自动往上移一个同时调整列表大小 staff.remove(3) ; // 方法 size()返回当前列表中元素的个数 System.out.println("\nstaff.size()= " + staff.size() + "\n"); // raise everyone's salary by 5% for(Employee e : staff) e.raiseSalary(5) ; /* 等同于如下for循环 * for (int i = 0; i < staff.size(); i++) * { * Employee e = (Employee)staff.get(i) ; * e.raiseSalary(5); * } */ // print out the information about all Employee objects for(Employee e : staff) System.out.println("Name= " + e.getName() + " , salary= " + e.getSalary() +" , hireDay= " + e.getHireDay()) ; } }
package com; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.*; public class ReflectionTest { public static void main(String[] args) { // read class name from command-line args or user input // 从命令行获取参数 name String name ; if (args.length > 0) name = args[0] ; else { Scanner in = new Scanner (System.in) ; System.out.println("Enter class name (e.g. java.util.Date ): ") ; name = in.next() ; } //异常捕获 try { //print class name and superclass name ( if != Object ) // 利用静态方法forName 获得字符串对应的Class对象,返回与类名name对应的Class对象 Class cl = Class.forName(name) ; // 取得上面得到的Class对象的超类 名称 Class supercl = cl.getSuperclass() ; // 输出所要查看的类的名称 信息 System.out.print(" //输出的 class 类信息是: " + name ) ; //输出name类的超类(继承关系) if ( supercl != null && supercl != Object.class) System.out.print( " extends/*继承*/ " + supercl.getName()) ; System.out.print("\n {\n"); // 输出类对象的所有构造器 System.out.println(" //输出类对象的所有构造器:") ; printConstructors(cl) ; System.out.println() ; // 输出类对象的所有方法 System.out.println(" //输出类对象的所有方法:") ; printMethods(cl) ; System.out.println() ; // 输出类对象的所有实例域 System.out.println(" //输出类对象的所有实例域:") ; printFields(cl) ; System.out.println(" }") ; } catch(ClassNotFoundException e) { // 将Throwable对象和栈的轨迹输出到标准错误流 e.printStackTrace() ; } System.exit(0) ; } /* prints all constuctors of a class 打印类对象的构造器 @param cl a class */ public static void printConstructors(Class cl) { // 将返回包含Constructor对象的数组 Constructor[] constructors = cl.getDeclaredConstructors() ; for ( Constructor c : constructors) { String name = c.getName() ; // 得到对应构造器的修饰符 System.out.print(" " + Modifier.toString(c.getModifiers())) ; // 得到对应构造器的名称 System.out.print(" " + name +"(" ) ; //print parameter types 打印构造器的参数类型 Class[] paramTypes = c.getParameterTypes() ; for ( int j = 0 ; j < paramTypes.length ; j++ ) { if ( j > 0 ) System.out.print(" , ") ; System.out.print( paramTypes[j].getName()) ; } System.out.println("); ") ; } } /* Prints all methods of a class @param cl a class */ public static void printMethods(Class cl) { // 将返回包含Method对象的数组 Method[] methods = cl.getDeclaredMethods() ; for (Method m : methods) { Class retType = m.getReturnType() ; String name = m.getName() ; // print modifiers, return type and method name System.out.print(" " + Modifier.toString(m.getModifiers())) ; System.out.print(" " + retType.getName() +" " + name + "(" ) ; // print parameter types Class[] paramTypes = m.getParameterTypes() ; for(int j = 0 ; j < paramTypes.length ; j++ ) { if ( j > 0 ) System.out.print(" , ") ; System.out.print( paramTypes[j].getName()) ; } System.out.println("); ") ; } } /* Prints all fields of a class @param cl a class */ public static void printFields(Class cl) { // 将返回包含Field对象的数组 Field[] fields = cl.getDeclaredFields() ; for ( Field f : fields) { Class type = f.getType() ; String name = f.getName() ; System.out.print(" " + Modifier.toString(f.getModifiers())) ; System.out.print(" " + type.getName() +" " + name + "; \n" ) ; } } }