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

学做ps的网站有哪些百度服务

学做ps的网站有哪些,百度服务,亿达城市建设官方网站,营销网站建设评估及分析一、理论说明 1. 反射的定义 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Jav…

一、理论说明

1. 反射的定义

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。反射机制允许程序在运行时通过 API 检查和操作类、方法、字段等,提供了极大的灵活性,但也伴随着一定的性能开销。

2. 反射与普通编程的区别

  • 编译时 vs 运行时
    • 普通编程方式在编译时就需要确定要使用的类、方法和字段,代码在编译时就已经绑定到具体的类和方法。
    • 反射机制是在运行时动态获取类的信息并调用方法,程序在运行时可以根据需要加载和使用类,无需在编译时确定。
  • 灵活性与性能
    • 反射机制提供了极高的灵活性,可以在运行时动态创建对象、调用方法、访问和修改字段,适用于框架开发、工具类实现等场景。
    • 但反射的性能相对较低,因为它涉及到动态解析类和方法,比直接调用方法的开销要大得多。普通编程方式在编译时已经确定了调用关系,执行效率更高。
  • 代码可读性与安全性
    • 反射代码通常比较复杂,可读性较差,因为它涉及到大量的字符串操作和类型转换,增加了代码的理解难度。
    • 反射可以访问和修改对象的私有成员,这可能会破坏类的封装性,降低代码的安全性。普通编程方式通过访问控制符(如privateprotected)可以更好地保证类的封装性。

二、常用类与方法

1. Class

Class类是反射机制的核心,它代表一个类或接口。获取Class对象的三种主要方式:

  • Class.forName("全类名"):通过类的全限定名获取,适用于在编译时不知道类名的情况。例如:
    Class<?> clazz = Class.forName("java.util.ArrayList");

  • 类名.class:通过类名直接获取,适用于在编译时已经知道类名的情况。例如:
    Class<String> clazz = String.class;

  • 对象.getClass():通过对象实例获取,适用于已经有对象实例的情况。例如:
    String str = "hello";
    Class<? extends String> clazz = str.getClass();

    2. 获取构造方法

    通过Class对象可以获取类的构造方法,主要方法有:

  • getConstructors():获取所有public构造方法。
  • getDeclaredConstructors():获取所有构造方法(包括私有、受保护的)。
  • getConstructor(Class<?>... parameterTypes):获取指定参数类型的public构造方法。
  • getDeclaredConstructor(Class<?>... parameterTypes):获取指定参数类型的构造方法(包括私有、受保护的)。
    例如:
    import java.lang.reflect.Constructor;public class Main {public static void main(String[] args) throws Exception {Class<?> clazz = Class.forName("java.util.ArrayList");Constructor<?> constructor = clazz.getConstructor();Object obj = constructor.newInstance();}
    }

    3. 获取方法

    通过Class对象可以获取类的方法,主要方法有:

  • getMethods():获取所有public方法(包括继承的)。
  • getDeclaredMethods():获取所有方法(包括私有、受保护的,但不包括继承的)。
  • getMethod(String name, Class<?>... parameterTypes):获取指定名称和参数类型的public方法。
  • getDeclaredMethod(String name, Class<?>... parameterTypes):获取指定名称和参数类型的方法(包括私有、受保护的)。
    例如:
    import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws Exception {Class<?> clazz = String.class;Method method = clazz.getMethod("substring", int.class);String str = "hello";Object result = method.invoke(str, 2);System.out.println(result);}
    }

    4. 获取字段

    通过Class对象可以获取类的字段,主要方法有:

  • getFields():获取所有public字段(包括继承的)。
  • getDeclaredFields():获取所有字段(包括私有、受保护的,但不包括继承的)。
  • getField(String name):获取指定名称的public字段。
  • getDeclaredField(String name):获取指定名称的字段(包括私有、受保护的)。
    例如:
    import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws Exception {Class<?> clazz = java.util.Date.class;Object obj = clazz.getDeclaredConstructor().newInstance();Field field = clazz.getDeclaredField("fastTime");field.setAccessible(true);field.set(obj, 123456789L);System.out.println(obj);}
    }

    三、应用实例

    以下代码展示了反射机制的综合应用:

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;class Person {private String name;public int age;public Person() {}private Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}private String sayHello(String message) {return "Hello, " + message + "! I'm " + name;}
    }public class Main {public static void main(String[] args) throws Exception {// 1. 获取Class对象Class<?> clazz = Class.forName("Person");// 2. 使用私有构造方法创建对象Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);constructor.setAccessible(true);Object person = constructor.newInstance("John", 30);// 3. 访问和修改私有字段Field nameField = clazz.getDeclaredField("name");nameField.setAccessible(true);nameField.set(person, "Mike");// 4. 访问和修改公有字段Field ageField = clazz.getField("age");ageField.set(person, 35);// 5. 调用公有方法Method getNameMethod = clazz.getMethod("getName");String name = (String) getNameMethod.invoke(person);System.out.println("Name: " + name);// 6. 调用私有方法Method sayHelloMethod = clazz.getDeclaredMethod("sayHello", String.class);sayHelloMethod.setAccessible(true);String result = (String) sayHelloMethod.invoke(person, "World");System.out.println("Method result: " + result);}
    }
    代码解释
  • 获取Class对象:使用Class.forName()方法获取Person类的Class对象。
  • 创建对象:通过反射获取私有构造方法Person(String, int),并使用setAccessible(true)打破访问限制,创建Person对象。
  • 访问和修改字段:通过反射获取私有字段name和公有字段age,使用setAccessible(true)访问私有字段,并修改字段值。

     四、面试题

    题目:

    答案:

    五、自我总结

    通过对 Java 反射机制的学习,我们掌握了一种强大的运行时类操作工具。反射机制在框架开发、工具类实现、ORM 映射等场景中发挥着重要作用,它允许程序在运行时动态获取类的信息并操作对象。然而,反射也有其局限性,如性能开销较大、破坏类的封装性、代码可读性差等。因此,在实际开发中,应谨慎使用反射,只有在确实需要动态创建对象、调用方法或访问字段时才考虑使用。合理运用反射机制可以提高代码的灵活性和可扩展性,但过度使用会导致代码复杂度增加,维护难度加大。

http://www.dtcms.com/wzjs/489206.html

相关文章:

  • 做游戏网站用什么系统做网络营销方案如何写
  • 网站建设 图片优化网站搜索
  • 暴雪战网官方网站入口app下载推广平台
  • 怎么查找网站的根目录百度下载app下载
  • 如何做ps4游戏视频网站做网页怎么做
  • 做网站找哪家又便宜又好中国搜索引擎市场份额
  • 网站制作与建设与网页制作网络推广团队哪家好
  • 给别人做网站多少钱百度q3财报2022
  • 免费网络空间搜索引擎百度爱采购关键词优化
  • 网站建设的渠道策略优秀营销软文100篇
  • 余姚网站推广策划案网站查询ip地址查询
  • 淘宝支持做微交易网站吗重庆森林为什么不能看
  • 提交网站引擎优化seo是什么
  • 同城购物网站怎么做长尾关键词排名工具
  • WordPress程序APP制作seo文章关键词怎么优化
  • 用手机制作网站的软件杭州网站seo优化
  • 广东营销式网站百色seo关键词优化公司
  • 杭州杭州网站建设如何免费注册一个网站
  • 漳州手机网站建设免费外链网站seo发布
  • 经营性网站备案时间手机百度app下载安装
  • 重庆网站建设排名聊城seo整站优化报价
  • 武汉做网站 古凡中国万网
  • 质监站网址怎么开自己的网站
  • 淘宝联盟的购物网站怎么做推广网络营销案例
  • 南昌网站做提高工作效率的句子
  • 建设公共资源交易中心网站百度关键词搜索怎么弄
  • 医疗网站专题模板西安百度竞价托管公司
  • 宜兴做网站哪家好seo如何提高排名
  • jsp两种网站开发模式最新疫情最新情况
  • html企业网站怎么做google官网注册账号入口