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

做的网站如何放在电脑上响应式网站视频

做的网站如何放在电脑上,响应式网站视频,icp网站信息,电商大脑文章目录 1.反射的定义2. 认识反射的关键API2.1 Class2.2 Field2.3 Method2.4 Constructor 3. 示例代码讲解与分析4. 编写反射示例代码的步骤4.1 定义测试类4.2 编写主程序,使用反射获取信息4.3 通过反射创建对象并调用方法 5. 总结6.今日生词 Java反射笔记 1.反射的…

文章目录

  • 1.反射的定义
  • 2. 认识反射的关键API
    • 2.1 Class
    • 2.2 Field
    • 2.3 Method
    • 2.4 Constructor
  • 3. 示例代码讲解与分析
  • 4. 编写反射示例代码的步骤
    • 4.1 定义测试类
    • 4.2 编写主程序,使用反射获取信息
    • 4.3 通过反射创建对象并调用方法
  • 5. 总结
  • 6.今日生词

Java反射笔记

1.反射的定义

  • 反射是什么?
    Java反射是一种在运行时动态获取类的结构信息并操作对象的机制。通过反射,你可以:
    • 获取类信息:在程序运行时动态加载类,检查类的属性、方法和构造函数。
    • 动态操作:可以动态调用对象的方法、修改对象的属性(即使是私有成员),甚至创建新的对象实例。
  • 应用场景:
    • 框架开发(如Spring、Hibernate)常常利用反射实现依赖注入、动态代理和数据绑定。
    • 插件化开发:根据配置动态加载类,实现模块化扩展。

2. 认识反射的关键API

2.1 Class

  • 作用:代表一个类或接口的运行时类型信息。
  • 获取方式:
    • 使用实例的 getClass() 方法:Object obj = new Person(); Class<?> cls = obj.getClass();
    • 使用静态方法 Class.forName("完整类名")Class<?> cls = Class.forName("com.example.Person");
  • 常用方法:
    • getName():获取类的全限定名。
    • getDeclaredFields():获取所有声明的字段(包括私有字段)。
    • getDeclaredMethods():获取所有声明的方法。
    • getConstructors() getDeclaredConstructors():获取公共构造函数或所有构造函数。

2.2 Field

  • 作用:代表类的成员变量(字段)。
  • 常用方法:
    • getName():返回字段名称。
    • get(Object obj):获取指定对象上此字段的值。
    • set(Object obj, Object value):修改指定对象上此字段的值。
    • setAccessible(true):当字段是私有时,允许通过反射访问或修改其值。
  • 注意事项:使用 setAccessible(true) 时要注意安全性和封装性,最好在必要时才使用。

2.3 Method

  • 作用:代表类中的方法。
  • 常用方法:
  • getName():获取方法名称。
  • invoke(Object obj, Object... args):在指定对象上调用此方法,传递必要的参数。
  • getParameterTypes():获取方法参数类型数组。
  • 使用场景:动态调用对象方法,或在运行时根据方法名称决定调用哪个方法。

2.4 Constructor

  • 作用:代表类的构造函数。
  • 常用方法:
    • newInstance(Object... initargs):利用构造函数创建新实例,传入必要参数。
    • getParameterTypes():获取构造函数的参数类型。
  • 使用场景:动态创建对象实例,尤其是在编写通用工厂模式或插件式架构时非常有用。

3. 示例代码讲解与分析

下面是一段简单的示例代码,展示如何使用反射获取一个类的结构信息。假设我们有一个简单的 Person 类。
示例代码

// 定义一个简单的Person类
public class Person {private String name;private int age;// 构造函数public Person() {this.name = "Default";this.age = 0;}public Person(String name, int age) {this.name = name;this.age = age;}// 方法:打印信息public void sayHello() {System.out.println("Hello, my name is " + name);}
}

反射获取类信息的示例

import java.lang.reflect.*;public class ReflectionDemo {public static void main(String[] args) {try {// 1. 获取Person类的Class对象Class<?> personClass = Class.forName("Person");// 2. 获取类的名称System.out.println("类名称:" + personClass.getName());// 3. 获取所有构造函数Constructor<?>[] constructors = personClass.getDeclaredConstructors();System.out.println("构造函数:");for (Constructor<?> constructor : constructors) {System.out.println("  " + constructor);}// 4. 获取所有字段(包括私有字段)Field[] fields = personClass.getDeclaredFields();System.out.println("字段:");for (Field field : fields) {System.out.println("  " + field.getName());}// 5. 获取所有方法Method[] methods = personClass.getDeclaredMethods();System.out.println("方法:");for (Method method : methods) {System.out.println("  " + method.getName());}} catch (ClassNotFoundException e) {e.printStackTrace();}}
}

分析

  • Class.forName(“Person”):动态加载 Person 类,通过其完全限定名获得 Class 对象。
  • 获取构造函数:调用 getDeclaredConstructors() 返回该类所有构造函数,并输出构造函数的签名。
  • 获取字段:调用 getDeclaredFields(),即使字段为私有也能获取到。通过 field.getName() 输出每个字段的名称。
  • 获取方法:调用 getDeclaredMethods() 得到类中所有声明的方法,输出方法名称以便了解类提供了哪些操作。

4. 编写反射示例代码的步骤

4.1 定义测试类

创建一个名为 Person 的类,包含如下内容:

  • 字段:name(String)、age(int)。
  • 构造函数:无参构造函数和带参构造函数。
  • 方法:例如 sayHello() 用于输出欢迎信息。

4.2 编写主程序,使用反射获取信息

1.加载类:使用 Class.forName("Person") 获取 Class 对象。
2.获取构造函数:使用 getDeclaredConstructors() 获取所有构造函数。
3.获取字段:使用 getDeclaredFields() 获取所有字段,必要时调用 setAccessible(true) 访问私有字段。
4.获取方法:使用getDeclaredMethods()获取所有方法。

4.3 通过反射创建对象并调用方法

  • 实例化对象:使用获取到的构造函数(如带参构造函数)调用 newInstance() 创建 Person 对象。
  • 修改字段:如果需要,可以通过反射修改私有字段的值。例如,调用 field.setAccessible(true) 后,再使用 field.set(personInstance, "新的名字")
  • 调用方法:使用 Method.invoke(object, args...) 来调用 sayHello() 方法,并观察控制台输出。

示例代码扩展:创建对象并调用方法


import java.lang.reflect.*;public class ReflectionDemoExtended {public static void main(String[] args) {try {// 1. 加载Person类的Class对象Class<?> personClass = Class.forName("Person");// 2. 获取带参构造函数,并创建对象Constructor<?> constructor = personClass.getConstructor(String.class, int.class);Object personInstance = constructor.newInstance("Alice", 25);// 3. 修改私有字段(假设需要修改name)Field nameField = personClass.getDeclaredField("name");nameField.setAccessible(true); // 允许访问私有字段nameField.set(personInstance, "Bob");// 4. 调用sayHello方法Method sayHelloMethod = personClass.getDeclaredMethod("sayHello");sayHelloMethod.invoke(personInstance);} catch (Exception e) {e.printStackTrace();}}
}

代码说明

  • 创建对象:通过 getConstructor(String.class, int.class) ``获取带参构造函数,然后调用 newInstance(“Alice”, 25) `创建对象。
  • 修改字段:通过 getDeclaredField("name") 获取 name 字段,设置为可访问后,用 set() 方法修改对象的 name 值为 “Bob”。
  • 调用方法:获取 sayHello 方法,并调用 invoke() 执行该方法,观察输出验证修改后的值。

5. 总结

  • 反射的优势:可以在运行时动态操作对象和类,灵活应对各种需求(如插件化、依赖注入)。
  • 需要注意的点:
    • 反射操作可能破坏封装性,使用时需要谨慎。
    • 反射会有一定的性能损耗,不建议在性能敏感的场景中大量使用。

6.今日生词

1.tongue 2.circunstance 3.tension 4.economist 5.accommodate


文章转载自:

http://uFbWkG3q.srgbr.cn
http://vD2rK89x.srgbr.cn
http://TmBMmNWF.srgbr.cn
http://l8cD9e0w.srgbr.cn
http://tJH3pI4i.srgbr.cn
http://wuO4ghgz.srgbr.cn
http://tkEkpcad.srgbr.cn
http://knpfy2NM.srgbr.cn
http://783EHdTT.srgbr.cn
http://HKX8OTg1.srgbr.cn
http://7jPNSDyG.srgbr.cn
http://nhS2i9in.srgbr.cn
http://TupmDaQD.srgbr.cn
http://1mtyrji7.srgbr.cn
http://Y1uR6YQN.srgbr.cn
http://M7X3MJmu.srgbr.cn
http://rQfPtixd.srgbr.cn
http://FyDXMpLO.srgbr.cn
http://gtjEJQOo.srgbr.cn
http://EPW06UkB.srgbr.cn
http://7Q5TriMz.srgbr.cn
http://TKKhbrUM.srgbr.cn
http://N9sWOXNf.srgbr.cn
http://o5ZTXJGP.srgbr.cn
http://OmEIxP06.srgbr.cn
http://oaOTG1NE.srgbr.cn
http://6OSdNuwY.srgbr.cn
http://nUfIEQ6X.srgbr.cn
http://rt8Ldmm3.srgbr.cn
http://mR11hypq.srgbr.cn
http://www.dtcms.com/wzjs/690690.html

相关文章:

  • 怎么给网站做动图做网站买一个域名多少钱
  • 建设网站的技巧网页广告位
  • 北京当地网站 点wordpress字体加速
  • wordpress 不用ftp酒店seo是什么意思
  • wordpress 总访问统计qq的seo综合查询
  • 网站建设系统分析包括哪些如何自学美工
  • 炒币做合约哪个网站最好杭州老牌的网站建设
  • 国外对旅游网站建设的现状如何做外贸品牌网站
  • 外贸企业公司网站建设dz论坛如何seo
  • 如何做国外外贸网站wordpress最新文章代码
  • 建网站wordpress成都网页
  • 长丰下塘新农村建设网站云南域名注册网站建设
  • 钦州做网站做网站九州科技
  • 30个免费货源网站夸克免费空间
  • 淄博网站建设乐达东莞做购物网站
  • 淘客做的领券网站做网站难吗_挣钱吗
  • 学校网站建设要点南阳网站建设的公司
  • 上海网站制作建设多少钱做视频搬运工的网站
  • 襄阳网站建设制作费用网站建设 最新软件
  • 如何诊断网站seo现代教育网站开发项目的研究
  • 福州市建设工程质量监督站网站百度权重排名高的网站
  • 扎实做好机构编制网站建设如何去掉 wordpress
  • 宝应建设局网站广东餐饮品牌设计
  • 做网站 视频加载太慢wordpress分类页置顶信息
  • 深圳企业网站制作平台网站开发修改端口
  • 手机网站实例小而美企业网站建设
  • 中国体育新闻最新消息关键词自然排名优化
  • 长沙品牌网站制作服务报价上海所有公司名称
  • drupal网站开发wordpress嵌入视频播放
  • 昆明网站建设哪家网站分几类