超星网站开发实战答案,深圳设计家官网,直接进网站的浏览器,像wordpress一样的网站吗文章目录 类的加载概述类加载器作用分类获取类加载器的方式 双亲委派机制3种加载器的关系工作机制 类加载器的应用 反射概述关键获取类对象获取构造器对象获取方法对象获取成员变量对象作用 注解概述作用自定义注解格式属性类型 元注解常见的元注解 注解解析概述方法技巧 类的加… 文章目录 类的加载概述类加载器作用分类获取类加载器的方式 双亲委派机制3种加载器的关系工作机制 类加载器的应用 反射概述关键获取类对象获取构造器对象获取方法对象获取成员变量对象作用 注解概述作用自定义注解格式属性类型 元注解常见的元注解 注解解析概述方法技巧 类的加载 概述
当程序运行时会将磁盘中的.class文件加载到内存中并创建Class对象(基于.class文件创建)Class对象存储的是.class文件中的内容(构造方法成员变量成员方法)
构造方法构造器对象Constructor对象成员变量字段对象Field对象成员方法方法对象Method对象
类加载器 作用
是Java运行时环境的一部分负责加载字节码文件即将磁盘上的某个class文件读取到内存并生成Class对象
分类
启动类加载器(Bootstrap ClassLoader)加载核心类库扩展类加载器(Extension ClassLoader)加载扩展类库应用程序类加载器(Application ClassLoader)加载程序员自己定义的类 获取类加载器的方式
public ClassLoader getClassLoader() //返回该类的类加载器启动类加载器的对象为null
双亲委派机制 3种加载器的关系
自定义类加载器的父级加载器为扩展类加载器扩展类加载器的父级类加载器是启动类加载器
加载器的结论这种关系称为类加载器的双亲委派模型
工作机制
某个类加载器收到类加载的请求它首先不会尝试自己去加载这个类而是把请求交给父级类加载器因此所有的类加载的请求最终都会传送到顶层的启动类加载器中如果父级类加载器无法加载这个类如何子级类加载器再去加载
类加载器的应用
加载配置文件并生成字节输入流InputStream getResourceAsStream(“关联配置文件”)结合Properties对象使用注意如果配置文件在src目录下直接输入配置文件的文件名(相对路径相对的是src目录)代码如下
public class Demo2 {public static void main(String[] args) throws IOException {//类对象Class aClass Demo2.class;//根据类对象获取类加载器对象ClassLoader classLoader aClass.getClassLoader();//根据类加载器对象获取输入流InputStream is classLoader.getResourceAsStream(user.properties);//创建Properties类Properties prop new Properties();//prop读取isprop.load(is);//根据prop获取配置文件中的内容String name prop.getProperty(name);System.out.println(name);int age Integer.parseInt(prop.getProperty(age));System.out.println(age);}
} 反射 概述
是运行时获取类的字节码文件对象任何可以解析类中的全部成分
反射是针对Class对象进行操作的是一种类的解剖技术(.class文件中书写有构造方法成员变量成员方法) 反射就可以获取.class文件中的构造方法成员变量成员方法获取到Constructor进行创建对象获取到Field进行赋值取值获取到Method可以调用方法执行
关键
得到编译以后的Class对象
获取类对象
Class cls Class.forName(“类的全限定名”);
类的全限定名com.mysql.jdbc.Driver要使用Driver类导入包com.mysql.jdbc.Driver编写代码Driver driver new Driver(); // 要求Driver类必须存在(如果Driver类不存在,代码报错)Class.forName(“com.mysql.jdbc.Driver”);//不要求Driver类必须存在(不存在也不会报错)
Class cls 类名.class;
当在方法区中创建了.class文件的Class对象后就可以使用
Class cls 对象名.getClass();
在创建具体的对象后就可以通过对象名来获取Class对象
获取构造器对象
通过类对象来获取Constructor获取私有构造器要想进行创建对象在创建对象之前使用暴力破解即可注继承中父类的私有内容是可以继承的但是由于java语言有权限过滤检查所以不允许权限外的内容Class对象总存储的private构造器由于java语言有权限过滤检查所以不允许访问私有构造器而暴力破解可以设置本次访问暂时取消权限检查
获取方法对象
通过类对象获取Method静态方法填null
获取成员变量对象
通过类对象获取Field
作用
在运行时得到一个类的全部成分任何操作可以破坏封装性(很突出)更重要的用途是适合做Java高级框架基本上主流框架都会基于反射设计一些通用技术功能
注解 概述
Annotation对代码的描述作为代码形式表示出来单独使用没有任何意义通常会结合反射技术一起使用
作用
可以书写在类、接口、自定义注解、构造器、成员方法、成员变量、参数被注解标注的内容可以实现一些特殊的作用(具体的作用以实际开发中的需求为准)
自定义注解
就是自己做一个注解来使用
格式
public interface 注解名称 {public 属性类型 属性名() default 默认值;}
属性类型
八种基本数据类型StringClass注解类型枚举类以上类型的一维数组形式
特殊属性
value属性如果只有一个value属性的情况下使用value属性的时候可以省略value名称不写UserService(“userService”)但是如果有多个属性且多个属性没有默认值那么value名称不能省略
元注解
书写在自定义注解上的注解(JDK提供的)
常见的元注解
Target约束自定义注解只能在哪些地方使用Retention声明注解的生命周期 注解解析 概述
注解中的操作中经常需要进行解析注解的解析就是判断是否存在注解存在注解就解析出内容
方法 技巧
判断某个位置上是否存在自定义注解存在对自定义注解进行解析