江西省美丽乡村建设公布网站/新的营销模式有哪些

江西省美丽乡村建设公布网站,新的营销模式有哪些,专门做pp他的网站,网站建设不能持续消费目 录 一、概述 二、获取 Class 的四种方式 1.Class.forName("完整全限定类名") 2.getClass() 3.class 属性 4.通过类加载器获取 三、通过反射机制实例化对象 1.newInstance()(已过时) 2.配置文件利用反射机制实例化对象 四、反射 Cla…

目  录

一、概述

二、获取 Class 的四种方式

1.Class.forName("完整全限定类名")

2.getClass()

3.class 属性

4.通过类加载器获取

三、通过反射机制实例化对象

 1.newInstance()(已过时)

 2.配置文件利用反射机制实例化对象

 四、反射 Class 的 Field

1.获取 Person 的属性

2.反编译 String 类的属性

3.通过反射为对象属性赋值


一、概述

  1. 反射机制是 JDK 中的一套类库,可以帮助操作或读取字节码文件;
  2. 很多 Java 框架底层都是基于反射机制实现的;
  3. 部分核心类:
    1. java.lang.Class:实例代表某个 class 文件 或 某一类型;
    2. java.lang.reflect.Field:实例代表类中的属性或字段;
    3. java.lang.reflect.Constructor:实例代表类中的构造方法;
    4. java.lang.reflect.Method:实例代表类中的方法。

二、获取 Class 的四种方式

1.Class.forName("完整全限定类名")

  1. 全限定类名含有包名,是 lang 包下的,【 java.lang 】也不可省略;
  2. 参数是字符串类型;
  3. 若类不存在,则会报 【 java.lang.ClassNotFoundException】异常;
  4. 此方法的执行,会导致类加载。
public class ReflectTest {static {System.out.println("static block");}public static void main(String[] args) throws ClassNotFoundException {Class<?> aClass1 = Class.forName("reflecttest.ReflectTest");System.out.println(aClass1);Class<?> aClass2 = Class.forName("java.lang.Integer");System.out.println(aClass2);}
}


2.getClass()

  1.  该方法通过引用去调用;
  2. 某类型的字节码文件在内存中仅存储一份。
public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException {Class<?> aClass1 = Class.forName("java.lang.String");System.out.println(aClass1);String str = "hello";Class<?> aClass2 = str.getClass();System.out.println(aClass2);System.out.println(aClass1 == aClass2);Class<?> aClass3 = Class.forName("reflecttest.ReflectTest");System.out.println(aClass3);ReflectTest reflectTest = new ReflectTest();Class<? extends ReflectTest> aClass4 = reflectTest.getClass();System.out.println(aClass4);System.out.println(aClass3 == aClass4);}
}


3.class 属性

        在 Java 中,任何类型(包括基本数据类型)都有 class 属性,可以通过这个属性获取 Class 实例。

public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException {Class<Integer> intClass = int.class;Class<Integer> integerClass = Integer.class;System.out.println(intClass);   // intSystem.out.println(integerClass);   // java.lang.Integer}
}

4.通过类加载器获取

public class ReflectLoader {public static void main(String[] args) throws ClassNotFoundException {ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();System.out.println(systemClassLoader);Class<?> aClass = systemClassLoader.loadClass("java.lang.String");System.out.println(aClass);}
}

         有关类加载器的部分细节,将在下一节进行讨论。


三、通过反射机制实例化对象

        那么,获取到 Class 有什么用处呢?

        这就是通过反射机制实例化对象。

 1.newInstance()(已过时)

public class Person {private String name;private int age;public Person() {System.out.println("Person 无参构造方法");}public Person(String name, int age) {System.out.println("Person 有参构造方法");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;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class<?> personClass = Class.forName("reflecttest.Person");System.out.println(personClass);Person person = (Person) personClass.newInstance();System.out.println(person);}
}
  1. 以上代码通过 personClass 实例化 Person 类型对象;
  2. 原理:调用 Person 的无参构造方法实例化对象;
  3. 使用此方法实现对象实例化,必须保证该类存在无参构造方法,否则会报【java.lang.InstantiationException】异常;
  4. 从 jdk 9 开始,该方法被标注已过时。


 2.配置文件利用反射机制实例化对象

# classInfo.properties 文件
className=reflecttest.Person
public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {ResourceBundle resourceBundle = ResourceBundle.getBundle("reflecttest\\classInfo"); // 加载classInfo.properties文件String className = resourceBundle.getString("className");   // 获取className的值Class<?> aClass = Class.forName(className);Object o = aClass.newInstance();System.out.println(o);}
}

        那么,在想要灵活实例化其他对象时,无需修改 java 文件,只需要修改配置文件即可。例如:将实例化 Person 对象改为 实例化 Date 对象。

# classInfo.properties 文件
className=java.util.Date


 四、反射 Class 的 Field

1.获取 Person 的属性

public class Person {public String name;private int age;protected String sex;public static String country;public static final String job = "程序员";
}
public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {// 反射获取类信息Class<?> aClass = Class.forName("reflecttest.Person");// 获取类中的所有被 public 修饰的属性Field[] fields = aClass.getFields();for (Field field : fields) {System.out.print(field.getName() + "    "); // name    country    job}System.out.println();// 获取类中的所有属性Field[] declaredFields = aClass.getDeclaredFields();for (Field declaredField : declaredFields) {// 获取属性名System.out.print(declaredField.getName() + "    "); // name    age    sex    country    job}System.out.println();for (Field declaredField : declaredFields) {// 获取属性类型System.out.print(declaredField.getType().getName() + "    "); // java.lang.String    int    java.lang.String    java.lang.String    java.lang.String}System.out.println();for (Field declaredField : declaredFields) {// 获取属性类型简单名称System.out.print(declaredField.getType().getSimpleName() + "    "); // String    int    String    String    String}System.out.println();for (Field declaredField : declaredFields) {// 获取属性的修饰符System.out.print(declaredField.getModifiers() + "    ");    // 1    2    4    9    25}System.out.println();for (Field declaredField : declaredFields) {// 获取属性的修饰符名称System.out.print(Modifier.toString(declaredField.getModifiers()) + "    ");    // public    private    protected    public static    public static final}}
}


2.反编译 String 类的属性

public class ReflectTest {public static void main(String[] args) {String str = new String();// 获取类信息Class<? extends String> aClass = str.getClass();// 获取类修饰符String classMod = Modifier.toString(aClass.getModifiers());// 获取简单类名String className = aClass.getSimpleName();// 获取简单父类名String classSupName = aClass.getSuperclass().getSimpleName();// 获取父类接口Class<?>[] classInterfaces = aClass.getInterfaces();// 获取所有属性Field[] declaredFields = aClass.getDeclaredFields();// 字符串拼接StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(classMod);stringBuilder.append(" class ");stringBuilder.append(className);stringBuilder.append(" extends ");stringBuilder.append(classSupName);if (classInterfaces.length > 0) {stringBuilder.append(" implements ");for (int i = 0; i < classInterfaces.length; i++) {stringBuilder.append(classInterfaces[i].getSimpleName());if (i != classInterfaces.length - 1) {stringBuilder.append(", ");}}}stringBuilder.append(" {\n");for (Field declaredField : declaredFields) {stringBuilder.append("\t");// 获取属性修饰符stringBuilder.append(Modifier.toString(declaredField.getModifiers()));stringBuilder.append(" ");// 获取属性类型stringBuilder.append(declaredField.getType().getSimpleName());stringBuilder.append(" ");// 获取属性名stringBuilder.append(declaredField.getName());stringBuilder.append(";\n");}stringBuilder.append("}");System.out.println(stringBuilder);}
}


3.通过反射为对象属性赋值

  1. 三要素:对象、属性、值。缺一不可;
  2. 若属性不是 public 的,运行会报【java.lang.IllegalAccessException】异常,需要通过 setAccessible(true) 打破封装;
public class Person {public String name;private int age;protected String sex;public static String country;public static final String job = "程序员";
}
public class FieldTest {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {Person person = new Person();// 获取Person类Class<? extends Person> aClass = person.getClass();// 获取属性Field name = aClass.getDeclaredField("name");Field age = aClass.getDeclaredField("age");Field sex = aClass.getDeclaredField("sex");Field country = aClass.getDeclaredField("country");Field job = aClass.getDeclaredField("job");// 设置属性可访问age.setAccessible(true);sex.setAccessible(true);// 设置属性值name.set(person, "小明");age.set(person, 23);sex.set(person, "男");country.set(person, "中国");// 获取属性值System.out.println("姓名:" + name.get(person));System.out.println("年龄:" + age.get(person));System.out.println("性别:" + sex.get(person));System.out.println("国籍:" + country.get(person));System.out.println("职业:" + job.get(person));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

33.[前端开发-JavaScript基础]Day10-常见事件-鼠标事件-键盘事件-定时器-案例

1 window定时器 window定时器方法 setTimeout的使用 setInterval的使用 2 轮播消息提示 案例实战一 – 轮播消息提示 3 关闭隐藏消息 案例实战二 – 关闭隐藏消息 4 侧边栏展示 案例实战三 – 侧边栏展示 5 tab切换实现 案例实战四 – 登录框&#xff08;作业&#xff09;…

react ant design树穿梭框实现搜索并展开到子节点、同级节点选择及同时选择数量限制功能

功能点&#xff1a; 点击节点前的箭头&#xff0c;可以手动展开或折叠该节点的子节点。在搜索框中输入关键词&#xff0c;匹配的节点及其父节点会自动展开。清空搜索框后&#xff0c;恢复到用户手动控制的展开状态。勾选节点时仍然遵守 "最多勾选 6 个节点" 和 &quo…

阿里云云效 Maven

阿里云云效 Maven 官网&#xff1a;https://developer.aliyun.com/mvn/guide 阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库&#xff0c;帮助研发人员提高研发生产效率&#xff0c;使用阿里云Maven中央仓库作为下载源&#xff0c;速度更快更稳定。 阿里云云效 是企业…

如何在 Postman 中正确设置 Session 以维持用户状态?

在 Postman 里面设置有 session 的请求。如果你还不知道什么是 session&#xff0c;那么请看这里—— session 是一种记录客户端和服务器之间状态的机制&#xff0c;用于保持用户的登录状态或者其他数据&#xff0c;从而让用户在不同页面之间保持一致的体验。 Postman 设置带 …

DQN与PPO在算法层面的核心区别

DQN与PPO在算法层面的核心区别 1. 学习目标不同 DQN(基于价值): 核心:学习动作价值函数 Q ( s , a ) Q(s, a)

解析 HTML 网站架构规范

2025/3/28 向全栈工程师迈进&#xff01; 一、网页基本的组成部分 网页的外观多种多样&#xff0c;但是除了全屏视频或游戏&#xff0c;或艺术作品页面&#xff0c;或只是结构不当的页面以外&#xff0c;都倾向于使用类似的标准组件。 1.1页眉 通常横跨于整个页面顶部有一…

Three.js 快速入门教程【二十】3D模型加载优化实战:使用gltf-pipeline与Draco对模型进行压缩,提高加载速度和流畅性

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…

基于51单片机的速度检测报警器proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1I7roZEjrk349Is_YdMcsxQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C51 是一款常用的 8 位单片机&#xff0c;由 Atmel 公司&#xff08;现已被 Microchip 收…

DeepSeek 本地化部署教程

1 概述 1.1 配置参考图 科普&#xff1a; B&#xff0c;Billion&#xff08;十亿&#xff09;&#xff0c;是 “参数量” 的单位。 模型量超过 一亿&#xff0c;可称之为 “大模型”。 2 软件安装 2.1 下载 Ollama 官方主页&#xff1a;https://ollama.com/download主页截图…

matlab打开两个工程

1、问题描述 写代码时&#xff0c;需要实时参考别人的代码&#xff0c;需要同时打开2个模型&#xff0c;当模型在同一个工程内时&#xff0c;这是可以直接打开的&#xff0c;如图所示 2、解决方案 再打开一个MATLAB主窗口 这个时候就可以同时打开多个模型了 3、正确的打开方…

mac 下配置flutter 总是失败,请参考文章重新配置flutter 环境MacOS Flutter环境配置和安装

一、安装和运行Flutter的系统环境要求 想要安装并运行 Flutter&#xff0c;你的开发环境需要最低满足以下要求&#xff1a; 操作系统:macOS磁盘空间:2.8 GB(不包括IDE/tools的磁盘空间)。工具:Flutter使用git进行安装和升级。我们建议安装Xcode&#xff0c;其中包括git&#x…

Flutter快速搭建聊天

之前项目中使用的环信聊天&#xff0c;我们的App使用的Flutter开发的 。 所以&#xff0c;就使用的 em_chat_uikit &#xff0c;这个是环信开发的Flutter版本的聊天。 一开始&#xff0c;我们也用的环信的聊天&#xff0c;是收费的&#xff0c;但是&#xff0c;后面就发现&…

Sa-Token

简介 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 官方文档 常见功能 登录认证 本框架 用户提交 name password 参数&#xff0c;调用登…

基于javaweb的SSM航班机票预订平台系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

JAVA实现动态IP黑名单过滤

一些恶意用户(可能是黑客、爬虫、DDoS 攻击者)可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 通过 IP 封禁&#xff0c;可以有效拉黑攻击者&#xff0c;防止资源被滥用&#xff0c;保障合法用户…

开源的CMS建站系统可以随便用吗?有什么需要注意的?

开源CMS建站系统虽然具有许多优点&#xff0c;但并非完全“随便用”。无论选哪个CMS系统&#xff0c;大家在使用的时候&#xff0c;可以尽可能地多注意以下几点&#xff1a; 1、版权问题 了解开源许可证&#xff1a;不同的开源CMS系统采用不同的开源许可证&#xff0c;如GPL、…

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法&#xff08;MSADBO&#xff09;优化变分模态提取&#xff08;VME&#xff09;结合稀疏最大谐波噪声比解卷积&#xff08;SMHD&#xff09;进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中&#xff0c;机械设备的稳定运行…

探究 CSS 如何在HTML中工作

2025/3/28 向全栈工程师迈进&#xff01; 一、CSS的作用 简单一句话——美化网页 <p>Lets use:<span>Cascading</span><span>Style</span><span>Sheets</span> </p> 对于如上代码来说&#xff0c;其显示效果如下&#xff1…

硬件老化测试方案的设计误区

硬件老化测试方案设计中的常见误区主要包括测试周期不足、测试条件过于单一、样品选择不当等方面。其中&#xff0c;测试周期不足尤为突出&#xff0c;容易导致潜在缺陷未被完全暴露。老化测试本质上是通过加速产品老化来模拟长期使用状况&#xff0c;因此测试周期不足会严重削…

无锡零碳园区“三年突围”安科瑞源网荷储充系统如何破解“绿电难、储能贵、调度乱”困局?

零碳园区建设如火如荼&#xff0c;为何企业“不敢投、不会用”&#xff1f; 无锡市政府3月27日发布《零碳园区建设三年行动方案》&#xff0c;目标到2027年建成10家以上零碳园区、20家零碳工厂、10个源网荷储一体化项目。但企业仍存疑虑&#xff1a; 绿电消纳难&#xff1a;光…