Java Class类简介

一、类图:

二、基本介绍

1. Class也是类,因此也继承了Object类
2. Class类的对象不是new出来的,是系统创建的
类加载器ClassLoader有个方法LoadClass(),将某个类对应的Class对象生成在堆中。
通过调试可以发现:
传统方法new一个类的时候,调用了loadClass()方法
使用反射,也是调用loadClass()方法
3.对于某个类的Class类对象,在内存中只有一份,因为类只加载一次。(加载过程中用loadClass()方法创建)
4.每个类的实例,都会与自己类的Class对象(实例)相关联
也就是说一个类不管实例化多少对象,这些对象都和这个类的Class对象相关联
5.通过Class对象可以完整地得到一个类的完整结构,调用相应的API
6.Class对象是存放在堆当中的。
7.类的字节码二进制数据,是存放在方法区的。有的地方称为类的元数据(包括 方法代码、变量名、方法名、访问权限等)
类加载之后,除了在 堆中生成Class对象 ,还会 在方法区中生成一个该类的字节码二进制数据
详情: hotpot java虚拟机Class对象是放在 方法区 还是堆中 ? - 知乎

三、常用方法

//获取Class类对象,?表示不确定的类型
Class<?> aClass = Class.forName("Class_.Cat");
//1.显示aClass对象是哪个类的对象 结果为Class_.Cat
System.out.println(aClass);
//2.显示aclass的运行类型 结果为java.long.Class
System.out.println(aClass.getClass());
//3.显示aclass类对象所属的类的包名 结果为Class_
System.out.println(aClass.getPackage().getName());
//4.得到完整类名 结果为Class_.Cat
System.out.println(aClass.getName());
//5.生成对象实例
Object o = aClass.newInstance();
//6.得到该类的某个属性(此处仅能调用共有属性) 在Cat中name默认为小米,所以输出小米
Field name = aClass.getField("name");
System.out.println(name.get(o));
//7.给属性赋值 因为重新赋值小红,所以输出小红。
name.set(o,"小红");
System.out.println(name.get(o));
//8.获取所有属性
Field[] fields = aClass.getFields();
for (int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName());
}

四、获取Class类对象的方法

在三个阶段有不同的获取方法:
1.编译阶段:Class.forName()
2.加载阶段:类.class
3.运行阶段: 对象.getClass()
4.也可以通过 类加载器ClassLoader得到某个类的Class对象。
//1.getName()
// 多用于配置文件,读取类全路径,加载类
Class<?> aClass = Class.forName("Class_.Cat");
System.out.println(aClass);//2.通过.class获取,该方法最安全可靠,性能最高
// 多用于参数传递,比如通过反射得到对应构造器对象
System.out.println(Cat.class);//3.通过该类的对象的.getClass()方法获得
// 多用于通过创建好的对象获取Class对象
Cat cat = new Cat();
System.out.println(cat.getClass());//4.通过类加载器(有四种加载器)得到Class对象
ClassLoader classLoader = cat.getClass().getClassLoader();
Class<?> aClass1 = classLoader.loadClass("Class_.Cat");
System.out.println(aClass1);//5.基本数据类型(int,char,boolean,float,double,byte,long,short)可以
//通过 Class cls = 基本数据类型.class
Class<Integer> integerClass = int.class;
System.out.println(integerClass);//6.基本数据类型对应的包装类可以通过.TYPE 得到Class对象
Class<Integer> type = Integer.TYPE;
System.out.println(type);

五、哪些类型有Class对象

1.外部类,成员内部类,静态内部类,局部内部类,匿名内部类
2.interface:接口
3.数组
4.enum:枚举
5.annotation:注解
6.基本数据类型
7.void
System.out.println(Integer.class);//外部类
System.out.println(Serializable.class);//接口
System.out.println(Integer[].class);//数组
System.out.println(Deprecated.class);//注解
System.out.println(Thread.State.class);//枚举
System.out.println(int.class);//基本数据类型
System.out.println(void.class);//void
System.out.println(Class.class);//Class自身
六、动态加载和静态加载
基本说明:
反射机制是Java实现动态语言的关键,通过反射实现类动态加载。
1. 静态加载:编译时加载相关的类,如果没有就报错,依赖性强。
2. 动态加载:运行时加载需要的类,如果运行时不用该类,则不报错(该类不存在或有其他问题),降低依赖性。

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

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

相关文章

Linux静态库、共享动态库介绍、制作及使用

参考学习&#xff1a;Linux下的各种文件 、动态库基本原理和使用方法&#xff0c;-fPIC选项的来龙去脉 、Linux静态库和动态库分析 文章写作参考&#xff1a;Linux共享库、静态库、动态库详解 - sunsky303 - 博客园 (cnblogs.com) 一.Linux共享库、静态库、动态库详解 使用G…

ResNet 原理剖析以及代码复现

原理 ResNet 解决了什么问题&#xff1f; 一言以蔽之&#xff1a;解决了深度的神经网络难以训练的问题。 具体的说&#xff0c;理论上神经网络的深度越深&#xff0c;其训练效果应该越好&#xff0c;但实际上并非如此&#xff0c;层数越深会导致越差的结果并且容易产生梯度爆炸…

市场巨变,移动开发行业即将迎来“第二春”?

随着鸿蒙生态的不断壮大&#xff0c;越来越多的企业开始加入其中&#xff0c;对鸿蒙OS开发工程师的需求也越来越迫切。 年初时还只有200个APP宣布加入鸿蒙生态&#xff0c;而最近华为也已经官宣&#xff0c;已经有4000多个应用加入鸿蒙&#xff0c;短短三个月就增加了20倍。 …

【Python】解决Python报错:TypeError: ‘xxx‘ object does not support item assignment

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

Monaco-Editor在Vue中使用(实现代码编辑与diff代码比较)--类似vscode代码编辑器

Monaco-Editor 是一个由 Microsoft 开发的 Web 代码编辑器&#xff0c;它是 Visual Studio Code 的浏览器版本。在 Vue 项目中集成 Monaco-Editor 可以提供代码编辑、语法高亮、智能提示等功能 效果&#xff1a; 1、安装使用&#xff0c;最好安装指定版本&#xff0c;我是 vue…

六西格玛项目课题决策权归属:谁来做主更明智?

在实施六西格玛的过程中&#xff0c;一个关键的问题摆在了我们面前&#xff1a;应该由谁决定六西格玛的项目课题&#xff1f;这个问题不仅关系到项目能否顺利实施&#xff0c;更直接影响到企业整体绩效的提升。深圳天行健企业管理咨询公司解析如下&#xff1a; 首先&#xff0…

cocos creator 3.x 手搓背包拖拽装备

项目背景&#xff1a; 游戏背包 需要手动 拖拽游戏装备到 装备卡槽中&#xff0c;看了下网上资料很少。手搓了一个下午搞定&#xff0c;现在来记录下实现步骤&#xff1b; 功能拆分&#xff1a; 一个完整需求&#xff0c;我们一般会把它拆分成 几个小步骤分别造零件。等都造好了…

openresty(Nginx) 隐藏 软件包名称 版本号 升级新版本

1 访问错误或者异常的URL 2 修改配置&#xff0c;重新编译&#xff0c;升级 #修改版本等 vim ./bundle/nginx-1.13.6/src/core/nginx.h #define nginx_version 1013006 #define NGINX_VERSION "1.13.6" #define NGINX_VER "openresty/&q…

计算机网络学习笔记——应用层

一、应用层概述 二、客户/服务器方式(C/S方式)和对等方式(P2P方式) 客户/服务器(Client/Server&#xff0c;C/S)方式 服务器总是处于运行状态&#xff0c;并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80)&#xff0c;而运行服务器的主机也具有固…

UVa11604 General Sultan

UVa11604 General Sultan 题目链接题意分析AC 代码 题目链接 UVA - 11604 General Sultan 题意 给出一些0和1组成的模式串&#xff0c;问是否存在一个串使得有多种方案将这个串分解成模式串。    给一个包含n&#xff08;n≤100&#xff09;个符号的二进制编码方式&#xff…

自学SPSS,有哪些教学视频或书籍推荐?

书籍推荐 经过长达八年的不断迭代与优化&#xff0c;SPSSAU的用户群体已经远超简单的数据分析层面&#xff0c;而是逐步深入到了学术研究的精髓之中。如今&#xff0c;无论是在SCI、EI等国际权威学术期刊&#xff0c;还是北大核心期刊、CSSCI等国内顶尖学术期刊上&#xff0c;…

leetCode.87. 扰乱字符串

leetCode.87. 扰乱字符串 题目思路&#xff08;该方法以前可以过&#xff0c;现在对时间复杂度的要求严格了许多&#xff0c;不能过去&#xff09;&#xff1a; 这里显示&#xff0c;能够让我自己后期复习的时候&#xff0c;可以掌握最基本的做法&#xff08;尽管不能通过全部样…

wangEditor富文本实现自定义插入数据(手把手)

插件版本如下: vue2版本 “@wangeditor/editor”: “^5.1.23”, “@wangeditor/editor-for-vue”: “^1.0.2”, 文件截图如下: 一、plugins/index.js 入口文件,整合模块导出外部使用 import withMention from ./plugin import renderElemConf from ./render-elem import …

重庆耶非凡科技选品师项目大揭秘:成功背后的故事与经验

在电商行业迅猛发展的今天&#xff0c;选品师这一职业愈发受到市场的关注。重庆耶非凡科技有限公司凭借其专业的选品团队和科学的选品方法&#xff0c;成为众多商家关注的焦点。那么&#xff0c;该公司的选品师项目是否真的有成功的案例呢?接下来&#xff0c;我们将从多个角度…

深度学习——卷积神经网络

卷积神经网络 1.导入需要的包2.数据导入与数据观察3.卷积层4.汇聚层最大汇聚 平均汇聚全局平均汇聚 5.搭建卷积神经网络进行手写数字识别导入并对数据进行预处理搭建卷积神经网络 6.利用函数式API与子类API搭建复杂神经网络残差层 1.导入需要的包 numpy as np: NumPy是一个用于…

Pytorch深度学习实践笔记4(b站刘二大人)

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 视频来自【b站刘二大人】 1 反向传播 Back propaga…

FFMPEG+ANativeWinodow渲染播放视频

前言 学习音视频开发&#xff0c;入门基本都得学FFMPEG&#xff0c;按照目前互联网上流传的学习路线&#xff0c;FFMPEGANativeWinodow渲染播放视频属于是第一关卡的Boss&#xff0c;简单但是关键。这几天写了个简单的demo&#xff0c;可以比较稳定进行渲染播放&#xff0c;便…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中&#xff0c;你可以使用以下几种方法来查看当前被占用的端口&#xff0c;并检查 7860 到 7870 之间的端口&#xff1a; 推荐命令&#xff1a; sudo lsof -i :7860-7870方法一&#xff1a;使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

全球痛风年轻化趋势明显 别嘌醇制剂需求增多

全球痛风年轻化趋势明显 别嘌醇制剂需求增多 别嘌醇制剂包括片剂和缓释胶囊两种剂型&#xff0c;别嘌醇片剂吸收快&#xff0c;可能会出现胃肠道反应&#xff1b;别嘌醇缓释胶囊释放比较缓慢&#xff0c;作用更持久&#xff0c;对胃肠道损害比较小。别嘌醇制剂是抑制尿酸合成的…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域&#xff0c;如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享 &#xff1a; 堆方法区直接内…