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

保定网站建设报价百度seo收录

保定网站建设报价,百度seo收录,阿里云服务器做电影网站吗,网站建设主题怎么定文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射#xff08;reflection#xff09;机制是指在程序的运行状态中 可以构造任意一个类… 文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射reflection机制是指在程序的运行状态中 可以构造任意一个类的对象可以了解任意一个对象所属的类可以了解任意一个类的成员变量和方法可以调用任意一个对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制核心得到编译以后得class文件对象提供了一个Class类型就是编译后的class类对象 HelloWorld.java - javac - HelloWorld.classClass clz HelloWorld.class分类 类字节码 Class 本身也是一个类是Java反射的源头 构造器 Constructor 成员变量 Field 方法 Method 2.反射-获取类对象方式 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException {//1.类名.class 获取ClassUser userClass1 User.class;System.out.println(userClass1);//2.对象获取User user new User();Class? extends User userClass2 user.getClass();System.out.println(userClass2);//3.全限定名称获取Class.forNameClass? userClass3 Class.forName(com.lixiang.reflex.User);System.out.println(userClass3);//4.通过classLoader类加载器ClassLoader classLoader ReflexTest.class.getClassLoader();Class? userClass4 classLoader.loadClass(com.lixiang.reflex.User);System.out.println(userClass4);}}public class User {private String name;private int age;}反射API比较多宏观分类 get要获取的东西例如获取属性为getField()、获取方法为getMethod() 只能获取公有的东西注意getMethod可以获取到本类及其父类的方法 getDeclared要获取的东西例如获取属性为getDeclaredField()、获取方法为geDeclaredtMethod() 可以获取全部的东西注意getDeclaredMethod只能获取到本类的方法 3.反射-获取声明构造器 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//1.类名.class 获取ClassUser userClass User.class;Constructor?[] declaredConstructors userClass.getDeclaredConstructors();//获取本类的全部构造方法for (Constructor? declaredConstructor : declaredConstructors) {System.out.println(declaredConstructor.getName() declaredConstructor.getParameterCount());}System.out.println(--------------------);//获取String类型的高燥方法ConstructorUser declaredConstructor userClass.getDeclaredConstructor(String.class);System.out.println(declaredConstructor.getName() declaredConstructor.getParameterCount());} }4.反射-对象创建实战 JDK9后用构造器创建对象class.getDeclaredConstructor( ).newInstance( ) 日常开发定义的POJO类里面开发规范都推荐显示的写出空构造函数一是方便通过反射创建对象 二是子类继承父类时默认调用super( ) 保证父类有空构造函数 方法名说明T newInstance( )根据类的空参的构造器创建对象类必须提供空参的构造器和public权限T newInstance(Object...initargs)根据指定的构造方法创建对象反射创建对象有多种方式常用步骤如下 根据全类名获取对应的Class对象 调用指定参数结构的构造器生成Constructor的实例 通过Constructor的实例创建对应类的对象并初始化类属性 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//1.类名.class 获取ClassUser userClass User.class;//创建无参User对象ConstructorUser userConstructor1 userClass.getDeclaredConstructor();User user userConstructor1.newInstance();System.out.println(user);System.out.println(-----------------------);//创建一个参数的对象ConstructorUser userConstructor2 userClass.getDeclaredConstructor(String.class);User user1 userConstructor2.newInstance(李祥);System.out.println(user1);}}5.反射-方法和属性实战 通过class获取方法 方法说明getMethods()获取当前运行类和 父类中声明的方法需要是public访问权限的方法getDeclaredMethods()获取当前运行时类中声明的全部方法不包含父类中声明的方法 方法method的方法 方法说明getReturnType()获取全部的返回值getParameterTypes()获取全部的参数getModifiers()获取修饰符getExceptionTypes()获取异常信息 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//获取类对象ClassUser clazz User.class;//获取当前运行类和 父类中声明的方法需要是public访问权限的方法Method[] methods clazz.getMethods();for(Method method:methods){System.out.println(修饰符method.getModifiers(),返回值method.getReturnType().getName(),整体method);}System.out.println(——————————————————);//返回当前类中所有的方法无视修饰符Method[] declaredMethods clazz.getDeclaredMethods();for(Method method:declaredMethods){System.out.println(修饰符method.getModifiers(),返回值method.getReturnType().getName(),整体method);}}}通过class对象获取属性 方法名说明getFields( )获取当前运行类和 父类中声明的属性需要是public访问权限的属性getDeclaredFields( )获取当前运行时类中声明的全部属性不包含父类中声明的属性 属性Field的方法 方法说明getModifiers()整数形式返回此Field的修饰符整数对应在 java.lang.reflect.Modifier里面getType()返回 Field的属性类型getName()返回 Field的名称 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//获取类对象ClassUser clazz User.class;//都是private则获取不了 属性改为public才行Field[] fields clazz.getFields();for(Field field:fields){System.out.println(属性名field.getName(),属性类型field.getType().getName()属性修饰符field.getModifiers());}System.out.println(——————————————————);// 获取当前运行时类中声明的全部属性不包含父类中声明的属性Field[] declaredFields clazz.getDeclaredFields();for(Field field:declaredFields){System.out.println(属性名field.getName(),属性类型field.getType().getName()属性修饰符field.getModifiers());}}}6.反射-属性值操作实战 对反射进行相关操作但如果构造器、方法、属性 没权限怎么操作可以通过 setAccessible(true) 修改访问权限Method和Field、Constructor对象都有setAccessible()方法 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//获取类对象ClassUser clazz User.class;//获取public空构造函数并创建对象把构造函数private私有化ConstructorUser declaredConstructor clazz.getDeclaredConstructor();//修改访问权限true表示暴力反射攻破权限declaredConstructor.setAccessible(true);User user declaredConstructor.newInstance();user.setAge(11);user.setName(李祥);System.out.println(user);} }Field相关方法 方法说明get(Object obj)获取取指定对象obj上此Field的属性内容set(Object obj,Object value)设置指定对象obj上此Field的属性内容public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {Class clazz User.class;//创建运行时类的对象//获取类对象//获取public空构造函数并创建对象ConstructorUser declaredConstructor clazz.getDeclaredConstructor();//修改访问权限true表示保留反射declaredConstructor.setAccessible(true);//创建对象User user declaredConstructor.newInstance();System.out.println(user.toString());//获取运行时类中指定变量名的属性Field name clazz.getDeclaredField(name);//保证当前属性是可访问的name.setAccessible(true);//设置指定对象的的属性值name.set(user,李祥);//打印对象的name属性值System.out.println(name.get(user));System.out.println(user.toString());} }7.反射-invoke运行类方法 运行类的指定方法步骤 获取class对象创建对象获取方法invoke调用 什么是invoke调用 Object invoke(Object obj, Object … args) invoke的中文意思是【调用、召唤】用来调用某个类中的方法的但是它不是通过当前类直接去调用而是通过反射的机制去调用 参数说明obj是调用类的实例对象 args:调用方的方法参数是可变长度的Object 对应原方法的返回值若原方法无返回值此时返回null如果原方法为静态方法此时形参 obj可为null如果原方法形参列表为空则args为null如果原方法声明为private,则需要在调用此invoke()方法前调用对象的setAccessible(true)方法 编码实战User类中加入这三个方法 public class ReflexTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {//获取类对象ClassUser clazz User.class;//获取public空构造函数并创建对象ConstructorUser declaredConstructor clazz.getDeclaredConstructor();//确保有访问权限true表示暴力反射declaredConstructor.setAccessible(true);User user declaredConstructor.newInstance();user.setName(李祥);System.out.println(—————————调用普通方法———————————);//获取指定的某个方法, 参数1,指明获取的方法的名称 参数2,指明获取的方法的形参列表Method say clazz.getDeclaredMethod(say, String.class);//保证当前方法是可访问的say.setAccessible(true);//invoke调用参数1 方法的调用者 参数2 给方法形参赋值的实参// 返回值 是 对应类中调用的方法的返回值。Object returnValue say.invoke(user, 李祥);System.out.println(returnValue);System.out.println(—————————调用静态方法———————————);//获取指定的某个方法, 参数1,指明获取的方法的名称 参数2,指明获取的方法的形参列表Method sleepMethod clazz.getDeclaredMethod(sleep,String.class);//保证可以访问sleepMethod.setAccessible(true);//调用静态方法不需要获取类对象。Object returnValue2 sleepMethod.invoke(null,李祥);//如果调用的运行时类中的方法没有返回值则此invoke()返回nullSystem.out.println(returnValue2);} }
http://www.hkea.cn/news/14537969/

相关文章:

  • 程序员帮忙做放贷网站老域名对做网站的
  • 想自己做个公司网站不知道怎么做电子邮箱怎么注册
  • 网站开发 演讲一般找素材都是做哪几个网站呢
  • 建设网站之前都需要准备什么东西长春关键词优化平台
  • 河北省邢台市建设工程网站wordpress跳转到外部链接
  • 什么叫建网站优秀企业网站建设公司
  • 根据百度地图做网站网站这么设置微信支付宝
  • app下载平台服务网站优化快照
  • 如何建购物网站网上做问卷报酬不错的网站是
  • 郑州网站建设模板网站备案提示
  • 网站跳转怎么做重庆在线app
  • 网站主页流动图片怎么做怎么做百度快照让网站排前面
  • 网站 动态内容加速wordpress 更改目录
  • 建设工程质量管理条例网站网站的开发环境怎么写
  • 网站开发工资一般多少钱怎么做网站文件
  • 可以做设计的网站一键开发小程序
  • 网站程可以自己做吗外包网站有哪些
  • 做网站的公司cnfg网站建设和网页设计视频教程
  • 在中国做网站网站违法吗钙网logo设计免费
  • 聊城住房建设局网站ppt在线浏览网站源码
  • 市场调查 网站建设外链在线发布工具
  • 微信公众号的微网站怎么做ps如何做网站专题
  • 网站建设明确细节彩票网站怎么做推广
  • 上海网站建设心得企点邮箱登录入口
  • 南京学做网站查看邮箱注册了哪些网站
  • 网站建设中需要注意的问题深圳网站建设toolcat
  • 免费做淘宝店铺招牌的网站做网站类网站费用
  • 做团购网站需要什么资质如何建立企业网站
  • 上海网站建设学校软装设计公司名字
  • 中山网站建设思网络营销策划活动方案