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

无忧网站建设福州鼓楼区建设局网站

无忧网站建设,福州鼓楼区建设局网站,绍兴网站建设费用,哪些网站才能具备完整的八项网络营销功能目录 注解 什么是注解#xff1f; 自定义注解 元注解 反射 什么是反射 静态语言和动态语言 动态语言 静态语言 对比 Class类 Java内存分析 类加载过程 类加载器 获取运行时类的完整结构 通过Class对象实例化对象 1.调用Class对象的newInstance 2.Constructor…目录 注解 什么是注解 自定义注解 元注解 反射 什么是反射 静态语言和动态语言 动态语言 静态语言 对比 Class类 Java内存分析 类加载过程 类加载器 获取运行时类的完整结构 通过Class对象实例化对象 1.调用Class对象的newInstance 2.Constructor类的newInstance 调用对象的方法和属性  调用指定的方法 调用指定的属性 反射操纵注解 注解 什么是注解 Annotation是从JDK1.5开始引入的技术Annotation的作用 不是程序本身可以对程序做出解释。和注释差不多可以被其他程序读取Annotation的格式 注解是以“参数名”在代码中存在的还可以添加一些参数值比如元注解SuppressWarnings(valueunchecked).Annotation在哪里使用 可以附加在package、class、method、field等上面相当于给他们添加了额外的辅助信息我们可以同反射机制来实现对这些元数据的访问 自定义注解 使用 interface 自定义注解时自动继承了java.lang.annotation.Annotation 接口。分析 interface 用来声明一个注解格式public interface 注解名 { 方法名()... }其中每一个方法实际上是一个配置参数方法名称就是参数名称返回值类型就是参数类型可以通过default来声明参数的默认值如果只有一个参数成员一般参数名用value注解必须要有值我们定义注解时经常使用空字符串、0作为默认值 元注解 元注解的作用就是负责注解其他注解Java定义了4个标准的 meta-annotation类型它们被用来提供对其他annotation类型作说明这些类型和它们所支持的类在 java.lang.annotation中可以找到Target、#Documented、Inherrited、Retention Target用于描述注解的使用范围即注解可以标注在什么地方类上面或者方法、属性等Retention表示在什么级别保存该注释信息用于描述注解的声明周期 SOURCE源码阶段-就是写代码的时候] CLASS 表示注解将在编译时被保留并且会被包含在类文件中但在运行时不可用。但这意味着当程序运行时无法访问该注解。RUNTINUE 程序运行时可以访问该注解通过反射。Documented说明该注解将被包含在javadoc中。javadoc是Java语言中自带的一种工具用于生成API文档。Inherited说明子类可以继承父类的注解 反射 什么是反射 Java中的反射是指程序在运行时动态地获取类的信息以及操作类的成员变量、方法和构造方法的能力。通过反射可以在运行时检查类的属性和方法获取类的构造函数并实例化对象调用类的成员变量和方法甚至可以在运行时动态地生成新的类这使得Java程序具有更大的灵活性和动态性。但是反射机制也会导致一些性能上的问题因为反射调用的速度通常比直接调用要慢得多。 Java中的反射主要API Class类用于表示Java类的信息包括类的名称、父类、接口、构造函数、成员变量和方法等。Constructor类用于表示Java类的构造函数信息。Method类用于表示Java类的方法信息。Field类代表类的成员变量反射机制的核心是在运行时动态地获取类的信息并通过这些信息来调用类的成员变量和方法这种能力使得Java程序可以在运行时动态地加载和执行代码从而实现更加灵活和动态的功能。 静态语言和动态语言 动态语言 动态语言是指在运行时进行类型检查的语言。在编写程序时不需要明确指定变量的数据类型变量的类型会在运行时根据赋值的内容自动推断。因此动态语言往往比静态语言更灵活更容易编写和修改。常见的动态语言包括Python、JavaScript和Ruby等。 静态语言 静态语言是指在编译时进行类型检查的语言。在编写程序时需要明确指定变量的数据类型并在编译时检查所有变量和表达式的类型是否匹配。如果存在类型不匹配的情况编译器会报错并终止编译。Java、C和C#等语言都是静态语言。 对比 总之静态语言在编写时需要明确指定类型编译时会进行类型检查更加严格和安全但也更加繁琐动态语言在编写时不需要指定类型运行时会自动推断类型更加灵活和易用但也更加容易出错。 Class类 在Java中Class类是代表类的实体它是Java反射机制的核心用于获取类的信息、创建对象和调用方法等。Class类提供了以下常用的方法 getName()获取类的完整名称newInstance()创建类的实例等同于使用new关键字构造对象getConstructors()获取类的所有公共构造器getMethods()获取类的所有公共方法包括继承的方法getDeclaredFields()获取类的所有成员变量不包括继承的变量getDeclaredMethods()获取类的所有方法不包括继承的方法getSuperclass()获取类的父类isAssignableFrom(Class c)判断当前类是否可以赋值给参数类cisInstance(Object obj)判断当前对象是否为指定类的实例isArray()判断当前类是否为数组类型。Class类的一个重要应用是Java反射机制。通过Class类获取类的信息可以实现在运行时动态创建对象、调用方法和访问成员变量等功能增加了程序的灵活性和动态性。同时反射机制也带来了一定的性能开销因此应该慎重使用。 无论一个.java文件中有多少个类最终都只有一个Class对象。 Java内存分析 在Java应用程序中内存主要分为三个区域堆、栈和方法区。 堆Heap用于存储对象实例堆是Java中最大的内存分配区域。堆内存的大小可以通过-Xmx和-Xms参数来指定-Xmx表示最大堆内存-Xms表示初始堆内存。栈Stack用于存储方法调用的信息每个线程都有自己的栈空间。栈内存的大小是固定的并且在线程创建时分配。栈中存储着局部变量、方法参数、方法返回值和方法调用的状态等信息。方法区Method Area用于存储类的信息、静态变量、常量等数据。方法区属于堆的一部分但是它的作用和用途与堆不同。 类加载过程 Java的类加载过程分为三个步骤加载、链接和初始化。其中加载和链接是在程序运行时进行的而初始化在类被首次使用时进行。 加载将类的字节码文件加载到内存中并在内存中创建一个Class对象用于表示该类的信息。ClassLoader负责查找和加载类的字节码文件将字节码文件读入内存并创建Class对象并将其保存在方法区中。链接在链接阶段虚拟机会对类进行验证、准备和解析。验证验证字节码文件的正确性包括验证文件格式、元数据、字节码和符号引用等是否符合规范。准备为类的静态变量分配内存并设置默认初始值例如int类型的默认值为0对象类型的默认值为null。这些内存都在方法区中进行分配。解析将符号引用解析为直接引用例如将方法调用的符号引用解析为实际的方法地址。初始化在类被首次使用时进行虚拟机会执行类的初始化操作包括执行类的静态代码块和静态变量的初始化。执行静态代码块静态代码块是在类被初始化时执行的它可以用来进行一些静态资源的初始化工作。静态变量初始化静态变量的初始化也是在类被初始化时进行的它可以通过赋初值或静态代码块来进行初始化。类的加载过程是Java虚拟机实现动态性的重要基础也是Java的重要特性之一。通过自定义ClassLoader可以实现类的动态加载和替换这为Java应用程序带来了更大的灵活性和动态性。 类加载器 获取运行时类的完整结构 通过Java反射可以获取类的运行时完整结构包括类的构造器、方法、字段、注解和泛型等信息具体步骤如下 获取Class对象使用 lass.forName() 方法或者类名.class 获取需要反射的类的Class对象。获取构造器使用 getConstructors() 方法获取类的所有公共构造器使用getDeclaredConstructors() 方法获取类的所有构造器包括私有构造器。获取方法使用 getMethods() 方法获取类的所有公共方法使用 getDeclaredMethods() 方法获取类的所有方法包括私有方法。获取字段使用 getFields() 方法获取类的所有公共字段使用 getDeclaredFields() 方法获取类的所有字段包括私有字段。获取注解使用 getAnnotations() 方法获取类的所有注解使用 getDeclaredAnnotations()方法获取类的所有注解包括私有注解。获取泛型使用 getGenericSuperclass() 方法获取类的带有泛型的父类使用getGenericInterfaces() 方法获取实现的所有接口包括带有泛型的接口。通过反射获取类的运行时完整结构可以实现动态调用、动态代理和动态生成代码等功能但是反射的性能较低应该尽量避免在性能要求高的场景中使用。 通过Class对象实例化对象 1.调用Class对象的newInstance 使用newInstance()方法创建类的实例该方法会调用类的默认构造器来创建对象。 需要注意的是newInstance()方法只能调用类的默认构造器来创建对象如果类没有默认构造器或者默认构造器不可访问则会抛出InstantiationException异常。如果需要调用其他构造器来创建对象则需要使用Constructor类的newInstance()方法。 2.Constructor类的newInstance Class? c1 Class.forName(com.reflection.test.User); //用含参的构造器创建对象Constructor? constructor c1.getDeclaredConstructor(String.class, int.class, int.class);User user1 (User)constructor.newInstance(张三, 1, 20); 调用对象的方法和属性  调用指定的方法 通过反射调用类中的方法通过Method类完成。 通过Class对象的 getMethod() 或者 getDeclaredMethod() 方法来获得一个Method对象并设置此方法操作时需要的参数类型。 然后使用 invoke 进行调用 Class? c1 Class.forName(com.refelection.test.User);//获得Class类对象 User user (User) c1.newInstance();//初始化对象Method setName c1.getDeclaredMethod(setName, String.class); setName.invoke(user,张三); //调用user的setName方法将user对象的name属性设置为张三 如果方法为private需要关闭安全检测setAccessible(true) setName.setAccessible(true); 调用指定的属性 //获得属性 Field name c1.getDeclaredField(name); name.set(name,张三);//设置属性 同样如果属性为private需要关闭安全检测setAccessible(true) name.setAccessible(true);//关闭权限检测 反射操纵注解 在Java中通过反射可以操作注解具体步骤如下 获取注解信息使用Class、Method、Field等类的getAnnotation()方法获取注解信息例如使用getAnnotation()方法获取类、方法或属性上的注解信息使用getAnnotations()方法获取类、方法或属性上的所有注解信息。解析注解信息使用Annotation类的相关方法解析注解信息例如使用annotationType()方法获取注解的类型使用value()方法获取注解的属性值等。 import java.lang.annotation.*; import java.lang.reflect.Field;/*** 反射操作注解*/ public class Test12 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {//获得Class对象Class? c1 Class.forName(reflection.Student2);//通过反射获得注解Annotation[] annotations c1.getAnnotations();for (Annotation annotation : annotations) {System.out.println(annotation);//reflection.TableInfo(valuedb_student)}//获得注解的 value 的值TableInfo tableInfo c1.getAnnotation(TableInfo.class);String value tableInfo.value();System.out.println(value);//db_student//获得类指定的注解Field f c1.getDeclaredField(name);FieldInfo fieldInfo f.getAnnotation(FieldInfo.class);System.out.println(fieldInfo.columnName());//db_nameSystem.out.println(fieldInfo.type());//varcharSystem.out.println(fieldInfo.length());//10} }TableInfo(db_student) class Student2{FieldInfo(columnName db_id,type int,length 10)private int id;FieldInfo(columnName db_age,type int,length 10)private int age;FieldInfo(columnName db_name,type varchar,length 10)private String name;public Student2(){}public Student2(int id, int age, String name) {this.id id;this.age age;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return Student2{ id id , age age , name name \ };} }//类名的注解 Target(ElementType.TYPE)//作用范围 类 Retention(RetentionPolicy.RUNTIME)//作用的生命周期 运行时 interface TableInfo{String value(); }//属性的注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) interface FieldInfo{String columnName();String type();int length(); }
http://www.hkea.cn/news/14305520/

相关文章:

  • 公司网站怎么做才高大上大企业网站样式
  • 网站内页产品 首页推荐网站的要素是什么意思
  • 秦皇岛网站制作专家教你简单建站科技袁人袁岚峰
  • 网站视频播放代码网站的会员认证怎么做
  • 网站开发培训机构哪个好杭州高端网站建设
  • 做网站要坚持qq空间网站根目录
  • 黄冈网站建设费用北京模板开发建站
  • 网站建设佰金手指科杰二八建设区块链网站
  • 怎么建设视频网站大连网站怎么推广
  • 网站的域名起什么好处刚做的婚恋网站怎么推广
  • 自己做网站需要钱吗初学者想学网站建设
  • 常州微信网站建设市场公司网站维护建设费入什么科目
  • 网站建设方案实例广告公司名字
  • 通州区建设局网站温州网络问政平台官网
  • 微软的网站开发软件做淘宝优惠卷网站步骤
  • 自己免费怎么制作网站吗腾讯企业邮箱怎么开通注册
  • 网站开发的运行可行性网站导航栏固定
  • 公司网站开发费入什么科目h5模板素材
  • 外汇跟单网站建设新的seo网站优化排名 排名
  • 企业家居网站建设宣城市市政建设集团公司网站
  • 营口网站建设单位seo如何使用wordpress优化
  • 如何选择低价网站建设昆明传媒网站建设
  • 无锡崇安网站建设天津网页制作设计营销
  • 无忧建站网站建设和美工
  • 备案 个人网站名称万网网站开发
  • 花店网站建设目的线上推广专员是干嘛的
  • 网站模板 红色id如何打开wordpress
  • 网站如何开通微信支付接口南京软件开发公司有哪些
  • 酷炫 网站模板网站上做公司宣传
  • 销售一个产品的网站怎么做无锡百度