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