1Java类加载机制和反射零散知识点

什么叫反射?Java程序可以动态地获取某个对象、某个类的运行时信息,并可以动态地创建Java对象,动态地调用Java方法,访问并修改指定对象的成员变量值。


JVM和类?开启一个程序,就启动了一个JVM进程,不同的JVM进程之间是不能共享资源。


类初始化:加载、连接、初始化三个步骤来对该类进行初始化三个步骤来对该类进行初始化。

           类的加载:将类的class文件读入内存。

           类的连接:把类的二进制数据合并到JRE中

           类的初始化:1 声明类变量时指定初始值 2 使用静态初始化块为类变量指定初始值。


类加载器:类的唯一标识:全限定类名(包括包名和类名)


Java运行时会出现两种类型:编译时类型和运行时类型。

Person  p=new Student();
在这种情况下,p变量在编译的时候是Person类型,在运行时是Student类型,如果需要解决这种做法

1 在编译时和运行时发现对象类型和类的真实信息

2 无法知道真实信息,程序只能依靠运行时信息来发现该对象和类的真实信息,此时需要用到反射知识。


如果想获得Class对象的信息:总共有三种方法

1 Class.forName("包名+类名")

package Collection;



public class ArgsTest {

	//public static void main
	// public :main程序需要被JVM调用,需要被JVM自由调用这个main()方法,所以使用public 修饰符把这个方法暴露出来
	//static: 调用主方法的时候 ,JVM不可能先创建该主类的对象,然后通过该对象来调用该主方法,JVM直接通过该类来调用主方法
	//void:返回值,因为主方法被JVM调用,该方法返回值给JVM,此处没有任何意义
	public static void main(String[] args) throws ClassNotFoundException {
	
		System.out.println(args.length);
		for(String s: args)
		{
			System.out.println(s);
		}
		System.out.println(Class.forName("Collection.ArrayExpression"));
		System.out.println(Class.forName("Collection.Ast"));

		/*
		 * 0
           class Collection.ArrayExpression
           interface Collection.Ast
		 */
		
	}

	
}
找不到该就会抛出ClassNotFoundException。

2 调用对象的getClass()方法

	public static void main(String[] args) throws ClassNotFoundException {
	
	
		String  s1="dsfafdsa";
		System.out.println(s1.getClass());
3 调用调用某个类的.class属性

public static void main(String[] args) throws ClassNotFoundException {
	
	
		String  s1="dsfafdsa";
		System.out.println(ArrayListTest.class);








 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值