JavaEE企业开发新技术

news2024/9/23 1:36:00

目录

2.1  Class对象基本概念

1、概念

2.2 Class对象的获取方式

2.3基本数据类型的Class对象

1、概念

2.4 反射的基本概念

概念

2.5 Class对象的基本使用-1

2.6 Class对象的基本使用-2

newInstance()和new()区别:


2.1  Class对象基本概念

1、概念

反射的基础——Class

Java当中的类用来表示具有相同属性和方法的对象的结合,是抽象的概念。对象是类创建的,同一个类的不同对象具有不同的属性价值

Java当中定义的所有类都属于同一类事物,可以用Class来表示

Class类的对象就是不同的类对应的字节码

获取Class对象:

A a=new A()

获取Class对象的三种方式

  1. 创建对象,通过对象名调用getClass拿到Class对象

Person p1=new Person();

P1.getClass();

  1. 直接通过类名.Class拿到Class对象

Person.class

  1. Class.forName()方法

Class.forName(“java.lang.String”)

2、示例代码

public class Person {

private Integer id;

private String name;



public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Person(Integer id,String name) {

super();

this.id=id;

this.name=name;

}

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + "]";

}

public Person() {

super();

}

}

  

public class Test {

    public static void main(String[] args) throws ClassNotFoundException{

        Person p = new Person();

        Class clazz1=p.getClass();


        Class clazz2=Person.class;


        System.out.println(clazz1);

        System.out.println(clazz2);


        Class clazz3=Class.forName("cn.edu.xync.myweb.reflect.Person");

        System.out.println(clazz3);

    }


}

2.2 Class对象的获取方式

  1. 通过对获取Class对象的三种方式的实现,了解到,对同一个类来讲,不管用哪种方式获取Class对象,获取到的Class对象是唯一的,满足单例模式。
  2. 源码:
public class Test {

        public static void main(String[] args) throws ClassNotFoundException{

                Person p = new Person();

                Class clazz1=p.getClass();

                Class clazz2=Person.class;

                System.out.println(clazz1==clazz2);

                Class clazz3=Class.forName("cn.edu.xync.myweb.reflect.Person");

                Class clazz4=Class.forName("cn.edu.xync.myweb.reflect.Person");

                System.out.println(clazz3==clazz4);

        }

}

2.3基本数据类型的Class对象

1、概念

java从大的方面分类,一个是基本数据类型,一个是复合数据类型,java当中的基本数据类型有:boolean  int  short  byte  char  long  float 和 double 它们也有各自的Class对象

例如:int.class

void也有自己对于的Class对象(void.class)

基本数据类型对应的封装类有属性TYPE(常量),这个属性代表了封装类所封装的基本数据类型的Class对象。

Int.class==Integer.TYPE

void.class==Void.TYPE

代码

System.out.println(int.class==Integer.TYPE);


System.out.println(boolean.class==Boolean.TYPE);


System.out.println(float.class==Float.TYPE);


System.out.println(void.class.getName());

//表示对应数据类型的封装类可以表示基本数据类型的Class对象

2.4 反射的基本概念

  1. 概念

反射就是把java类中的各个组成部分映射成相应的java类

一个类的组成部分包括:属性、方法、构造方法、包等,这些组成部分都会被映射成相应的类。

Class类定义了一系列方法来获取java类的属性、方法、构造方法、包等信息,这些信息都有相应的来表示,分别是Field、Method、Constructor、Package等。

java.lang.Class:代表一个类

java.lang.reflect.Method:代表类的方法

java.lang.reflect.Field:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造器

注意:表示java类组成部分的各种类位于java.lang.reflect包

  1. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
  2. 对于任意一个对象,都能够调用它的任意一个方法和属性;
  3. 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

当要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。

通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。

2.5 Class对象的基本使用-1

要进行反射操作必须要拿到这个类对应的Class对象

Class clazz3=Class.forName("cn.edu.xync.myweb.reflect.Person");

Class clazz4=Class.forName("cn.edu.xync.myweb.reflect.Person");

Package p=clazz3.getPackage();

System.out.println(p.getName());


Constructor con1=clazz3.getConstructor();//得到构造方法

System.out.println(con1.getName());//拿到构造方法的名称


Person person1=(Person) con1.newInstance();//通过无参构造方法创建对象1

System.out.println(person1);


Person person2=(Person) con1.newInstance();//通过无参构造方法创建对象2

System.out.println(person2);

通过构造方法创建的两个对象的hash code编码是不一样的说明是创建了两个不同类型的对象

本次主要学习了通过反射如何得到包的信息,和得到对应的构造方法的信息

2.6 Class对象的基本使用-2

一个类可能会定义多个重载的构造方法,当定义有参构造时,在创建对象时可以加入参数

Class clazz3=Class.forName("cn.edu.xync.myweb.reflect.Person");

Class clazz4=Class.forName("cn.edu.xync.myweb.reflect.Person");

Package p=clazz3.getPackage();

System.out.println(p.getName());


Constructor  con3=clazz3.getConstructor(Integer.class,String.class);//得到一个带有参数的构造方法(通过反射的方式创建)


Person p3=(Person)con3.newInstance(100,"小明");//创建对象并传入参数

System.out.println(p3);

Constructor<Person>[] con=clazz3.getConstructors();



for(Constructor con4:con) {

System.out.println(con);

}

//通过Constructors可以得到Person类中的所有构造方法,再通过for循环来遍历输出每个构造方法

newInstance()和new()区别:

  1. 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类。
  2. newInstance创建类是这个类必须已经加载过且已经连接,new创建类是则不需要这个类加载过

3、new是一个关键字;而newInstance是Class类中的一个方法,并且应用到了反射机制,相当于逆向创建对象,而new则是顺序创建对象。

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

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

相关文章

【字符串】【贪心】【 树状数组】2193. 得到回文串的最少操作次数

作者推荐 视频算法专题 本文涉及知识点 字符串 贪心 树状数组 分类讨论 LeetCode2193. 得到回文串的最少操作次数 给你一个只包含小写英文字母的字符串 s 。 每一次 操作 &#xff0c;你可以选择 s 中两个 相邻 的字符&#xff0c;并将它们交换。 请你返回将 s 变成回文串…

Qt5.14.2揭秘Qt与SSL/TLS的完美邂逅:打造坚不可摧的网络安全防线

引言&#xff1a; 在数字化时代&#xff0c;数据安全是每个开发者和用户都不可忽视的问题。Qt&#xff0c;作为一个强大的跨平台开发框架&#xff0c;为我们提供了丰富的网络功能&#xff0c;其中就包括了对SSL/TLS加密通信的支持。本文将带你深入了解如何在Qt中实现SSL证书认证…

【力扣白嫖日记】1174.即时食物配送II

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1174.即时食物配送II 表&#xff1a;Person 列名类型delivery_idintcustomer_idintorder_datedatecustomer_…

C# winform 重启电脑

一、重启电脑指令 windows7系统的启动文件夹为“开始菜单”——“所有程序”里面就有“启动”文件夹&#xff0c;其位置是 “C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 如果没有&#xff0c;则需要将其中的"administrator…

PHP storm连接阿里云服务器

阿里云开放端口 &#xff1a;1024/65535 然后宝塔 FTP 设置账户密码 和开放的文件目录 SFTP &#xff1a;账号root 密码&#xff1a;阿里云设置的密码

什么是MAE和MSE?

平均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09;和平均方差误差&#xff08;Mean Squared Error&#xff0c;MSE&#xff09;是常用的评价回归模型性能的指标。它们用于衡量模型预测值与真实值之间的差异。 在深度学习领域&#xff0c;MAE 和 MSE 是…

Centos7安装Gogs完整教程

前言 本文章讲的是如何在Centos7下安装git服务器Gogs&#xff0c;本文参考了网络上的文章和官方文档。根据本文来操作可以完美安装Gogs&#xff0c;如果有其他问题或者看法&#xff0c;可以在评论区留下你的问题或看法。如果觉得本文对你有用&#xff0c;还请点赞和收藏一下。…

【新书推荐】17.3 字符串操作举例

本节内容&#xff1a;字符串操作举例。 ■例3&#xff1a;接收字符串去掉空格后逆向输出&#xff0c;t17-3.asm。 ■例4&#xff1a;字符串拼接&#xff0c;t17-4.asm。 ■例5&#xff1a;判断子串&#xff0c;t17-5.asm。 17.3.1 例3&#xff1a;接收字符串去掉空格后逆向输出…

【正点原子STM32探索者】CubeMX+Keil开发环境搭建

文章目录 一、简单开箱二、资料下载三、环境搭建3.1 安装Keil MDK3.2 激活Keil MDK3.3 安装STM32CubeMX3.4 安装STM32F4系列MCU的Keil支持包 四、GPIO点灯4.1 查阅开发板原理图4.2 创建STM32CubeMX项目4.3 配置系统时钟和引脚功能4.4 生成Keil项目4.5 打开Keil项目4.6 编译Keil…

回收站选址(CCF 201912-2)解题思路

分析 把x,y坐标拼接成一个字符串&#xff08;x,y&#xff09;作为Set的key&#xff0c;保存到Set中&#xff0c;遍历Set&#xff0c;取出坐标&#xff0c;然后判断上下左右四个点是否在Set中&#xff0c;如果在&#xff0c;进而判断&#xff0c;四个角是否在Set中&#xff0c;…

git学习(创建项目提交代码)

目录 操作步骤如下 1.创建项目 2.初始化项目 3.初始化项目 4.创建一个文本文件将其推送到远程仓库 5.添加到暂存区 查看提交状态 git push 返送到暂存区 git statues 7.提交 8. 返回远程仓库检查是否上传成功 操作步骤如下 git init //初始化git remote add origin ht…

《C缺陷和陷阱》-笔记(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、理解函数声明 1.(*(void(*)( ))0)( ); 2.signal 函数接受两个参数&#xff1a; 3.使用typedef 简化函数声明&#xff1a; 二、运算符的优先级…

uniapp踩坑之项目:uni.previewImage简易版预览单图片

主要使用uni.previewImage //html <view class"box-card" v-for"(item,index) in DataList" :key"index"><view>图片&#xff1a;</view><image :src"item.Path" tap.stop"clickImg(item.Path)">&l…

如何深度学习

信息爆炸时代&#xff0c;诞生了很多新的学习方式&#xff0c;非常轻松就能掌握知识&#xff0c;比如&#xff0c;每天听一本书&#xff0c;半个小时就能学习一本书的精华&#xff0c;比如订阅名家专栏或者课程&#xff0c;在不长的时间内内就能学到很多知识。 很多人认为这样…

HTML5页面布局

1,图文混排布局 img {float: right;}p {font-size: 32px;} <div class"sec"><img src"penguin.png" alt"penguin"><p>With no change in the rule, the more you grow the more envious you be123 123132312...</p> &l…

安全测试工具Burpsuit和OWASP ZAP使用入门指南

Burpsuit使用入门指南 安装&#xff1a; 网上有很多相关相关保姆级别教程&#xff0c;所以这里不加赘述了尽量使用java8版本&#xff0c;破解版兼容8做的比较好如果发现注册机无法打开或者能打开注册机【run】无法点击唤起软件安装&#xff0c;可以使用命令行工具 java -jar …

JavaScript 实现飞机大战

文章目录 一些关键点概览&#xff1a;核心模块的具体实现示例&#xff1a;飞机类&#xff08;Plane&#xff09;的基本结构&#xff1a;子弹类&#xff08;Bullet&#xff09;的基本结构&#xff1a;敌机类&#xff08;Enemy&#xff09;的基本结构&#xff1a; 基于前面定义的…

膜厚测量仪在半导体应用中及其重要

随着科技的不断发展&#xff0c;半导体行业已成为当今世界的核心产业之一。在这个领域中&#xff0c;半导体膜厚测量仪作为关键设备&#xff0c;其精度和可靠性对于产品质量和生产效率具有至关重要的作用。本文将详细介绍半导体膜厚测量仪的工作原理、应用领域以及其在半导体制…

SpringMVC04、Controller 及 RestFul

4、Controller 及 RestFul 4.1、控制器Controller 控制器复杂提供访问应用程序的行为&#xff0c;通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器类可以包含多个方法在Spring MVC中&#xff0c;对于Contr…

GSM8K数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-3-3 先进的语言模型可以在许多任务上与人类表现相媲美&#xff0c;但它们仍然难以执行多步骤数学推理任务。为此OpenAI团队创建了一个高质量、语言多…