黑马程序员_学习笔记7可变参数的应用及1.5增强for的联合使用以及反射的总结

 

---------------------- android培训java培训、期待与您交流! ----------------------

 

可变参数的特点:

1,只能出现在参数列表最后;

2,位于变量类型和变量名之间,前后有无空格都可以

3,调用可变参数的方法是,编译器为该可变参数隐含创建一个数组,在方法体重以数组形式访问可变参数

4,当有一个拥有3个变量的不可变的重载的方法时,会优先使用非可变参数的方法

程序举例:

public class TestVarArgus {  
    public static int sumArray(int x ,int... intArray){  //intArray前后有无空格都可以,int...intArray只能出现在参数列表的最后。
        int sum = x;
        for (int i : intArray)  {//用增加的for循环来遍历数组。可变参数名就是数组名。
            sum += i;
        }
         System.out.println{"1方法"}     
         return sum;
    }  
    public static int sumArray(int x ,int y ,int z){ //intArray前后有无空格都可以,int...intArray只能出现在参数列表的最后。 
         int sum = x+y+z;         }
         System.out.println{"2方法}     
         return sum;
    }  
 
     public static void main(String args[]){  
        sum(1,2,3,4);//执行拥有可变参数的1方法
        sum(1,2);  //执行拥有可变参数的1方法
        sum(1, 2, 3);  // ******注意,当有一个拥有3个变量的不可变的重载的方法时,会优先使用非可变参数的方法,这里会调用2方法。
 
  }  

}  

java反射中各种方法的总结:

java.lang.reflect包

Constructor、Field、Method的父类是AccessibleObject;


一、获得Class对象


Class<?> c = Class.forName("classname");   抛出ClassNotFoundException


二、获得实现接口


Class<?> inters[] = c.getInterfaces();

for(int i=0;i<inters.length;i++){

    System.out.print(inters[i].getName()+" ");        //getName()方法为取得接口名称;

}


三、获得父类


Class<?> superClass  = c.getSuperclass();     //获得父类

String name  = superClass.getName();    //获得父类名称


四、取得构造方法


Constructor cons[] = c.getConstructors();         //获得公开的构造方法

Constructor dcons[] = c.getDeclaredConstructors();        //获得全部构造方法

String modifier = Modifier.toString(cons[i].getModifiers());   //获得访问权限

String name = cons[i].getName();            //获得构造方法名称

Class<?> params[] = cons[i].getParameterTypes();        //获得参数类型对象


五、获得Method


Method ms[] = c.getMethods();                        //返回公共的全部方法,包括继承方法

Method dms[] = c.getDeclaredMethods();        //返回本类全部方法,不包括继承的方法

Class<?> rt = ms[i].getReturnType();

Class<?>params[] = ms[i].getParameterTypes();

String name = ms[i].getName();

String modifier = Modifier.toString(ms[i].getModifiers());

Class<?>ex[] = ms[i].getExceptionTypes();        //获得异常

String name = ex[i].getName();            //获得异常名称


六、获得Field


Field fs[] = c.getFields();                    //获得公共属性,包括继承到得公共属性

Field dfs[] = c.getDeclaredFields();    // 获得本类全部属性

Class<?> type = fs[i].getType();        //获得属性的类型对象

String name = fs[i].getName();        //获得属性的名称

String modifier = Modifier.toString(fs[i].getModifiers());


七、通过反射创建一个对象


Class<?> c = Class.forName("Person");

Person p = (Person)c.newInstance();


八、Constructor创建对象


Class c = Class.forName("Person");
Constructor<?> cons[] = c.getConstructors();
Person p = (Person)cons[0].newInstance("xiazdong",15);


九、调用特定方法


Method m = c1.getMethod("funcname",Class<?>...c);   //funcname表示调用方法的名称,c表示参数的Class对象

例如:Method m = c1.getMethod("fun",String.class,int.class);    表示调用fun(String,int);函数

m.invoke(c1.newInstance(),"xiazdong",20);   //如果有返回值,则invoke函数返回;


十、调用特定属性


Field f = c1.getDeclaredField("name");    //返回name属性

f.setAccessible(true);    //私有属性可见

f.get(Object obj);   //返回obj对象的name属性的值

f.set(Object obj,String n);      //设置obj对象的name属性为n值;


十一、操作数组


int tmp[] = {1,2,3};

Class<?> c  = tmp.getClass().getComponentType();

Array.getLength(tmp);        //tmp数组的长度

c.getName();           //获得数组类型名称

Array.get(Object obj,int index);      //获得obj数组的index索引的数值

Array.set(Object obj,int index,VALUE);    //设置obj数组的index索引的数值为value;

Object obj  = Array.newInstance(c,length);          //c为数组的类型,length为数组的长度;obj为返回的数组对象;

 


---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值