当前位置: 首页 > news >正文

Java基础回顾(1)

目录

基本类型:

包装器类型:

128陷阱:

现象描述:

示例代码:

原因分析:

Integer缓存机制:

对象比较:

解决方法:

String

关键字

抽象类和接口

Object类

反射

代理


基本类型:

整型:int short byte long——长度不同,精度不同
浮点型:float double
boolean
char

包装器类型:

每一个基本类型都有对应的包装类型
Integer——自动装箱、拆箱:javac编译器会帮助我们自动装箱,拆箱
自动装箱:Java编译器会自动将基本数据类型转换为对应的包装类型。
自动拆箱:Java编译器会自动将包装类型转换为对应的基本数据类型。

128陷阱:

现象描述:

当使用==比较两个Integer对象时,如果这两个对象的值在-128到127之间(包括-128和127),则比较结果为true。
如果这两个对象的值超出这个范围,则比较结果为false,即使它们的数值相同。

示例代码:

public class IntegerTrap { public static void main(String[] args) { Integer num1 = 127; Integer num2 = 127; System.out.println(num1 == num2); // 输出 true Integer num3 = 128; Integer num4 = 128; System.out.println(num3 == num4); // 输出 false } }

原因分析:

Integer缓存机制:
Integer类型在Java中有一个缓存机制,该机制会缓存-128到127之间的所有Integer对象。
当在这个范围内进行自动装箱时,Java会直接使用缓存中的对象,而不是创建一个新的对象。
对象比较:
使用==比较两个对象时,实际上是在比较它们的内存地址(即引用)。
在-128到127范围内,由于使用了缓存机制,两个相同的数值会被包装到同一个对象中,因此它们的内存地址相同,比较结果为true。
超出这个范围时,每次自动装箱都会创建一个新的Integer对象,因此即使数值相同,它们的内存地址也不同,比较结果为false。

解决方法:

为了避免128陷阱,建议在使用==比较Integer对象时,改为使用equals()方法。因为equals()方法会比较两个对象的值是否相等,而不是它们的内存地址。
Integer num3 = 128; Integer num4 = 128; System.out.println(num3.equals(num4)); // 输出 true

String

常用的String方法
.split()分割
.toUpperCase()转大写
.toLowerCase()转小写
.indexOf()返回下标
.charAt()分割为单个字符
.subString()截取字符
.startWith()返回boolean值,判断是否为..开头
.trim()去除前后空格
string不可变
  • 类被final修饰——不可被继承
  • 存数据的char数组被final修饰——不会指向新的数据
  • 类内无修改char数组内容的方法——不会被修改

关键字

static:只执行一次
方法——为所有对象共享可由类直接调用,只能访问静态变量,不能访问实例变量,不能用 this 或 super 关键字,主函数是静态的。
变量——为所有对象共享,归类所有,随类加载存在于方法区静态区,JVM 只分配一次内存,可通过类名或对象调用。
类——静态类只有静态内部类。非静态内部类不能声明静态成员或方法,静态内部类可以;非静态内部类可任意访问外部类成员,静态内部类只能访问外部类静态成员;创建非静态内部类实例需绑定外部类,静态内部类实例无需绑定。
代码块——随类调用或实例创建执行且仅一次,先于主函数执行,用于初始化类,所有父类子类中静态代码块优先级最高,且对后面静态变量可赋值不可访问。
final:
方法——不能被重写,指令不能被重新排序
类——类不能被集成
变量——不能被重新赋值
super:
调用父类方法,或者属性
调用父类构造函数,仅当在当前构造函数第一行时才为有效代码
this:
调用当前类的属性或者方法
调用当前类构造函数,仅当在当前构造函数第一行时才为有效代码
extend
implement
权限
public
private:当前类内能访问
protected:不仅能被同一包内的所有类访问,也能被不同包内的子类访问
default:当前包可访问

抽象类和接口

1、类是单继承,而接口是多实现
2、抽象类更偏向于本质,接口更偏向于行为功能
3、抽象类中可以有属性,构造函数,方法。但接口中只能存在

Object类

toString()
equals()——判断两个对象是否一致(区别于==)
equals()
默认行为:继承自Object类的equals()方法等同于==(比较内存地址)。
重写后的行为:大多数类(如StringInteger等)会重写equals()方法,改为比较对象的内容是否相等。
重写equals()必须重写hashcode
hashcode:描述对象的状态码——一组特性

反射

动态获取类信息 类内容 类组成的能力
获取类信息的三种方式:
class.forName()
对象.getClass()
类名.class
MVC框架
扫描类信息——>获得该类的全限定名称——>借助反射 Class.forName(className)把这个类加载进来——>检查该类是否含有注解@Controller@RequestMapping,检查每一个方法上面的@RequestMapping值,把这些信息放置到我们的HashMap中去

代理

静态代理
对于代理类对某个被代理类进行增强,实现简单。当被代理类增多时出现类爆炸。
动态代理
通过创建子类进行代理CGLB
通过实现接口进行动态代理JDK
http://www.dtcms.com/a/269615.html

相关文章:

  • 7 种简单方法将三星文件传输到电脑
  • 瞄准Win10难民,苹果正推出塑料外壳、手机CPU的MacBook
  • 用户生命周期与改进型RFM模型
  • C#读取modbus值,C#读写modbus,支持读写uint32值,Modbus TCP工具类
  • HTTPS工作原理
  • java获取文件的消息摘要APP进行文件完整性校验
  • JavaScript基础篇——第二章 类型转换与常见错误解析
  • 二分查找篇——搜索二维矩阵【LeetCode】遍历法
  • qt-C++笔记之setCentralWidget的使用
  • Visual Studio Code 中统一配置文件在团队协作中的应用
  • 论文略读:Prefix-Tuning: Optimizing Continuous Prompts for Generation
  • Git 安装避坑指南:从环境检查到高级配置的全流程解析
  • EXCEL转html,含图片
  • Linux下SPHinXsys源码编译安装及使用
  • Flutter基础(前端教程③-跳转)
  • Wend看源码-RAGFlow(上)
  • nvm npm nrm 使用教程
  • 台式电脑如何连wifi 快速连接方法
  • synchronized 的使用和特性
  • 算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • VBA经典应用69例应用8:取消预设任务
  • (三)C#使用yolo
  • 在教育领域中,如何通过VRM分片错序对视频进行加密?
  • git学习:首次创建仓库
  • ubuntu 运行脚本打开WIFI adb
  • YOLO在自动驾驶交通标志识别中的应用与优化【附代码】
  • Qt:图片切割
  • 代码详细注释:演示如何使用dup()系统调用复制文件描述符
  • Linux操作系统:再谈虚拟地址空间
  • const char* 、char*和char[]的区别