-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
Class类:
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。得到各个字节码对应的实例对象的方法:( Class类型):
1、类名.class。例如,System.class
2、对象.getClass()。例如,new Date().getClass()
3、Class.forName("类名")。例如,Class.forName("java.util.Date");
.class和Class.forName的区别:
后者可以在不确定要获得字节码的具体类的时候使用,传入的是一个字符串,经常在框架中使用。
九个预定义类型的实例对象:
基本的 Java 类型(boolean
、byte
、char
、short
、int
、long
、float
和double
)和关键字void
也
表示为Class
对象。基本类型的字节码获取方式只有一种就是类名.class。
反射:
反射就是把Java类中的各种成分映射成相应的java类。
构造方法的反射:
onstructor类代表某个类中的一个构造方法;
得到某个类所有的构造方法:
例子:Constructor [] constructors= Class.forName("java.lang.String").getConstructors();
得到某一个构造方法:
例子:Constructor constructor=Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);
获得方法时要用到类型,创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
反射方式: String str = (String)constructor.newInstance(new StringBuffer("abc"));
调用获得的方法时要用到上面相同类型的实例对象。
反射练习:
package com.test;
import java.lang.reflect.Array;
//数组的反射
public class FanSheArray
{
public static void main(String[] args)
{
int[] a1=new int[]{1,2,3};
int a2=10;
String[]a3 ={"s","w","f"};
String[] a4=new String[]{"a","b","c"};
// System.out.println(Arrays.asList(a1));
// System.out.println(Arrays.asList(a4));
printObject(a1);
printObject(a4);
}
private static void printObject(Object obj)
{
Class class1=obj.getClass(); //判断传入的值的字节码
if (class1.isArray())
{
int len=Array.getLength(obj); //用反射取得传入的数组的长度
for (int i = 0; i < len; i++) //遍历数组打印
{
System.out.println(Array.get(obj, i));
}
}
else
{
System.out.println(obj);
}
}
}
运行效果: