Java基础复习(持续更新)

本文详细介绍了Java的基本数据类型、包装类型及缓存池的工作原理。同时深入探讨了String类的特性,包括常量优化机制、不可变性以及字符串对象在内存中的创建方式。适合Java初学者阅读。

Java基础

一、数据类型

基本类型

  • byte/8

  • char/16

  • short/16

  • int/32

  • float/32

  • long/64

  • double/64

  • boolean/~

    boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。

包装类型

参考
基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

Integer x = 2;     // 装箱
int y = x;         // 拆箱

缓存池

new Integer(123) 与 Integer.valueOf(123) 的区别在于:

  • new Integer(123) 每次都会新建一个对象;
  • Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对象的引用;
  • Integer a = 1 <==> Integer a = Integer.valueOf(1);
Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y);    // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k);   // true

基本类型对应的缓冲池如下:

  • boolean values true and false
  • all byte values
  • short values between -128 and 127
  • int values between -128 and 127
  • char in the range \u0000 to \u007F

二、String

1.常量优化机制

Java有常量优化机制:
1.如果常量池中有创建的对象,则仅仅是将地址指向这个常量即可。
2.如果是几个字符组成的字符串,变成字符串常量的时候,也是遵循上一条规定;
String s1 = “a”+“b”+“c”;
String s2 = “abc”;
System.out.println(s1== s2);
结果是ture,这表明,s1和s2共用一个内存地址,这体现了Java中的常量优化机制。

但是:
1.常量优化只是针对常量,如果有变量的话就不能被优化
判断定义为String类型的s3和s2是否相等
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。
字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。
字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。
String s1 = “ab”;
String s2 = “abc”;
String s3 = “c” + s1;
//在堆内存中创建一个StringBuffer对象~~~
//然后调用他的tostring()方法称为String对象
//s3即引用的就是这个String对象
System.out.println(s3 == s2);false
System.out.println(s3.equals(s2));true
String s3 = s1+“c”;这一句话,是在StringBuffer缓冲区中进行创建一个StringBuffer对象,将两者相加。但是对s3进行赋值时不能够直接将缓冲区的对象地址取来而是用toString方法变成另外的堆内存,然后赋值给s3,所以,s3和s2的地址值已经不同了。

2.String对象的不可变性

参考
这就涉及到了Java中String对象的不可变性,什么叫不可变性呢,简单的说就是一旦一个String对象被创建并被赋值(初始化)这个对象的值就不会变化。

一旦一个String对象在内存中创建,它将是不可改变的,所有的String类中方法并不是改变String对象自己,而是重新创建一个新的String对象。

3.参数传递

参考

4.String x = "abc"和String y = new String(“abc”)的区别

1.判断定义为String类型的s1和s2是否相等
String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2);true
在内存中有一个常量池,
当我们创建常量时;系统先看常量池中有没有这个常量,如果有,则不创建直接引用这个常量
所以,s1和s2引用的是一个常量 ,记录的是一个地址值
== 判断引用数据类型的地址是否相等
System.out.println(s1.equals(s2));true
public boolean equals(Object anObject)
将此字符串与指定的对象比较。当且仅当该参数不为 null,
并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。

2.下面这句话在内存中创建了几个对象
String s1 = new String(“abc”);
new 进堆内存
常量池一个对象“abc”
堆内存一个对象“abc”的一个副本
这样就创建了两个对象

3.判断定义为String类型的s1和s2是否相等
String s1 = new String(“abc”);记录的是堆内存对象的地址
String s2 = “abc”;记录的是常量池内对象的地址
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true

标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
### 2023年Java基础知识复习 #### 平台无关性与虚拟机支持 Java程序能够跨平台运行,这是因为Java编译后的字节码可以在不同操作系统上的Java虚拟机(JVM)上解释执行。这种特性使得开发者无需针对特定的操作系统编写代码,提高了开发效率和软件的可移植性[^1]。 ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } } ``` 这段简单的`HelloWorld`例子展示了如何创建一个基本的Java应用程序。它将在任何安装有JVM的环境中正确显示消息。 #### 方法重载机制 在同一类内允许定义多个具有相同名称但参数列表不同的方法称为方法重载。这不仅限于构造函数,也适用于其他成员方法。通过改变输入参数的数量或类型,可以调用相应版本的方法来满足具体需求[^2]。 ```java class Calculator { int add(int a, int b){ return a+b; } double add(double a,double b){ return a+b; } // 更多重载... } ``` 上述代码片段说明了一个名为`Calculator`的类中的两个`add()`方法实现了数值相加功能;第一个接受整数类型的参数并返回其总和作为整型结果,第二个则用于浮点运算。 #### 避免内存泄漏问题 不当管理对象生命周期可能导致严重的性能瓶颈甚至应用崩溃。例如,在持续向集合中添加新元素而不清理旧数据的情况下会造成内存泄露现象。为了防止这种情况发生,应当确保及时释放不再使用的资源,并考虑采用更高效的数据结构或算法设计[^3]。 ```java import java.util.ArrayList; public class BetterMemoryManagement { private final ArrayList<byte[]> managedList = new ArrayList<>(); /** * 添加指定大小的新数组到列表中。 */ public synchronized void manage(long sizeInMB) { byte[] tempArray = new byte[(int)(sizeInMB * Math.pow(1024, 2))]; managedList.add(tempArray); // 清理过期条目或其他优化措施 cleanup(); } protected void cleanup(){ // 实现具体的清除策略 } } ``` 在这个改进的例子中,引入了同步控制以及对内部存储空间的有效管理和定期清理过程,从而减少了潜在的风险因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值