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. 动态加载:运行时加载需要的类,如果运行时不用该类,则不报错(该类不存在或有其他问题),降低依赖性。
        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录-Day23

669. 修剪二叉搜索树 方法一&#xff1a;递归 class Solution {public TreeNode trimBST(TreeNode root, int low, int high) {if (root null) {return null;}if (root.val < low) {return trimBST(root.right, low, high);} else if (root.val > high) {return trimBS…

python基础-数据结构-leetcode刷题必看-queue---队列-python的底层构建

文章目录 队列双端队列 deque底层存储deque接口1. __init__(self, iterable: Iterable[_T], maxlen: int | None None) -> None2. append(self, __x: _T) -> None3. appendleft(self, __x: _T) -> None4. copy(self) -> Self5. count(self, __x: _T) -> int6. …

GoFly框架快速新增接口/上手写代码

拿到一个新框架大家可能无从下手&#xff0c;因为你对框架设计思路、结构不了解&#xff0c;从而产生恐惧&#xff0c;所以我们框架是通过简单可视化界面安装&#xff0c;安装后即可看到效果&#xff0c;然后点击先点点看各个功能&#xff0c;看现有的功能是怎么写的&#xff0…

怎样清理Mac存储空间 苹果电脑内存不够用怎么办 苹果电脑内存满了怎么清理

在使用 Mac 电脑的过程中&#xff0c;用户经常会遇到磁盘空间不足的困扰&#xff0c;这时候就需要寻找有效的方法来清理苹果电脑内存了。 清理Mac存储空间可以通过多种方法进行&#xff0c;以确保你的Mac能够高效运行并释放宝贵的存储空间。以下是一些有效的清理和优化方法&am…

swift 自定义扫码功能

使用功能​​​​​​​ 1. 调用扫码功能&#xff08;扫描二维码/条形码、图片识别二维码/条形码、生成二维码/条形码&#xff09; 2. 自定义扫码界面UI&#xff08;继承式自定义修改样式&#xff0c;完全自定义调用封装组件&#xff09; 3. 生成二维码/条形码 源码地址&#x…

Parquet使用指南:一个超越CSV、提升数据处理效率的存储格式

前言 在大数据时代&#xff0c;数据存储和处理的效率越来越重要。同时&#xff0c;我们在工作中处理的数据也越来越多&#xff0c;从excel格式到csv格式&#xff0c;从文件文档传输到直接从数据库提取&#xff0c;数据单位也从K到M再到G。 当数据量达到了G以上&#xff0c;几…

串口通信问题排查总结

串口通信问题排查 排查原则&#xff1a; 软件从发送处理到接收处理&#xff0c;核查驱动、控制及发送接收数据是否正常。硬件从发送到接收&#xff0c;针对信号经过的各段&#xff0c;分段核对信号是否正常。示波器、逻辑分析仪。用万用表、示波器、逻辑分析仪等工具&#xf…

Hadoop3:MapReduce之简介、WordCount案例源码阅读、简单功能开发

一、概念 MapReduce是一个 分布式运算程序 的编程框架&#xff0c;是用户开发“基于 Hadoop的数据分析 应用”的核心框架。 MapReduce核心功能是将 用户编写的业务逻辑代码 和 自带默认组件 整合成一个完整的 分布式运算程序 &#xff0c;并发运行在一个 Hadoop集群上。 1、M…

【高频】redis快的原因

相关问题&#xff1a; 1.为什么Redis能够如此快速地进行数据存储和检索&#xff1f; 2.Redis作为内存数据库,其内存存储有什么优势吗? 3.Redis的网络模型有何特点,如何帮助提升性能? 一、问题回答 Redis使用了内存数据结构&#xff0c;例如字符串、哈希表、列表、集合、有…

pycharm中,出现SyntaxError: Non-ASCII character ‘\xe4‘ in file... 的问题以及解决方法

文章目录 一、问题描述二、解决方法 一、问题描述 在pycharm中&#xff0c;使用python中编写中文字符时&#xff0c;会提示如下错误信息&#xff1a; SyntaxError: Non-ASCII character \xe4 in file ...... on line 8, but no encoding declared; see http://python.org/dev…

TypeScript-初识

TypeScript 是具有类型语法的JavaScript&#xff0c;是一门强类型的编程语言 变量不能做随意类型赋值 好处&#xff1a; 1️⃣ 静态类型检查&#xff0c;提前发现代码错误 function arrToStr(arr: Array<string>){return arr.join() } arrToStr(123) // 类型“stri…

网页版应用授权的核心难点

Web应用的出现 随着数字化时代发展&#xff0c;越来越多的企业开始关注工业软件上云。这种趋势不仅满足了企业对于提高生产效率、降低运维成本的需求&#xff0c;还帮助企业更好地应对市场竞争、实现产业升级和智能制造。 在软件上云的过程中&#xff0c;会产生新产品形态和新…

2024 京麟ctf -MazeCodeV1

文章目录 检查代码思路一个字节的指令注意附上S1uM4i佬们的exp https://www.ctfiot.com/184181.html 检查 代码 __int64 __fastcall check_solve(char *a1) {__int64 result; // rax__int64 v2; // rax__int64 index_step; // rax__int64 v4; // rax__int64 v5; // rax__int64…

贪心(临项交换)+01背包,蓝桥云课 搬砖

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0搬砖 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 将物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面证明&#xff1a;&#xff08;不要问怎么想到的&#xff0c;做题多了就能想到&#xff…

一致性hash算法原理图和负载均衡原理-urlhash与least_conn案例

一. 一致性hash算法原理图 4台服务器计算hash值图解 减少一台服务3台服务器计算hash值图解 增加一台服务器5台服务器计算hash值图解 二. 负载均衡原理-urlhash与least_conn 2.1.urlhash案例 # urlhash upstream tomcats {hash $requ

5分钟教你APP变现,让商业浪潮为你助力!

在这个数字时代&#xff0c;几乎每个人都有一个或多个应用程序&#xff08;APP&#xff09;的想法&#xff0c;它们可能是为了解决特定问题&#xff0c;提供娱乐或简化日常任务。然而&#xff0c;许多开发者面临的最大挑战之一是如何将这些创意转化为盈利的商业模式。本文将探讨…

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…

基于GO 写的一款 GUI 工具,M3u8视频下载播放器-飞鸟视频助手

M3u8视频下载播放器-飞鸟视频助手 M3u8视频飞鸟视频助手使用m3u8下载m3u8 本地播放 软件下载地址m3u8嗅探 M3u8视频 M3u8视频格式是为网络视频播放设计&#xff0c;视频网站多数采用 m3u8格式。如腾讯&#xff0c;爱奇艺等网站。 m3u8和 mp4的区别&#xff1a; 一个 mp4是一个…

HTTP Basic Access Authentication Schema

HTTP Basic Access Authentication Schema 背景介绍流程安全缺陷参考 背景 本文内容大多基于网上其他参考文章及资料整理后所得&#xff0c;并非原创&#xff0c;目的是为了需要时方便查看。 介绍 HTTP Basic Access Authentication Schema&#xff0c;HTTP 基本访问认证模式…

JavaScript-JavaWeb

目录 什么是JavaScript? js引入方式 js基础语法 书写语法 变量 数据据类型 运算符 类型转换 流程语句 js函数 js对象 1.Array 2.String 3.JSON js事件监听 什么是JavaScript? ● JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能…