反射机制学习日记(1)
今天是学习到反射机制的第一天
什么是反射机制?
反射:是一种程序在运行的时候可以将他自身的运行状态作为数据提供我们来查询、修改的一种能力。
java语言对于反射中的查询支持好一些,而修改可能就没那么好
反射的功能:
若提供类名、接口名等字符串:
获取其自身的信息
获取其构造方法、方法、属性(或域)信息
创建实例
若提供有引用名称:
根据方法名调用方法
设置其属性值
能够创建动态数组以及管理其内部元素
Class类!
Class类是整个java反射机制的核心类!
该类来自于java.lang包下,也是泛型类!类型参数表示该类的class
在运行时可以使用他发现本类的所有信息
一个JVM中每加载一个类只会有一个Class对象,若JVM对一个类加载了很多次,也只有一个Class对象!
下面是学习到目前所跟着课程打的代码:
package LessonForRefleciton01;
class Student
{
static
{
System.out.println("--static--");
}
}
public class ReflectDemo01
{
public static void ReflectDemo01()
{
new Student();
}
public static void ReflectDemo02()
{
Class<Student> c = Student.class;//JDK1.5之前可以加载静态初始化块
//getClass()方法
/*
* 这个方法只能给类的实例对象来调用,而不是类本身来调用。
* Student.getClass();是错误的,不能直接通过类名来调用
*/
Class<?> c1 = new Student().getClass();
Student s = new Student();
Class<?> c2 = s.getClass();
}
public static void main(String[] args)
{
// // 如何创建获得一个Class类的实例,以下三种方式都会执行类加载过程,考察类加载过程中,泵类中的静态初始化块是否会执行
// //1.类的class静态属性
// Class<String> c1 = String.class;//Class类是一个泛型类,此时返回的是String
// Class<Student> s1 = Student.class;//第一种创建方法,静态创建
//
// //2.实例对象的getClass方法
// String str = "ZLM";
// Class<?> c2 = str.getClass();//getClass是得到调用这个方法的对象的类的类型
// Student stu = new Student();
// Class<?> s2 = stu.getClass();
//3.使用其静态方法
try
{
// Class<?> c3 = Class.forName("java.lang.String");// Class.forName()这个方法是内部填写一个类的名字
// Class<?> s3 = Class.forName("LessonForRefleciton01.Student");
Class<?> s4 = Class.forName("LessonForRefleciton01.Student", true, ReflectDemo01.class.getClassLoader());
//name:类名
//initialize:是否初始化?
//loader:调用初始化块
//class.getClassLoader()方法调用类加载器
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
System.out.println("----------------------------");
//
// //ReflectDemo01();
//
// ReflectDemo02();//JDK5.0之后就不再会
}
}
2020.9.29.
部分文字来源于:
咕嘟咖啡杨海滨老师 --- 《java编程语言高级特性》
轻量化研习Java相关技术倡导者
“爱码学院”联合创始人自适应教学理念提出者践行者;多年开发及项目管理经历;出版《JavaEE企业级应用与开发》一书;10余年高校项目实践毕设指导经验;企业软培经验丰富。
可以转载我的学习日记但请注明出处,谢谢。