day11 StringBuilder
StringBuilder和StringBuffer 的概述
区别
二者所有的方法都一样,构造方法也是,他们都具有方法缓冲区,相当于一个容器,内容是可以改变的
StringBuilder 是不同步的,数据不安全,效率高
StringBuffer是同步的,数据安全,效率低
二者不能向String 一样不创建对象直接赋值
StringBuilder和StringBuffer构造方法
public class StringBuilderDemo01{
public static void main(String[] args) {
```java
//StringBuffer() 创建一个字符串容器 16
StringBuilder sb = new StringBuilder();//16
System.out.println(sb);//应该一个对象的地址值,一个空?
System.out.println(sb.length());//0
System.out.println(sb.capacity());//16
System.out.println("-------------------------");
// StringBuffer(int capacity)
StringBuilder sb2 = new StringBuilder(4);//4
System.out.println(sb2);
System.out.println(sb2.length());//0 有容量不一定有内容
System.out.println(sb2.capacity());//4
System.out.println("-------------------------");
// StringBuffer(String str)
StringBuilder sb3 = new StringBuilder("hello");
System.out.println(sb3.length());//5 是内容的长度
System.out.println(sb3.capacity());//5? 16? 5+16=21
}
```
}
具体原理进入二者的类中查看
总结:StringBuilder sb = new StringBuilder() 默认创建容器空间 16
StringBuilder sb = new StringBuilder(int n); 创建容器空间 n
StringBuilder sb = new StringBuilder("asb");创建容器空间 16+3
而这常用的方法
添加方法
append() insert(int n , String s)//这个需要指定位置添加
StringBuilder sb = new StringBuilder()
sb.append("hello");//hello
sb.append("111");//hello111
链式写法
sb.append("hello").append("111");//hello111
StringBuilder sb = new StringBuilder("hello");
sb.insert(5,11);hello11
删除方法
deleteCharAt(int indexof)
delete(int start,int end) [start,end)
StringBuilder sb = new StringBuilder("hello");
sb.deleteChar(1); //hllo
sb.delete(1,3);//hlo
替换方法
replace(int start,int end,String str) [start,end)
StringBuilder sb = new StringBuilder("hello");
sb.replace(1,3,"aaaa");//haaaalo
反转方法
reverse()
StringBuilder sb = new StringBuilder("hello");
sb.reverse();//olleh
转换方法
toString();
将StringBuilder 转换成 String
StringBuilder sb = new StringBuilder("hello");
String s = sb.toString();
String s1 = new String(sb);
String 类转换成 StringBuilder
方式一
String s = "aaabbb"
StringBuilder s1 = new StringBuilder(s);
方式二
StringBuilder s2 = new StringBuilder();
s2.append(s);
二者与String的区别
String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。同步 ,是最安全的,效率最低的
StringBuilder和StringBuffer的每次扩容原理
若是这种形式 StringBuilder sb = new StringBuilder();
默认情况下,StringBuilder会将容量扩大为当前容量的两倍加上2
若是 StringBuilder sb = new StringBuilder( int n);
容量扩容 n*2+2;
若是StringBuilder sb = new StringBuilder( String str);
容量扩容 str.length() + 16
Math类
没有构造方法
Math类常用方法
| 方法名 | 说明 |
|---|---|
| Math.PI | 常量,圆周率 |
| public static double abs(double num) | 取绝对值 |
| public static double ceil(double num) | 向上取整 |
| public static double floor(double num) | 向下取整 |
| public static long round(double num) | 四舍五入 |
| public static int max(int a, int b) | 求最大值 |
| public static int min(int a, int b) | 求最小值 |
| public static double pow(double a, double b) | 求a的b次幂 |
| public static double random() | 随机数,随机的范围[0,1) |
Arrays类
概述
java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。简单来说:Arrays这个是专门用来操作数组相关的工具类
常用方法
public static String toString(int[] a) 将数组转变为字符串,不止适用于int数组
public static void sort(int[] a) 对指定的int型数组按数字升序进行排序。 相当于冒泡排序
binarySearch(int[] a, int key) 使用二叉搜索算法搜索指定的int数组的指定值,不止适用于与于int数组
binarySearch(int[] a, int fromIndex, int toIndex, int key) 使用二叉搜索算法搜索指定值的指定数组的范围。只不过定义了查找范围,不止适用于与于int数组
System 类
概述
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作
常用的方法
public static long currentTimeMillis() 返回以毫秒为单位的当前时间。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 将源数组指定的元素,覆盖到目标数组指定的元素
public static void exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态
三大属性
-
-
Modifier and Type Field and Description static PrintStreamerr“标准”错误输出流。static InputStreamin“标准”输入流。static PrintStreamout“标准”输出流。
-
out 的应用理解
PrintStream out = System.out;//返回了一个PrintStream类的对象 out.println();
in 的应用理解
InputStream in = System.in; //返回了一个InputStream Scanner scanner = new Scanner(in);
err 的应用理解
System.err.println("nihao");
PrintStream err = System.err;
err.println("nihao");
包装类
概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
| 基本类型 | 对应的包装类(位于java.lang包中) |
|---|---|
| byte | Byte |
| short | Short |
| int | ==Integer== |
| long | Long |
| float | Float |
| double | Double |
| char | ==Character== |
| boolean | Boolean |
什么是装箱
从基本类型转换为对应的包装类对象
什么是拆箱
从包装类对象转换为对应的基本类型
为什么要将基本数据类型转换成包装类对象
基本数据类型功能太单一了
包装类和基本数据类型的区别
以int 为例
int 是基本数据类型, Integer是int的包装类
int 默认值为0 , Integer的默认值null
以Integer与int为例演示他们之间的转换
-
基本类型 转 包装对象(自动装箱)
Integer i = new Integer(4);//使用构造函数函数 Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法 Integer ii = 4;//自动装箱。相当于Integer i = Integer.valueOf(4); ii = ii + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; //加法运算完成后,再次装箱,把基本数值转成对象。
-
包装对象 转 基本类型(自动拆箱)
int num = i.intValue();
基本数据类型与String类型的转换
基本数据类型转String类型
只需要记住valueOf
String s = String.valueOf(数据);
String类型转基本数据类型
基本数据类型 变量名 = 基本数据类型的包装类.parse首字母大字的数据基本类型(字符串)
注意事项
如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常
BigInteger类和BigDecimal类
略
时间日期类
Date类
概述
java.util.Date类 表示特定的瞬间,精确到毫秒。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
常用构造方法
无参构造
public Date()
分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)
// 创建日期对象,把当前的时间 System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020
有参构造
public Date(long date)
分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
System.out.println(new Date(165));//Thu Jan 01 08:00:00 CST 1970 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒 所以跟据这个时间通过传入的毫秒数来推断 出 Thu Jan 01 08:00:00 CST 1970
常用方法
public long getTime()
把日期对象转换成对应的时间毫秒值
Date date = new Date(); // 获取从1970年到现在的毫秒值差 long time = date.getTime(); System.out.println(time);
DateFormat类
DateFormat类概述
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
-
格式化:按照指定的格式,从Date对象转换为String对象。
-
解析:按照指定的格式,从String对象转换为Date对象。
常用的构造方法
public SimpleDateFormat()
用默认的模式和默认语言环境的日期格式符号构造SimpleDateFormat
public SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
DateFormat的常用方法
public String format(Date date)
将Date对象格式化为字符串。
// Date --> String
Date d = new Date();
// 创建格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
public Date parse(String source)
将字符串解析为Date对象。
//String --> Date
String str = "2019-08-08 12:12:12";
//在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(str);
System.out.println(dd);
Calendar类
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法
public static Calendar getInstance()创建,返回子类对象
Calendar cal = Calendar.getInstance();
==Calendar类中提供很多成员常量,代表给定的日历字段:==
| 字段值 | 含义 |
|---|---|
| YEAR | 年 |
| MONTH | 月(从0开始,可以+1使用) |
| DAY_OF_MONTH | 月中的天(几号) |
| HOUR | 时(12小时制) |
| HOUR_OF_DAY | 时(24小时制) |
| MINUTE | 分 |
| SECOND | 秒 |
| DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
Calendar类常用方法
public int get(int field)
返回给定日历字段的值。
Calendar cal2 = Calendar.getInstance(); //获取当前日期 int year = cal2.get(Calendar.YEAR); int month = cal2.get(Calendar.MONTH)+1; int day = cal2.get(Calendar.DAY_OF_MONTH); int hour = cal2.get(Calendar.HOUR_OF_DAY); int minute = cal2.get(Calendar.MINUTE); int second = cal2.get(Calendar.SECOND); System.out.println(year+"年"+month+"月"+day+"日");//2021年10月26日 System.out.println(hour+"时"+minute+"分"+second+"秒");
public abstract void add(int field, int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。
Calendar cal2 = Calendar.getInstance(); //2021 10 26 //修改日期 cal2.add(Calendar.DAY_OF_MONTH,2);//加2天 cal2.add(Calendar.YEAR,-2);//减2年 //修改后重新获取 int year2 = cal2.get(Calendar.YEAR); int month2 = cal2.get(Calendar.MONTH)+1; int day2 = cal2.get(Calendar.DAY_OF_MONTH); System.out.println(year2+"年"+month2+"月"+day2+"日");//2019年10月28日
public void set(int field, int value)
将给定的日历字段设置为给定值
Calendar cal = Calendar.getInstance(); //单个设置 设置时间 cal.set(Calendar.YEAR, 2021); cal.set(Calendar.MONTH, 11); cal.set(Calendar.DAY_OF_MONTH, 26); //多个设置 cal.set(2021,7,24,13,20,19);
public Date getTime()
返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); System.out.println(date); // Tue Jan 16 16:03:09 CST 2018
注意
==西方星期的开始为周日,中国为周一。 在Calendar类中,月份的表示是以0-11代表1-12月。日期是有大小关系的,时间靠后,时间越大。==
Calendar和Date互转
//Calendar转Date
Calendar c = Calendar.getInstance();
Date d = c.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String s = simpleDateFormat.format(d);
System.out.println("Calendar转Date为:"+s);
//Date转Calendar
//创建日期对象
Date d = new Date();
//创建日历对象
Calendar c = Calendar.getInstance();
c.setTime(d );
System.out.println(c.get(Calendar.YEAR) +"-"+(c.get(Calendar.MONTH)+1)+"-"+c.get(Calendar.DATE));
Date和Calendar有什么区别
区别:比较明显的区别是Date是日期,Calendar是日历,Date是类,Calendar是抽象类。当然,你也可以觉得Calendar是Date的加强版,今后如何使用呢? 都会使用,Calendar功能更强大
文章详细介绍了Java中的StringBuilder和StringBuffer类,包括它们的区别、构造方法、常用方法如append、insert、delete、replace等。此外,还提到了Math类的常用数学方法,Arrays类的数组操作,System类的系统相关方法,以及包装类的概念和转换。最后讨论了Date、DateFormat和Calendar类在处理日期和时间时的角色和用法。
1万+

被折叠的 条评论
为什么被折叠?



