一、什么是API?
API的全称是Application Programming Interface,中文译为应用程序编程接口,它是一组预先定义的规则、协议和工具的集合,用于实现不同软件组件之间的交互通信。
简单来说,API 就是一个工具箱,里面有已经设计好的锤子、钳子、扳手,我想用哪个我就直接拿过来用。
二、JDK 内置核心包
在 Java 中,“包(Package)” 是组织类和接口的核心机制,既包含JDK 内置的核心包(Java SE 标准库),也包含第三方框架 / 工具包(如 Spring、OSS SDK),还支持开发者自定义业务包。
接下来主要介绍JDK 内置的核心包:
①java.lang:Java程序的基础类,包含String、Object、Integer、Exception、Thread等核心类,处理字符串、异常、线程等。不需要import,可以直接用。
②java.util:常用工具类(集合、随机数生成器、日历、时钟等),含List/Map/Set集合、Date/Calendar日期、UUID生成唯一文件名、Properties读取配置等。
③java.io:文件操作、输入/输出操作,含File本地文件读取、FileInputStream/FileOutput
Stream文件流,OSS 上传的数据源、BufferedReader读取配置文件等。
④java.net:网络操作,URL、HttpURLConnection原生 HTTP 请求,可直接调用 OSS REST API。
⑤java.math:数字运算相关操作。
⑥java.security:安全相关操作。
⑦java.sql:数据库操作。
⑧java.text:处理文字、日期、数字、信息的格式。
三、String类
String类的规则
String类在java.lang包下,可以直接使用。
1. 使用了final修饰,不能被继承。
2. 底层运用的char [ ]数组,不能被改变。
3. 拼接字符串会创建新对象,并且不会缓存到常量池中。
String常量池
String常量池 :直接量字符串创建会缓存在字符串常量池中。
① 每当使用相同的直接量字符串,会在常量池中寻找进行复用,以减少内存开销。
② 当new对象时,一定会创建新的String字符串对象。
栈:存储局部变量(包括基本类型的值、对象的引用地址),属于线程私有,方法执行完自动释放。
堆:存储对象的实际内容(包括 String 的char[]数组、对象的元数据),所有线程共享,靠 GC 回收。
String的常用方法
Sting str = "我爱学习"; int len = str.length(); //返回当前字符串的长度 String str1 = " Hello Word "; String str2 = str1.trim(); //去除当前字符串两边的空白字符,返回Hello Word String str1 = "Hello"; String str2 = str1.toUpperCase(); //将当前字符串的英文部分全部变为大写,HELLO String str3 = str1.toLowerCase(); //将当前字符串的英文部分全部变为小写,hello String str1 = "www.baidu.com"; String str2 = str1.startsWith("www"); //判断当前字符串是否以www开头,返回布尔型,true String str3 = str1.endsWith(".cn"); //判断当前字符串是否以.cn结尾,返回布尔型,false String str1 = "我今天心情好,喝杯咖啡"; // 0 1 2 3 4 7 6 7 8 9 10 从零开始 String str2 = str1.charAt(7); //根据位置找字符StringBuilder的常用方法
在不传参时,常量池中默认给到16的长度,若传参的话长度为:传参的长度+16
StringBuilder builder1 = new StringBuilder("你好"); StringBuilder builder2 = builer1.append(",世界"); //追加内容,返回:你好,世界 StringBuilder builder1 = new StringBuilder("你好世界"); // 0 1 2 3 StringBuilder builder2 = builder1.replace(1,4,"在干嘛"); //替换部分内容(含头不含尾),替换1-3的内容,返回你在干嘛 StringBuilder builder1 = new StringBuilder("我真的不爱Java!"); // 0 1 2 3 4 56789 StringBuilder builder2 = builder.delete(1,4); //删除部分内容(含头不含尾)。删除1-3的内容,返回我爱Java! StringBuilder builder1 = new StringBuilder("你好世界"); // 0 1 2 3 StringBuilder builder2 = builder.insert(2,"我的"); 在下标之前插入内容,当前内容后移,返回你好我的世界String与StringBuilder的转换
String str = "java"; StringBuilder builder = new StringBuilder(str); //将String型的str转换为StringBuilder型的str String str1 = builder.toString(); //将StringBuilder型的str转换为String型的strString、StringBuilder、StringBuffer的区别
String、StringBuffer和StringBuilder是在Java中用于处理字符串的三个类。它们之间的区别如下:
1. 可变性 :
String是不可变的类,即一旦创建了字符串对象,就不能修改其内容。对字符串进行拼接、插入或删除等操作会创建新的字符串对象。
StringBuffer和StringBuilder是可变的类,它们支持对字符串进行动态修改。可以对字符串进行拼接、插入删除和替换等操作,不会创建新的对象,而是在原有对象上进行修改。
2. 线程安全性 :
String是线程安全的,适用于多线程环境。这是因为String的不可变性,不会出现多个线程同时修改同一个字符串对象的情况。
StringBuffer是线程安全的,它的方法使用了synchronized关键字进行同步,保证了多线程环境下的安全性。
StringBuilder是非线程安全的,它的方法没有进行同步处理。在单线程环境下,StringBuilder的性能比StringBuffer更高。
3. 性能 :
String的不可变性给它带来了一些性能上的优化,比如字符串常量池的使用。但是在频繁的字符串拼接操作中,由于会创建大量的临时对象,性能会受到一定的影响。 StringBuffer和StringBuilder的可变性使得它们在频繁的字符串操作中性能更好,特别是 StringBuilder,因为它不再需要进行同步操作。
总结起来,如果需要对字符串进行频繁的操作和修改,并在多线程环境下使用,应选StringBuffer。如果只在单线程环境下进行字符串操作,并且性能要求较高,可以选择StringBuilder。如果字符串不需要修改,或者在多线程环境下使用,应选择不可变的String类。