java基础之----反射

时间:2023-02-16 11:05:45

java 反射的基石–Class类。

java中的类是用于描述一类事物的共性,该事物有什么属性,没有什么属性,至于这个属性值是什么,则是由这个实的实例对象确定的。不同的实例对象有不同的属性值。java程序中的各个类,他们是否属于同一类事物,是不是可以用一个类来描述这些java类呢。这个类的名字就是Class。要注意小写关键了和大写关键字的区别。

Class类描述了那些属性呢?例如,类的名字的,类的属性,类所属包。类的方法。类的构造方法等等。

学习反射,首先要学习的就是Class类。class类是反射的根本。

Class代表JAVA类。那么它的实例对象又代表什么呢:
1、对应各个类在内存中的对应的字节码,
2、一个类被类加载器加载到内存中,占用一片存储空间,这片空间的内容就是类的字节码,不同类的字节码是不同的。所以他们在内存中的内容是不同的。这些空间可以用一个个的对象来表示。

如何得到各个字节码对应的对象呢,有三种方法,
方法一:字节码的文件名: Class cls1 = Data.class //字节码
Class cls2 = Person.class //字节码
方法二:创建一个实例对象,调用实例对象的getClass()方法。 p1.getClass();
方法三,通过一个静态方法: Class.forName(“java.lang.string”)
forName()方法作用:
1、得到已经加载到内存中的字节码的类名。
2、通过类加载器加载字节码,并取得字节码的类名。
有9个预定义的Class对象,int,byte,long,float,double,boolean,等,另外void也是一个基本的class对象。存在class.void.

反射的定义:
* 反射就是指把java类中的成分都转换成java类。例如,一个类中用一个Class类的对象来表示一个类中的组成部分,成员变量,变员方法,构造方法,包等信息,这些信息也用一个个java类来表示,
就像汽车是一个类,汽车中的发动机,变速箱也是一个个类。表示java类的Class类显然要提供一系统的方法来获得其中的方法,成员变量,包、修饰符等信息。这些信息就是用相应类的实例对象来表示,
他们是field Method Package Contructor
一个类的每一个成员都可以用相应的反映API的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象。得到这些实例对象后,有什么用呢,怎么用呢,就是反射所要学习的知识点。*/

public class ReflectionDemo {
public static void main(String[] args) throws Exception {
String str1 = "abc";
Class cls1 = str1.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println("cls1 == cls2");
System.out.println("cls2 == cls3");
System.out.println(cls1.isPrimitive());
System.out.println(int.class.isPrimitive());
System.out.println(int.class == Integer.class);
System.out.println(int.class == Integer.TYPE);
System.out.println(int[].class.isPrimitive());
System.out.println(int[].class.isArray());

}

}