java反射 int_JAVA反射

Class类

在面向对象的世界里,万事万物皆对象

类是对象,类是java.lang.Class类的实例对象,每一个对象所属的类就是java.lang.Class类的实例。

下面一个事例:

public class ClassDemo1 {

public static void main(String[] args) {

//Foo的实例对象如何表示

Foo foo1=new Foo();

//Foo类也是一个实例,Class类的实例对象如何表示

//任何类都是Class的实例对象,这个实例对象有三种表示方式

//第一种表示方式--->任何一个类都有一个隐含的静态成员变量class

Class c1=Foo.class;

// 第二种表达方式,已经知道该类的对象通过getClass方法

Class c2=foo1.getClass();

/**

* 官网c1,c2表示Foo类的类类型(class type)

* 万事万物皆对象

* 类也是对象,是Class类的实例对象

* 这个对象我们称为该类的类类型

*/

//不管c1 or c2都代表了Foo类的类类型,一个类只可能是Class类的一个势力实例对象

System.out.println(c1==c2);

//第三种表达方式

Class c3=null;

try {

c3=Class.forName("com.imooc.reflect.Foo");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(c2==c3);

//我们可以通过类的类类型创建该类的对象实例--->通过c1,c2,c3创建Foo的实例对象

try {

Foo foo=(Foo)c1.newInstance();//需要有无参数的构造方法

foo.print();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

class Foo{

void print(){

System.out.println("foo");

}

}

打印结果:

true

true

foo

Class.forName(“类的全称”)

不仅表示了类的类类型,还表示了动态加载类

要区分编译和运行

编译时刻加载类是静态加载类,运行时刻加载类是动态加载类

New创建对象是静态加载类,在类的编译时刻就需要加载所有可能使用到的类,通过动态加载类可以解决该问题(Class.forName(“类的全称”))

获取方法信息

public class ClassDemo2 {

public static void main(String[] args) {

Class c1=int.class;//int的类类型

Class c2=String.class;//String的类类型

Class c3=double.class;

Class c4=Double.class;

Class c5=void.class;

System.out.println(c1.getName());

System.out.println(c2.getName());

System.out.println(c2.getSimpleName());//不包含包名的类名称

System.out.println(c3.getName());

System.out.println(c4.getName());

System.out.println(c5.getName());

}

}

打印结果:

int

java.lang.String

String

double

java.lang.Double

void

基本数据类型

void关机键字都存在类类型

Class类的基本API操作

查看类的成员函数

public class ClassUtil {

/**

* 打印类的信息,包括类的成员函数,成员变量

* @param obj该对象所属类的信息

*/

public static void printClassMessage(Object obj) {

//获取累的信息,首先获取类的类类型

Class c=obj.getClass();//传递的是哪个子类的对象,C就是该子类的类类型

//获取类的名称

System.out.println("类的名称:"+c.getName());

/**

* Method类,方法对象,一个成员方法就是一个Method对象

* getMethods()方法获取的是所有的public的函数,包括父类继承而来的

* getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限

*/

Method[] ms=c.getMethods();//c.getDeclaredMethods()

for (int i=0;i

//得到方法的返回值类型的类类型,如果方法返回时String或者int类型,那么得到的就是String.class或int.class

Class returnType=ms[i].getReturnType();

System.out.print(returnType.getName()+" ");

//得到方法名称

System.out.print(ms[i].getName()+"(");

//获取参数类型--->得到的是参数列表的类型的类类型

Class[] paramTypes=ms[i].getParameterTypes();

for (int j=0;j

System.out.print(paramTypes[j].getName()+",");

}

System.out.println(")");

}

}

public static void main(String[] args) {

String s="hello";

ClassUtil.printClassMessage(s);

}

}

打印结果:

类的名称:java.lang.String

boolean equals(java.lang.Object,)

java.lang.String toString()

int hashCode()

int compareTo(java.lang.String,)

int compareTo(java.lang.Object,)

int indexOf(java.lang.String,int,)

int indexOf(java.lang.String,)

int indexOf(int,int,)

int indexOf(int,)

java.lang.String valueOf(int,)

java.lang.String valueOf(long,)

java.lang.String valueOf(float,)

java.lang.String valueOf(boolean,)

java.lang.String valueOf([C,)

java.lang.String valueOf([C,int,int,)

java.lang.String valueOf(java.lang.Object,)

java.lang.String valueOf(char,)

java.lang.String valueOf(double,)

char charAt(int,)

int codePointAt(int,)

int codePointBefore(int,)

int codePointCount(int,int,)

int compareToIgnoreCase(java.lang.String,)

java.lang.String concat(java.lang.String,)

boolean contains(java.lang.CharSequence,)

boolean contentEquals(java.lang.CharSequence,)

boolean contentEquals(java.lang.StringBuffer,)

java.lang.String copyValueOf([C,)

java.lang.String copyValueOf([C,int,int,)

boolean endsWith(java.lang.String,)

boolean equalsIgnoreCase(java.lang.String,)

java.lang.String format(java.util.Locale,java.lang.String,[Ljava.lang.Object;,)

java.lang.String format(java.lang.String,[Ljava.lang.Object;,)

void getBytes(int,int,[B,int,)

[B getBytes(java.nio.charset.Charset,)

[B getBytes(java.lang.String,)

[B getBytes()

void getChars(int,int,[C,int,)

java.lang.String intern()

boolean isEmpty()

java.lang.String join(java.lang.CharSequence,[Ljava.lang.CharSequence;,)

java.lang.String join(java.lang.CharSequence,java.lang.Iterable,)

int lastIndexOf(int,)

int lastIndexOf(java.lang.String,)

int lastIndexOf(java.lang.String,int,)

int lastIndexOf(int,int,)

int length()

boolean matches(java.lang.String,)

int offsetByCodePoints(int,int,)

boolean regionMatches(int,java.lang.String,int,int,)

boolean regionMatches(boolean,int,java.lang.String,int,int,)

java.lang.String replace(char,char,)

java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence,)

java.lang.String replaceAll(java.lang.String,java.lang.String,)

java.lang.String replaceFirst(java.lang.String,java.lang.String,)

[Ljava.lang.String; split(java.lang.String,)

[Ljava.lang.String; split(java.lang.String,int,)

boolean startsWith(java.lang.String,int,)

boolean startsWith(java.lang.String,)

java.lang.CharSequence subSequence(int,int,)

java.lang.String substring(int,)

java.lang.String substring(int,int,)

[C toCharArray()

java.lang.String toLowerCase(java.util.Locale,)

java.lang.String toLowerCase()

java.lang.String toUpperCase()

java.lang.String toUpperCase(java.util.Locale,)

java.lang.String trim()

void wait()

void wait(long,int,)

void wait(long,)

java.lang.Class getClass()

void notify()

void notifyAll()

java.util.stream.IntStream chars()

java.util.stream.IntStream codePoints()

查看类的成员变量

public class ClassUtil {

/**

* 打印类的信息,包括类的成员变量

* @param obj该对象所属类的信息

*/

public static void printFieldMessage(Object obj) {

Class c=obj.getClass();

/**

* 成员变量也是对象,java.lang.reflect.Field类封装了关于成员变量的操作

* getFields()方法获取的是所有的public的成员变量的信息

* getDeclaredFields()获得自己所有声明的成员变量的信息

*/

//Field[] fs=c.getFields();

Field[] fs=c.getDeclaredFields();

for(int k=0;k

//得到成员变量的类类型

Class fieldType=fs[k].getType();

String typeName=fieldType.getName();

//得到成员变量的名称

String fieldName=fs[k].getName();

System.out.println(typeName+" "+fieldName);

}

}

public static void main(String[] args) {

String s="hello";

ClassUtil.printFieldMessage(s);

}

}

打印结果:

[C value

int hash

long serialVersionUID

[Ljava.io.ObjectStreamField; serialPersistentFields

java.util.Comparator CASE_INSENSITIVE_ORDER

查看类的构造函数

public class ClassUtil {

/**

* 打印类的信息,包括类的构造函数

* @param obj该对象所属类的信息

*/

public static void printConstructorMessage(Object obj) {

/*

*打印构造函数信息,构造函数也是对象

* java.lang.Constructor中封装了构造函数的信息

* getConstructors()获取所有的public的构造函数

* .getDeclaredConstructors()得到所有的public的构造方法

*/

Class c=obj.getClass();

//Constructor[] cs=c.getConstructors();

Constructor[] cs=c.getDeclaredConstructors();

for(int i=0;i

System.out.print(cs[i].getName()+"(");

//获取构造函数的参数列表

Class[] paramTypes=cs[i].getParameterTypes();

for(int j=0;j

System.out.print(paramTypes[j].getName()+",");

}

System.out.println(")");

}

}

public static void main(String[] args) {

String s="hello";

ClassUtil.printConstructorMessage(s);

}

}

}

打印结果:

java.lang.String([B,int,int,)

java.lang.String([B,java.nio.charset.Charset,)

java.lang.String([B,java.lang.String,)

java.lang.String([B,int,int,java.nio.charset.Charset,)

java.lang.String([B,int,int,java.lang.String,)

java.lang.String([C,boolean,)

java.lang.String(java.lang.StringBuilder,)

java.lang.String(java.lang.StringBuffer,)

java.lang.String([B,)

java.lang.String([I,int,int,)

java.lang.String()

java.lang.String([C,)

java.lang.String(java.lang.String,)

java.lang.String([C,int,int,)

java.lang.String([B,int,)

java.lang.String([B,int,int,int,)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值