Java常用类和基础API

简介: Java常用类和基础API

我是南城余!阿里云开发者平台专家博士证书获得者!

欢迎关注我的博客!一同成长!

一名从事运维开发的worker,记录分享学习。

专注于AI,运维开发,windows Linux 系统领域的分享!



尚硅谷_宋红康_String的内存结构.pptx

Java API查看 参考网站

Java SE 文档 — API 和文档 | Oracle 中国

Java 8 中文版 - 在线API手册 - 码工具

方法参数的值传递机制

基本数据类型传递的是数值,引用数据类型传递的是地址值

String类

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

final :凡是final修饰的,不可被修改,所以String是不可被继承的

Serializable:可序列化的接口,凡是实现此接口的类的对象就可以通过网络或在本地流进行数据的传输

Comparable:凡是实现此接口的类,其对象都可以比较大小

字符串常量的存储位置

>字符串都存储在字符串常量池(StringTable)中

>字符串常量池不允许存放两个相同的字符串常量

>字符串常量池,在不同的jdk版本中,存放的位置不同

jdk7之前:存放在方法区

jdk7及以后:存放在堆空间中

String的不可变性理解

》当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改

》当对现有字符串进行拼接时,需要重新开辟空间保存拼接后的字符串,不能在原有的位置修改

》当调用字符串的replace()替换现有的某个字符时,需要重新可开票空间保存修改以后的字符串,不能在原有的位置修改

String s2 = new String("hello");在内存中创建了两个对象

一个是堆空间中new的对象,另一个是字符串常量池中生成的字面量

String的连接操作:+

情况1:常量+常量:结果仍然存储在字符串常量池中,返回此字面量的地址 注:此时的常量可能是字面量或者final修饰的常量

情况2 : 常量 + 变量 或 变量+ 变量 :都会通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址

情况3 :调用字符串的intern():返回的是字符串常量池中的字面量的地址

concat():不管是常量调用此方法,还是变量调用,同样不管是常量还是变量,总之,调用完,都返回一个新new的对象

基本数据类型与引用数据类型间的转换
//基本数据类型转换引用数据类型
int num = 10;
//方式1:
String s1 = num + "";
//方式2: valueOf()
String s2 = String.valueOf(num);
//引用数据类型转换基本数据类型:调用包装类的parssexxx(String str)
String s3 = "11230";
int num1 = Integer.parseOf(s3);
编码、解码

编码:字符、字符串——>字节、字节数组(对应着编码集)

解码:字节、字节数组——>字符、字符串(对应着解码集)

StringBuffer和StringBuilder中常用的方法

增:

append()

删:

delete(int start, int end)

deleteCharAt(int index)

改:

setCharAt(int index,char c)

replace(int start,int end,String str)

查:

charAt(int index)

插:

insert(int index,xx)

长度:

length()

String、StringBuffer、StringBulider使用场景

在Java中,String、StringBuffer和StringBuilder是处理字符串的常用类。它们之间有一些重要的区别,包括线程安全性和可变性。这里将解释每个类以及它们的使用场景。

  1. String:String类是不可变的,这意味着一旦创建了一个字符串,就不能更改它的值。如果尝试改变字符串中的某些字符,那么会创建一个新的字符串。因此,当需要多个修改字符串的操作时,String可能不是最佳选择,因为它会产生大量的中间字符串。例如,在一系列字符串连接操作中使用String会导致大量不必要的字符串创建和垃圾回收。
  2. StringBuffer:StringBuffer是可变的,可以在原地修改字符串,而不会创建新的字符串。因此,StringBuffer适用于需要频繁修改字符串的场景,例如在字符串拼接、字符串替换、字符串截取等操作中。此外,StringBuffer是线程安全的,这意味着在多线程环境中使用StringBuffer是安全的。
  3. StringBuilder:StringBuilder和StringBuffer类似,都是可变的,可以在原地修改字符串。然而,StringBuilder不是线程安全的。因此,在单线程环境中,StringBuilder通常比StringBuffer更快,因为它没有进行线程安全的同步操作。因此,如果不需要考虑多线程环境,建议使用StringBuilder而不是StringBuffer。

总结起来,String、StringBuffer和StringBuilder的使用场景如下:

  • 如果需要一个不可变的字符串,可以使用String。
  • 如果需要频繁修改字符串并且需要线程安全,可以使用StringBuffer。
  • 如果需要频繁修改字符串但是在单线程环境中,可以使用StringBuilder。

日期、时间API

jdk8之前的

》System的currentTimeMills()

》两个Date的使用

》SimpleDateFormat用于格式化、解析

》Calendar日历类的使用

jdk8

LocalDate、LocalTime、LocalDateTime—》类似于Calendar

》Instant——》类似于Date

》DateTimeFormater——》类似于SimpleDateFormat

Java比较器

自然排序:实现Comparaable接口的方式

》具体类A实现Comparable接口

》重写Comparable接口的compareTo(object obj)方法,在此方法中指明比较类A对象的大小标准

》创建类A的多个实例,进行大小的比较或排序

定制排序:实现Comparator接口

》创建一个实现Comparator接口的实现类A

》实现类A要求重写Comparator接口中的抽象方法compare(Object o1,Object o2),在此方法中指明要比较大小的对象的大小关系

》创建此实现类A的对象,并将此对象传入相关方法的参数位置即可。

两种接口对比

自然排序:单一的,唯一的 对应的接口是Comparable,对应的抽象方法compareTo(Object obj)

定制排序:灵活的,多样的,对应的接口是Comparator,对应的抽象方法compare(Object obj1,Object obj2)

sort()方法排序

Java中的sort()方法是用于对数组或列表进行排序的。它来自java.util.Arrays类或java.util.Collections类,可以对基本数据类型和对象数组进行排序。

具体来说,Java中的sort()方法使用一种称为归并排序的稳定排序算法,该算法是采用分治法的一种高效、稳定、简单的排序算法。它将待排序的数据分割成若干个子序列,分别进行排序,最终合并成一个有序的序列。

sort()方法的使用方式如下:

  1. 对于基本数据类型数组,可以使用Arrays.sort()方法进行排序,例如:
int[] arr = {3, 1, 4, 1, 5, 9};
Arrays.sort(arr);
  1. 对于对象数组或列表,可以使用Collections.sort()方法进行排序,例如:
List<String> list = Arrays.asList("C", "A", "B");
Collections.sort(list);

需要注意的是,如果要自定义排序规则,可以实现Comparator接口,并将其作为sort()方法的第二个参数传递。例如,如果要按照字符串长度进行排序,可以这样写:

List<String> list = Arrays.asList("C", "ABC", "AB", "A");
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});
目录
相关文章
|
7天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
25 2
|
1天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
19天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
41 17
|
10天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
14天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
41 4
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
15天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
34 2
|
20天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
24天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
23天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
下一篇
无影云桌面