JAVA实例

article/2025/8/30 19:53:14

JAVA实例

1. 类(class)与对象(object)
     Class类注释对于Class的定义: Class 类的实例表示正在运行的 Java 应用程序中的类和接口。Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。 可以知道每个class也是特殊的对象,不过是java虚拟机创建。class的获取:

  • 如 Class arrayListClass = ArrayList.class; Q:此处的class是什么(属性?关键字?)
  • public final native Class<?> getClass(); 此方法来源于object
  • 通过类加载器,显式加载类,获取class (显示加载,隐式加载,双亲委派,SPI,自定义classLoader)

类的生命周期
在这里插入图片描述
其中要注意的是 static修饰的成员变量,其生命周期与非static修饰的不同,于此产生的相互访问的限制。还需注意观察反编码后的this关键字。

一个类卸载垃圾回收的条件:
在这里插入图片描述
JSP的热加载,可以参考。

2. 实例生成

  • 使用new关键字 (需要public修饰的构造方法,默认的无参构造会有被覆盖隐藏问题,使用框架时需要注意。也可以通过控制构造方法的访问修饰符,实现单例模式-懒汉|饿汉(双重检查锁)|静态内部类|枚举-。还有lombok插件(Q:编译时对代码修改?))
    Q:访问修饰符可以通过暴力反射绕过,修饰符也代表着约定规则
  • Class类的newInstance方法。
  • Constructor类的newInstance方法
  • clone(实现Cloneable接口)
  • 序列化与反序列化(实现Serializable或Externalizable )(Json与对象的转换,fastJson)

Class类与反射:
     反射相关类在 java.lang.reflect 包中,可以通过class获取定义在类中的相关参数,如 Constructor,Field,Method,WildcardType,annotation等信息,并提供相应的操作,如给field赋值,调用方法。

3. object
object类的方法:
在这里插入图片描述
主要为:克隆,垃圾回收,获取class,equals与hash和toString,线程唤醒等待

根据《深入理解java虚拟机》:
在这里插入图片描述
需要注意的是(无锁,偏向锁,轻量级锁,重量级锁。自旋锁,悲观锁,乐观锁,注意与mysql中的结合理解)
synchronized与对象锁,类锁

实例对象与堆: jvm规范: 栈、堆、方法区(1.8改为元数据区)

  • 栈: 每个线程一个栈,方法的调用即栈帧的创建销毁。尾递归的栈优化

  • 堆:几乎所有的对象在此分配(JIT编译器、逃逸分析技术,采用栈上分配和标量替换优化技术,使得对象不局限于堆)。heap为垃圾收集的主要区域,故称“GC堆”,从GC回收角度可分为,新生代(1/3)、老年代(2/3),新生代细分为Eden、FromSurvival、ToSurvival(8:1:1)
    关于对象实例化时内存的分配:
    指针碰撞(内存规整适用,GC采用带compact的,如serial,parnew)。
    空闲列表(GC:cms这种基于mark-sweep)。多线程,内存分配指针移动,多线程问题:1.TABL(对象创建在线程相关内存块上,同时共享,解决分配时的冲突) 2.CAS配上失败重试保证更新原子性(频繁冲突会降低性能)。

  • 方法区
    存放:被虚拟机加载的 类信息、常量、静态变量、及时编译器编译后的代码。

对象在jvm中的存活时间是不一样的,并且差异大。根据存活时间进行位置分配,并采用相应的回收策略,由此产生的存储区域或连续,或分散,对象在分配内存区域时采用不同的方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/GB1KLtZq.shtml

相关文章

CH2-Java编程基础(7个案例实现)

【案例2-1】 库房出入货物程序设计 【案例介绍】 任务描述 ​ 现要对华为和小米两种手机产品进行入库&#xff0c;本案例要求编写一个模拟商品入库的程序&#xff0c;可以在控制台输入入库商品的数量&#xff0c;最后打印出仓库中所有商品详细信息以及所有商品的总库存数和库…

SQL关键字模糊查询

在对应的需要模糊查询的字段前将去除 改为like %${et.questionContent}%即可 本例中用et.questionContent举例

SQL模糊查询(Like, Regexp)

先创建一张表 drop table if exists samplelike; CREATE TABLE samplelike ( strcol VARCHAR(6) NOT NULL PRIMARY KEY); -- DML &#xff1a;插入数据 START TRANSACTION; -- 开始事务 INSERT INTO samplelike (strcol) VALUES (abcddd); INSERT INTO samplelike (strcol) VA…

sql模糊查询like并使用concat拼接

模糊查询insure_company&#xff0c;左起0104开头&#xff0c;右边模糊匹配。&#xff08;like 搭配%表示模糊匹配&#xff0c;concat拼接&#xff09;&#xff0c;claim_date同。 放入mapper.xml文件中时&#xff0c;只需用#{ 参数名 } 代替sql查询中的具体数据即可。

mysql 模糊查询时间段_关于SQL模糊查询日期时间的方法

展开全部 有以下三种方法&#xff1a; 1、Convert转成String&#xff0c;在用Like查询 select * from table1 where convert(varchar,yourtime,120) like 2017-06-30% 2、Between select * from table1 where yourtime between 2017-06-30 0:00:00 and 2017-06-30 24:59:59…

SQL 模糊查询后按匹配度排序 CASE WHEN THEN

表如下&#xff1a; SELECT * FROM "table1" where name like %玉米% 很明显这个会返回所有的行&#xff0c;因为每行都满足条件 若我想在模糊查询后&#xff0c;进行排序&#xff0c;完全匹配的放在最前面&#xff0c;其余的放后面&#xff0c;可以使用case…

动态SQL 模糊查询 联表查询

1. 正文 1. set标签 和 foreach标签 trim标签 sql片段 2. mybatis映射文件处理特殊字符. 3. mybatis完成模糊查询。 4. 联表查询 2. 动态sql 2.1 set标签 这个配合if标签一起用&#xff0c;一般用在修改语句。如果传递的参数值为null&#xff0c;那么应该不修改该列的值…

动态sql模糊查询和分页

文章目录 动态sql模糊查询查询返回结果集的处理分页 动态sql BookMapper xml bookservice 测试&#xff1a; MapperSql.test 运行&#xff1a; 模糊查询 BookMapper BookMapper.xml Bookservice StringUtiles 测试&#xff1a; 一共介绍了三种模糊查询的方法&#…

每日一课 | SQL模糊查找

07. SQL模糊查找 大家好&#xff0c;我是小C&#xff0c;上期给大家分享——通过查询条件实现数据过滤&#xff08;完结篇&#xff09; 本期分享内容&#xff1a;SQL模糊查找 本期小C邀请的是董旭阳老师&#xff08;资深数据库架构师&#xff09;为我们分享《SQL从入门到精通》…

设置 MYSQL 数据库编码为 utf8mb4

utf-8编码可能2个字节、3个字节、4个字节的字符&#xff0c;但是MySQL的utf8编码只支持3字节的数据&#xff0c;而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据&#xff0c;java程序中将报SQL异常&#xff1a; java.sql.SQLException: Inc…

utf8mb4 字符集(4字节 UTF-8 Unicode 编码)

最近做项目遇到APP评论中有 emoji 表情符号&#xff0c;结果导致插入 MySQL 数据库失败&#xff0c;找到 MySQL 官方相关内容&#xff0c;这里斗胆翻译一下。在翻译过程中有些不明白的地方&#xff0c;如BMP、collation等&#xff0c;都找到官方文档&#xff0c;给出了链接&…

UTF-8编码详解

1.ASCII编码 因为计算机只能处理数字&#xff0c;如果要处理文本&#xff0c;就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特&#xff08;bit&#xff09;作为一个字节&#xff08;byte&#xff09;&#xff0c;所 以&#xff0c;一个字节能表示的最大的…

mysql中的utf8与utf8mb4

一、如何设置utf8mb4 mysql中针对字符串类型&#xff0c;在设置charset的时候可以精确到字段。 如果只将某个字段设置utf8mb4&#xff0c;那么其他字段不会受影响。 如果针对表来设置&#xff0c;那么已经存在的字段依然是utf8&#xff0c;并且会多出utf8的标记&#xff0c;…

What is UTF-8?

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请点击人工智能教程 UTF-8 is a variable-width character encoding standard that uses between one and four eight-bit bytes to re…

图解unicode、utf8和utf8mb4

字符集和字符编码 字符集&#xff08;CCS: Coded Character Set&#xff09;&#xff1a; 就是一个表格&#xff0c;表示每个字符对应数字&#xff08;通常用16进制表示&#xff09;&#xff0c;比如unicode字符集中&#xff0c;数字1对应的就是U00031&#xff0c;字母a对应的…

UTF-8

UTF-8编码规则 UTF-8是Unicode的一种实现方式&#xff0c;也就是它的字节结构有特殊要求&#xff0c;所以我们说一个汉字的范围是0X4E00到0x9FA5&#xff0c;是指unicode值&#xff0c;至于放在utf-8的编码里去就是由三个字节来组织&#xff0c;所以可以看出unicode是给出一个…

MySQL 数据库字符集 utf8 和 utf8mb4 的区别

MySQL 的 utf8 实际上不是真正的 UTF-8。utf8 只支持每个字符最多三个字节&#xff0c;而真正的 UTF-8 是每个字符最多四个字节。 MySQL 一直没有修复这个 bug&#xff0c;他们在 2010 年发布了一个叫作 utf8mb4 的字符集&#xff0c; 绕过了这个问题。当然&#xff0c;他们并…

utf8和utf8mb4的区别

1. 基础知识 1.1 bit &#xff0c; byte &#xff0c; word 字 word 字节 byte (B) 位 bit (b) 1.2 单位换算 1字节 8位(1 byte 8bit) 1字 2字节(1 word 2 byte) 一个汉字 2字节 中文标点 三个字节 一个英文字母 一个字节 英文标点 一个字节 Em…

简单明了!utf8和utf8mb4的区别

一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码&#xff0c;mb4就是most bytes 4的意思&#xff0c;专门用来兼容四字节的unicode。utf8mb4是utf8 的超集&#xff0c;除了将编码改为utf8mb4外不需要做其他转换。当然&#xff0c;为了节省空间&#xff0c;一般情况下使用u…

浅谈uf8mb4字符集

要在 Mysql 中保存 4 字节长度的 UTF-8 字符&#xff0c;需要使用 utf8mb4 字符集&#xff08;mb4就是most bytes 4的意思&#xff0c;专门用来兼容四字节的unicode&#xff09;&#xff0c;但只有 5.5.3 版本以后的才支持。 为了获取更好的兼容性&#xff0c;应该总是使用 utf…