韩顺平0基础学java——第36天

news2024/9/22 13:32:51

p715-735

反射调用速度慢

反射调用优化-关闭访问检查
1. Method和Field、Constructor对象都有setAccessible()

方法2. setAccessible作用是启动和禁用访问安全检查的开关
3.参数值为true表示反射的对象在使用时取消访问检查,提高反射的效率。参数值
为false则表示反射的对象执行访问检查

Class类

1.Class也是类,因此也继承Object类
2. Class类对象不是new出来的,而是系统创建的
3.对于某个类的Class类对象,在内存中只有一份,因为类只加载一次

4.每个类的实例都会记得自己是由哪个Class 实例所生成
5.通过Class可以完整地得到一个类的完整结构,通过一系列API

6. Class对象是存放在堆的
7.类的字节码二进制数据,是放在方法区的,有的地方称为类的元数据(包括方法代码,变量名,方法名,访问权限等等)

意思是一个在内存,一个在磁盘

获取Class对象

GetClass_.java
1.前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException,实例: Class cls1 =Class.forName( "java.lang.Cat" );
应用场景:多用于配置文件,读取类全路径,加载类.
2.前提:若已知具体的类,通过类的class 获取,该方式最为安全可靠,程序性能最高

实例: Class cls2 = Cat.class;
应用场景:多用于参数传递,比如通过反射得到对应构造器对象.

3.前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象,实例:
Class clazz =对象.getClass():;//运行类型
应用场景:通过创建好的对象,获取Class对象.
4、其他方式
ClassLoader cl =对象.getClass().getClassLoader);Class clazz4 = cl.loadClass(“类的全类名”);
5.基本数据(int, char,boolean,float,double,byte,long,short)按如下方式得到Class类
对象
Class cls=基本数据类型.class
6.基本数据类型对应的包装类,可以通过.TYPE得到Class类对象
Class cls =包装类.TYPE

哪些类有class对象

8.Class类自己也有

9.线程

类加载

三个阶段

1.加载:将类的class文件读入内存,并为之创建一个java.lang.Class对象,此过程由类加载器完成

2.连接:将类的二进制数据合并到JRE

        验证:对文件的安全性进行校验

        准备:对静态变量进行默认初始化并分配空间

        解析:把符号引用转化成直接引用(GPT的解释)

                符号引用:

符号引用是一种间接引用方法,其中使用符号(如变量名、函数名或标签)来访问内存中的数据或代码。编译器或解释器会将这些符号解析为具体的内存地址或指令地址。

  • 特性

    • 抽象性:符号引用提供了一种更高层次的抽象,使程序员可以使用易读的名字而不是具体的内存地址。
    • 灵活性:符号引用允许编译器和链接器在编译时和链接时进行优化和地址重定位。
    • 安全性:通过使用符号,程序员可以避免直接操作内存地址,减少出错的机会。

                直接引用:

直接引用是一种直接通过内存地址访问数据的方法。也就是说,代码中使用的地址是实际的内存地址,这通常出现在低级编程(如汇编语言)或特定的优化场景中。

  • 特性

    • 高效性:直接引用通常比符号引用更高效,因为它省去了解析符号的步骤。
    • 风险性:直接操作内存地址容易导致错误,如内存越界、段错误等,因此需要程序员小心处理。
    • 不灵活:由于使用的是硬编码的内存地址,代码的可移植性和可维护性较差。

3.初始化:jvm负责对类进行初始化,这里主要是指静态成员

注意,这里是指类加载,不是创建对象!!

详细说明

1加载

JVM在该阶段的主要目的是将字节码从不同的数据源(可能是 class文件、也可能是jar包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的java.lang.Class 对象

2.1连接-验证:

1.目的是为了确保Class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不
会危害虚拟机自身的安全。
·2.包括:文件格式验证(是否以魔数oxcafebabe开头)、元数据验证、字节码验证和
符号引用验证
3.可以考虑使用-Xverify:none 参数来关闭大部分的类验证措施,缩短虚拟机类加载
的时间。
 

2.2连接-准备:

 JVM 会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始
值,如0、OL、null、false 等)。这些变量所使用的内存都将在方法区中进行分配

2.3连接-解析

虚拟机将常量池中的符号引用替换为直接引用的过程

3.初始化

1.到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行<clinit>()方法的过程。
2. <clinit>()方法是由编译器按语句在源文件中出现的顺序,依次自动收集类中的所有
静态变量的赋值动作和静态代码块中的语句,并进行合并。
3.虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确地加锁、同步,如果
多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的<clinit>()方法,其他线程都需要阻塞等待,直到活动线程执行<clinit>()方法完毕

通过反射获取类的结构信息

通过反射创建对象

1.方式一:调用类中的public修饰的无参构造器

2.方式二:调用类中的指定构造器

3. Class类相关方法
 newlnstance:调用类中的无参构造器,获取对应类的对象
 getConstructor(Class...clazz):根据参数列表,获取对应的构造器对象
getDecalaredConstructor(Class...clazz):根据参数列表,获取对应的构造器对象

4.Constructor类相关方法
-setAccessible:暴破
- newlnstance(Object...obj):调用构造器

通过反射访问类中的成员

MySql安装

配置文件:

管理员运行cmd后进入到sql的文件夹下:

cd /D path

安装成功了!明天来吧

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

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

相关文章

Redis核心技术与实战学习笔记

Redis核心技术与实战学习笔记 最近想沉下心来看下redis&#xff0c;买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋&#xff0c;可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …

2024-07-22 Unity AI行为树1 —— 框架介绍

文章目录 1 行为树2 行为树驱动方式3 行为树结点分类3.1 控制节点3.2 执行节点 4 行为树与状态机比较 本文章参考 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 行为树 ​ 行为树&#xff08;Behavior Tree&#xff0c;BT&#xff09;在游戏 AI 中是一种用于控制…

精益管理意识与企业战略规划的匹配度如何评估?

众所周知&#xff0c;精益管理不仅要求企业在生产运营过程中实现资源的最大化利用&#xff0c;同时也强调企业战略规划的精准性和前瞻性。因此&#xff0c;评估精益管理意识与企业战略规划的匹配度&#xff0c;对于企业的长期发展至关重要。具体方法如深圳天行健企业管理咨询公…

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.4数据架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

hamcrest 断言框架使用示例和优势分析

引言 在软件测试领域&#xff0c;断言是验证代码行为是否符合预期的关键环节。Hamcrest 断言框架&#xff0c;以其独特的匹配器&#xff08;Matcher&#xff09;概念和清晰的失败信息&#xff0c;赢得了广泛的赞誉。尽管 Python 标准库中没有内置的 Hamcrest 库&#xff0c;但…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…

开局一个启动器:从零开始入坑ComfyUI

前几天刷某乎的时候看到了一位大佬写的好文&#xff0c;可图 IP-Adapter 模型已开源&#xff0c;更多玩法&#xff0c;更强生态&#xff01; - 知乎 (zhihu.com) 久闻ComfyUI大名&#xff0c;决定试一下。这次打算不走寻常路&#xff0c;不下载现成的一键包了&#xff0c;而是…

矩估计与最大似然估计的通俗理解

点估计与区间估计 矩估计与最大似然估计都属于点估计&#xff0c;也就是估计出来的结果是一个具体的值。对比区间估计&#xff0c;通过样本得出的估计值是一个范围区间。例如估计一个人的年龄&#xff0c;点估计就是最终直接估计年龄为50岁&#xff0c;而区间估计是最终估计的…

Qt源码交叉编译带openssl的Qt版本

一.背景 近期项目由于对接的后台服务是https的&#xff0c;之前交叉编译的Qt是不带openssl的&#xff0c;为了能支持https&#xff0c;必须要重新编译Qt。 二.环境 环境准备&#xff1a; Ubuntu版本 &#xff1a;18.04&#xff1b; openssl 版本&#xff1a;1.1.1.g&#xff1b…

go-kratos 学习笔记(5) 删除hellword从新生成服务

go-kratos 删除hellword模版里的服务&#xff0c;从新生成服务users 直接删除api/helloword 目录&#xff0c;在api目录下新建 users目录&#xff1b;使用命令生成新的proto #项目根目录执行 kratos proto add api/users/user.protobuf generate生成的user.proto需要根据自己…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用&#xff0c;不同环境、场景及应用合适光源都不一样&#xff0c;今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线&#xff0c;为提高生产效率做出贡献。 TH2系列光源的特点&#xff1a; 1、实现了更高一级的高亮度 实现了更…

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包&#xff0c;适用于 Debian 和 Ubuntu 系统&#xff1a; curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

Doris全方位教程+应用实例

Impala性能稍领先于presto,但是presto在数据源支持上非常丰富&#xff0c;包括hive、图数据库、传统关系型数据库、Redis等 缺点&#xff1a;这两种对hbase支持的都不好&#xff0c;presto 不支持&#xff0c;但是对hdfs、hive兼容性很好&#xff0c;其实这也是顺理成章的&…

单片机学习(18)--红外遥控器

红外遥控器 17.1红外遥控的基础知识1.红外遥控简介2.硬件电路3.基本发送和接收4.NEC编码5.遥控器键码6.51单片机的外部中断7.外部中断寄存器 17.2红外遥控的程序代码1.红外遥控&#xff08;1&#xff09;工程目录&#xff08;2&#xff09;main.c函数&#xff08;3&#xff09;…

ubuntu在命令行输出里查找内容,dmesg

直接执行查看日志指令会出来很多页。dmesg为开机日志信息。记录了开机时硬件的过程 sudo dmesg 执行结果&#xff1a; 可以用竖号“|”&#xff0c;在前一条命令返回的内容进行查找。下图为查找bluetooth sudo dmesg |grep -i bluetooth

ufw命令简介

正文共&#xff1a;3999 字 41 图&#xff0c;预估阅读时间&#xff1a;4 分钟 我们之前在CentOS系统中研究了iptables命令的使用方法&#xff08;iptables命令简介&#xff09;&#xff0c;还做了简单的应用实验&#xff08;如何通过iptables配置URL过滤黑名单&#xff1f;、如…

DevExpress WinForms自动表单布局,创建高度可定制用户体验(二)

使用DevExpress WinForms的表单布局组件可以创建高度可定制的应用程序用户体验&#xff0c;从自动安排UI控件到按比例调整大小&#xff0c;DevExpress布局和数据布局控件都可以让您消除与基于像素表单设计相关的麻烦。 P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&a…

LeetCode:删除排序链表中的重复元素(C语言)

1、问题概述&#xff1a;给定一个已排序链表的头&#xff0c;删除重复元素&#xff0c;返回已排序的链表 2、示例 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&#xff1a;[1,2,3] 3…

【Python】一文向您详细介绍 K-means 算法

【Python】一文向您详细介绍 K-means 算法 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff…