java基础学习笔记8

来源:互联网 发布:英文文献数据库 编辑:程序博客网 时间:2024/05/21 04:39

可变参数

问题:一个方法接受的参数个数不确定,例如:

System.out.println(add(2,3,5));

System.out.println(add(1,2,3,5));


可变参数的特点:

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

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

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



增强for循环

语法:

for(type  变量名:集合变量名){...}

注意:

迭代变量必须在()中定义;

集合变量可以是数组或者实现了lterable接口的集合类;

eg:

public static int add(int x,int...args){

int sum=x;

for(int arg:args){

sum+=arg;

}

return   sum;

}


自动装箱

Integer num1=12;

自动拆箱

System.out.println(num1+12);


反射的基石——class类

java程序中的各个java类属于同一类事物,描述这类事物的java类名就是class;

对比提问:

众多的人用一个什么类表示?众多的java类用一个什么类表示?

人——>people

java类——>class


class

class->代表一类什么样的事物?

peoson p1=new person();

person  p2=new person();


Date

Math

Class  cls1=Date.class//字节码1

Class  cls2=person.class//字节码2

p1.getClass();

Class.forName("java.lang.String");

如何得到各个字节码对应的实例对象(class类型)

类名.class,例如,System.class

对象.getClass(),例如,new Date().getClass();

Class.forName("类名"),例如,class.forName("java.util.Date");

九个预定义Class实例对象

查看class.isPrimitive的帮助

Int.class==Integer.TYPE

数组类型的class实例对象

class.isArray()

总之,只要是在源程序中出现的类型,都有各自的class实例对象,例如int[]



9.9.1 使用class 实例化一个对象

创建对象最常用的方式就是使用new运算和类的构造方法,实际上,也可以使用Class对象得到某个类的实例,步骤如下:

(1)使用class的类方法得到一个和某类(参数className指定的类)相关的class对象:

public static class forName(String className)throws classNotFoundException

上述方法返回一个和参数className指定的类相关的class对象,如果类在某个包中,className必须带有包名,例如:className="java.util.Date"

(2)使用步骤(1)中获得的class对象调用:

public Object newInstance() throws InstantitionException ,IllegaIAccessException可以得到一个ClassName类的对象。

要特别注意的是,使用class对象调用newInstance()实例化一个className类的对象时,className类必须有无参数的构造方法。


如下例子我们使用class对象得到一个Rect类以及java.util包中的Date类的对象。



反射

反射就是把java类中的各种成分映射成相应的java类。

例如,一个java类中用一个class类的对象表示,一个类中的组成部分:

成员变量,方法,构造方法,包等等信息也用一个个的java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个的类。表示java类的class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应的实例对象来表示,它们是Field,Method,Contructor,Package等等。



constructor类

constructor类代表某个类中的一个构造方法

得到某个类所有的构造方法:

例子:constructor constructors[]=Class forName("java.lang.String*").getConstructors();

创建实例对象:

通常方式:String str=new String(new StringBuffer.class);

反射方式:String str=(String )constrcctor.newlnstance(new.StringBuffer("abc")); 



0 0
原创粉丝点击