当前位置: 首页 > news >正文

学校网站建设栏目设置对网站政务建设的建议

学校网站建设栏目设置,对网站政务建设的建议,先做网站还是先域名备案,广西网站建设建议概述 在Java中#xff0c;除了int等基本类型外#xff0c;Java的其他类型全部都是class#xff08;包括interface#xff09;。例如#xff1a; String、Object、Runnable、Exception…… Java反射机制是Java语言的一个重要特性。在学习Java反射机制前#xff0c;需要了…概述 在Java中除了int等基本类型外Java的其他类型全部都是class包括interface。例如 String、Object、Runnable、Exception…… Java反射机制是Java语言的一个重要特性。在学习Java反射机制前需要了解两个概念编译器和运行期。 编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在Java中也就是把Java代码编译成class文件的过程。编译期只是做了一些翻译功能并没有把代码放在内存中运行起来而只是把代码当成了文本进行操作。比如检查语法错误。 运行期是把编译后的文件交给计算机执行直到程序允许结束。所谓运行期就把磁盘中的代码放到内存中执行起来。 Java反射机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意方法和属性这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。简单来说反射机制指的是程序在运行时能过获取自身的信息。在Java中只要给定类的名字就可以通过反射机制来获得类的所有信息。 Java反射机制在服务器程序和中间件程序中得到了广泛运用。在服务器端往往需要根据客户的请求动态调用某一个对象的特定方法或者为属性赋值。例如在主流的ORM中框架的实现中运用Java反射机制可以读取任意一个JavaBean的所有属性或者给这些属性赋值。 Java反射机制主要提供了以下功能这些功能都位于java.lang.reflect包。 在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法生成动态代理 Class类 要想知道一个类的属性和方法必须要获取到该类的字节码文件对象。获取类的信息时使用的就是Class类中的方法。所以先要获取到每一个字节码文件.class对应的Class类型的对象。 class包括interface的本质是数据类型Type。class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时将其加载进内存。每加载一种classJVM就为其创建一个Class类型的实例并关联起来。 注意这里的Class类型是一个名叫Class的class定义如下 // final声明不允许继承 public final class Class{// 私有的构造方法private Class(){} } 以String类为例当JVM加载String类时它首先读取String.class文件到内存然后为String类创建一个Class实例并关联起来 Class cls new Class(String);这个Class实例是JVM内部创建的如果我们查看JDK源码可以发现class类的构造方法private只有JVM能创建Class实例我们自己的Java程序是无法创建Class实例的。 所以JVM持有的每个Class实例都指向一个数据类型class或interface |---------------------------------| | Class Instance | ------- String |---------------------------------| | name java.lang.String | |---------------------------------||---------------------------------| | Class Instance | ------- Random |---------------------------------| | name java.util.Random | |---------------------------------||---------------------------------| | Class Instance | ------- Runnable |---------------------------------| | name java.lang.Runnable | |---------------------------------| 一个Class实例包含了该class的所有完整信息 |---------------------------------| | Class Instance | ------- String |---------------------------------| | name java.lang.String | |---------------------------------| | package java.lang | |---------------------------------| | super java.lang.Object | |---------------------------------| | Interface CharSequence ... | |---------------------------------| | field value[] ,hash,... | |---------------------------------| | method indexOf() ... | |---------------------------------|由于JVM每个加载的class创建了对应的Class实例并在实例中保存了该class的所有信息包括类名、包名、父类、实现的接口、所有方法、字段成员变量等因此如果获取了某个Class实例我们就可以通过这个Clas实例获取到该实例对应的class的所有信息。这种通过Class实例获取class信息的方法称为反射Reflection。 如何获取一个class的Class实例由三个方法 方法一直接通过一个class的静态变量class获取 Class cls String.class; 方法二如果我们有一个实例变量可以通过该实例变量提供的getClass()方法获取 String s Hello; Class cls s.getClass(); 方法三如果知道一个class的完整类名可以通过静态方法Class.forName()获取 Class cls Class.forName(java.lang.String); 因为Class实例在JVM中是唯一的所以上述方法获取的Class实例是同一个实例。可以用比较两个Class实例 Class cls1 String.classString s Hello; Class cls2 s.getClass();boolean sameClass cls1 cls2; // true 反射的目的是为了获得某个实例的信息。因此当我们拿到某个Object实例时我们可以通过反射获取该Object的class信息 void printObjectInfo(Object obj) {Class cls obj.getClass(); } 要从Class实例获取获取的基本信息参考下面的代码 public class Main {public static void main(String[] args) {printClassInfo(.getClass());printClassInfo(Runnable.class);printClassInfo(java.time.Month.class);printClassInfo(String[].class);printClassInfo(int.class);}static void printClassInfo(Class cls) {System.out.println(Class name: cls.getName());System.out.println(Simple name: cls.getSimpleName());if (cls.getPackage() ! null) {System.out.println(Package name: cls.getPackage().getName());}System.out.println(is interface: cls.isInterface());System.out.println(is enum: cls.isEnum());System.out.println(is array: cls.isArray());System.out.println(is primitive: cls.isPrimitive());} } 注意数组例如String[]也是一种类而且不同于String.class它的类名是java.lang.String。此外JVM为每一种基本类型如int也创建了Class实例通过int.class访问。 如果获取到了一个Class实例我们就可以通过该Class实例来创建对应类型的实例 // 获取String的Class实例: Class cls String.class;// 创建一个String实例: String s (String) cls.newInstance(); 上述代码相当于new String()。通过Class.newInstance()可以创建类实例它的局限是只能调用public的无参数构造方法。带参数的构造方法或者非public的构造方法都无法通过Class.newInstance()被调用。 Class常用方法 包路径 getPackage() Package 对象 获取该类的存放路径 类名称 getName() String 对象 获取该类的名称 继承类 getSuperclass() Class 对象 获取该类继承的类 实现接口 getlnterfaces() Class 型数组 获取该类实现的所有接口 构造方法 getConstructors() Constructor 型数组 获取所有权限为 public 的构造方法 getDeclaredContruectors() Constructor 对象 获取当前对象的所有构造方法 方法 getMethods() Methods 型数组 获取所有权限为 public 的方法 getDeclaredMethods() Methods 对象 获取当前对象的所有方法 成员变量 getFields() Field 型数组 获取所有权限为 public 的成员变量 getDeclareFileds() Field 对象 获取当前对象的所有成员变量 动态加载机制 JVM在执行Java程序的时候并不是一次性把所有用到的class全部加载到内存而是第一次需要用到class时才加载。例如 public class Main {static {System.out.println(Main被加载);}public static void main(String[] args) {int rand new Random().nextInt(10);if (rand 5) {create(rand);}}static void create(int no) {Person p new Person(no);} }class Person{static {System.out.println(Person类被加载);}public Person(int no) {System.out.println(Person类的有参构造方法);} } 当执行Main.java时由于用到了Main因此JVM首先会把Main.class加载到内存。然而并不会加载Person.class除非程序执行到create()方法JVM发现需要加载Person类时才会首次加载Person.class。如果没有执行create()方法那么Person.class根本就不会被加载。 动态加载class的特性对于Java程序非常重要。利用JVM动态加载class的特性我们才能在运行期根据条件加载不同的实现类。 小结 JVM为每个加载的class及interface创建了对应的Class实例来保存class及interface的所有信息获取一个class对应的Class实例后就可以获取该class的所有信息通过Class实例获取class信息的方法称为反射ReflectionJVM总是动态加载class可以在运行期根据条件来控制加载class
http://www.w-s-a.com/news/41704/

相关文章:

  • 网站建设岗位所需技能泊头网站优化
  • 企业网站建设是什么网络营销岗位介绍
  • 网站做cdn怎么弄昆明网站seo报价
  • 拖拽网站如何建立微网站
  • 网站网站做代理微信群卖房卡南宁建站模板大全
  • 网络公司怎么优化网站百度快速排名技术培训教程
  • 建e室内设计网 周婷站长工具seo综合查询源码
  • 塔式服务器主机建网站定制美瞳网站建设
  • 网站是先解析后备案吗永久免费网站模板
  • wordpress站点演示php根据ip 跳转网站
  • 东莞市凤岗建设局网站网站开发有哪些职位
  • 企业网站手机版模板免费下载辣条网站建设书
  • 南昌网站建设维护vc 做网站源码
  • 网站动态logo怎么做织梦移动端网站怎么做
  • 三亚城乡建设局网站app下载安装官方网站
  • 公司被其它人拿来做网站郑州哪家做网站最好
  • 山东省建设厅官方网站抖音代运营业务介绍
  • 网站制作 牛商网wordpress商城 微信支付
  • 平面设计培训网站建文帝网站建设
  • python网站建设佛山乐从网站建设
  • 网站 免费 托管运营app软件大全
  • 爱网站找不到了网站设计制作要交印花税
  • 分销平台是什么意思网站如何从行为数据进行优化
  • 做网站公司职务做民俗酒店到哪些网站推荐
  • 从0到建网站wordpress导航主题模板下载地址
  • 以3d全景做的网站统计网站的代码
  • 北辰网站建设WordPress换主题文件夹
  • 做网站的合同范文百度分析工具
  • 深圳企业网站制作公司单位注册wordpress发送邮件
  • 兰州专业网站建设团队wordpress 拉取点击数