反射基础一
来源:互联网 发布:大学生网络课程答案 编辑:程序博客网 时间:2024/05/19 18:00
一.Class对象
反射:动态编译、可以更好的发挥java的灵活性以及更好的运用java的多态Class类型:任何一个java程序编译后都会形成一个class类型的文件这个class文件就是把java代码进行编译后能够被计算机所认识的字节码。这个class文件有一个与之对象对应的java类型,Class类型Class类型中可以包括当前的class文件中属性、方法、构造方法等。
Class类型又称为模板类:获取任意的的Class类型的对象有四种方式Class是类的类,它的一个实例,就是一个类对像,记录这个类的信息(包括有哪些属性 和方法)
(1).得到Class对象
String s = new String("abc");
得到String类的类对象,这个Class类同样是继承Object类,这个类对象包含着String类的信息(有哪些属性,哪些方法等信息)
- 使用对象.getClass()得到类对象
Class c1 = s.getClass();
- 使用类名.class得到类对象
Class c2 = String.class;
- 通过字符串得到类对象
Class c3 = Class.forName("java.lang.String");
区别:
Class A{ 当类在加载时会自动调用static静态块的代码 static{ System.out.println("A");} }
- 延时加载(不会打印静态块的代码)
加载类,但是没有马上加载,只有当new出这个类的对象时才会加载
Class c1 = A.class;c1.newInstance();
- 即时加载(会马上打印静态块的代码)
Class c2 = Class.forName("com.accp.test.A");
(2).得到一个类所有的父类
Class c = ArrayList.class;while(c!=null){ System.out.println(c.getName()); c = c.getSuperclass();}
(3).基础类和包装类
得到基础类和包装类
Class c1 = Integer.class; //c1.getName()-----java.lang.Integer
Class c2 = int.class; //c2.getName()-----int
在jdk1.5版本之后
Class c3 = Integer.TYPE; //c3.getName()-----int
二.类加载器
Classloader 类加载器,用来加载Java类到 Java 虚拟机中的一种加载器。
与普通程序不同的是。Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。
想了解更多关于Classloader相关概念请读者移步:http://baike.baidu.com/item/classloader
引用块内容
- 得到系统的类加载器(注意也是延时加载)
ClassLoader loader = ClassLoader.getSystemClassLoader();Class c = loader.loadClass("com.accp.test.A");System.out.println(c.getName());
- 拿出所有的加载器
public static void main(String[] args){ //系统加载器 ClassLoader cl = ClassLoader.getSystemClassLoader(); loader(cl);}public static void loader(ClassLoader cl){ if(cl!=null){ System.out.println(cl.getClass().getName()); //得到父类加载器 cl = cl.getParent(); loader(cl); }}
类加载器是从classpath路径中加载类
例子:在d: 写一个A类,在main方法中调用在f盘的B类的一个方法,然后编译完成以后,在c盘使用java 命令运行 classpath=”.;d:\;e:\”这里的意思就是先到当前的路径找class文件,如果没找到,然后到d:\下面找,如果还没找到e:\找
三.加载器的分类以及加载分类
写一个A类,打印”A—-A”.然后将A类打包,放到jdk的安装目录下面jdk1.5.0_05\jre\lib\ext的文件夹下,然后改写A.java,重新编译打印的还是原来的A类的内容
四.网络加载类
默认的加载器只能从本地加载
使用urlClassLoader加载器(自己定义的加载器也叫远程加载)
i.首先,把类打成压缩包放到一个web项目中
ii.然后,把当前项目中该类的class文件删除
iii.最后,在当前项目的main方法中写到
- 网络加载
记得把jdk1.5.0_05\jre\lib\ext下面的包删掉
URL url = new URL("http://localhost:8888/test/lib/a.jar");URL[] urls = new URL[]{url};ClassLoader loader = new URLClassLoader(urls);Class c = loader.loadClass("A");c.newInstance();
- java反射(一):反射基础
- 反射基础一
- 反射基础(一)
- servlet07-反射基础一
- Java反射(一)----基础介绍
- JAVA基础之反射基础篇一
- Java基础之反射(一):反射入门
- Java反射基础 入门(一)
- java基础巩固之反射(一)
- Java反射基础(一)--Class对象获取
- 【框架基础】:Java反射机制详解(一)
- 【框架基础】:Java反射机制详解(一)
- Java基础之反射(一)
- 反射基础
- 反射基础
- 反射基础
- 反射基础
- 反射基础
- 【Oracle数据库】限制数据和对数据排序
- tar命令的详细解释
- position absolute relative
- 打包命令行输出IPA文件
- python--继承
- 反射基础一
- MYSQL-基础—存储过程
- PAT甲级1018
- Dictionary数据类型在Darwin视频服务器中的使用
- JS之SELECT的VALUE作为BUTTON提交的参数
- Swift之 ? 和 !的差异
- 阿里巴巴Java开发手册个人整理精简版(二)
- JavaSE_10th_super()构造方法
- 回顾2016,展望2017,给自己定个小目标