core-java学习【二】

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值