零基础学java第十一天
java的常用类1.字符串相关的类2.JDK8前日期时间API3.JDK8后日期时间API4.java比较器5.System类6.Math类7.BigDecimallBigInterger字符串相关的类string类String代表字符串“”的东西(字符串字面值)都是此类的实例实现string是一个final类 所有字符实例都不能改变字符串是常量,用双引号表示,它们的值在创建后就不能更改strin
·
java的常用类
1.字符串相关的类
2.JDK8前日期时间API
3.JDK8后日期时间API
4.java比较器
5.System类
6.Math类
7.BigDecimall BigInterger
字符串相关的类
string类
String代表字符串“ ”的东西(字符串字面值)都是此类的实例实现
- string是一个final类 所有字符实例都不能改变
- 字符串是常量,用双引号表示,它们的值在创建后就不能更改
- string对象的字符内容是存储在一个字符数组value[]中
//研究内存中string对象指向
String s1 = "abc";
String s2 = "abc";
s1 = "hello"
//String对象的创建
String str = "hello";
//this.value = new char[0];
String s111 = new String();
//this.value = Arrays.copyof(value,value.length);
// s13 a 10
char[] = a = new char[10];
String s13 = new char[10];
String s13 = new String(a);
//String s14 = new String(char[] a,int stratIndex,int count);
练习
String s1 = "java11";
String s2 = "java11";
String s3 = new String("java11");
String s4 = new String("java11");
s1 == s2 ? true
s1 == s3 ? false
s1 == s4 ? false values
s3 == s4 ? false values
Person p1 = new Person();
p1.name = "xiaoming";
Person p2 = new Person();
p2.name = "xiaoming";
p1.name.equals(p2.name); true
p1.name == p2.name; false
- String s1 = “a”;
- 字符串常量池中创建了一个字面量为“a”的字符串
- s1 = s1 + “b”;
- 原来的a字符串对象已经丢失,现在在堆空间中产生了一个字符串s1+"b"也就是(“ab”)如果多次改变串内容,则会出现大量副本字符串对象留在内存中,降低效率,如果这样的操作放到循环中,会极大影响程序性能
- String s2 = “a” + “b”;
- s2指向了字符串常量池中已经创建的“ab”字符串
public int length();返回字符串长度
char cahrAt(int index);返回某索引出的字符,从0开始
boolean isEmpty();判断字符串是否为空
String toLowerCase();将String中的所有字符转为小写英文
String toUpperCase();将String中所有字符转为大写英文
String trim();返回字符串的副本,消除头部空白与尾部空白
boolean equals(Object o);比较字符串的内容是否相等
String concat(String s);将s放到字符串的结尾
int compareTo(String s);比较s与该字符串的大小
String subString(int i);返回新的字符串 从下标为i开始截取到最后一个字符
String subString(int begin,int end);返回新的字符串 从下标begin开始截取到end-1的字符
StringBuffer
- StringBuffer是可变字符序列,value没有fianl声明,可以无限扩容
private fianl char value[]; String
char[] value; AbstractStringBuilder
int count; count记录有效字符的个数
- 其对象由构造器生成
public StringBuffer();//初始长度为16的字符串缓冲区
public StringBuffer(intg capacity);//构造了指定长度的字符串缓冲区
public StringBuffer(String str);//初始化了长度为str.length+16的字符串缓冲区
//s指向的内容部分就不能发生变化(s发生变化后就指向了新的地址)
String s = new String("iloveyou");
//buffer指向的内容内部能发生变化(buffer发生变化后指向同一个地址)
StringBuffer buffer = new StringBuffer("iloveyou");
buffer.append("ma");
append(String) 字符串拼接
delete(int begin,int end)删除
replace(int start,int end,String)替换
insert(int index,String)插入
reverse():把当前字符序列逆转
indexof(String str) 位置
String subString(int start,int end) 分离字符串
int length()charAt(int n) 返回在n位置的char字符
setCharAt(int n,char c) 在n位置插入c字符
- 当append和insert超过value数组长度,可以扩容
StringBuilder
- 跟StringBuffer功能一样
*String StringBuffer StringBuilder的区别
String | StringBuffer | StringBuilder |
---|---|---|
不可变字符序列 | 可变字符序列 | 可变字符序列 |
线程安全 | 线程不安全 | |
效率低 | 效率高 | |
参数传递不会改变自己的值 | 参数传递会改变自己的值 | 参数传递会改变自己的值 |
StringBufferDemo.java
String s1 = new String("1a");
StringBuilder builder1 = new StringBuilder("1a");
StringBuffer buffer1 = new StringBuffer("1a");
System.out.println(s1);
System.out.println(buffer1);
System.out.println(builder1);
System.out.println();
Test test = new Test();
test.changeString(s1);
test.changeStringBuffer(buffer1);
test.changeStringBuilder(builder1);
System.out.println(s1);
System.out.println(buffer1);
System.out.println(builder1);
Test.java
void changeString(String s){
s = "abc";
}
void changeStringBuffer(StringBuffer s){
s.append("abc");
}
void changeStringBuilder(StringBuilder s){
s.append("abc");
}
//null与取空"" 是不一样的东西
String str = null;
StringBuffer sb = new StringBuffer();
sb.append(str);
sout(sb.length()); 4?
sout(sb);
StringBuffer sb1 = new StringBuffer(str);
sout(sb1);
日期时间API
JDK8前
java.lang.System
public static native long currentTimeMillis();
返回当前时间与1970年1月1日0分0秒的毫秒为单位的时间差 1秒 = 1000毫秒
UTC 中时区的时间
GMT 中国的GMT = UTC + 8
CST 北京时间
java.util.Date
精确到毫秒
使用 Date() 获得本地的当前时间
Date(long date) 为什么date的类型为long? 因为是毫秒数
1秒 = 1000毫秒 1分钟 = 60秒= 60000毫秒
1小时 = 60分钟 = 3600 秒= 3600000毫秒
1天 = 24小时 = 1440分钟 = 86400000毫秒
1年 = (2021-1970)*365*86400000毫秒
-
java.text.SimpleDateFormat
- Date类的API不易国际化,大部分都弃用了,
java.text.SimpleDateFormat
是一个不与语言环境有关的方式来格式化和解析日期的具体类 文本->日期
日期->文本
- Date类的API不易国际化,大部分都弃用了,
-
java.util.Calendar
- 是一个日历类,一个Calendar的实例是系统时间的抽象表示
get(int f)
获得想要的时间信息YEAR
MONTH
DAY_OF_WEEK
HOUR_OF_DAY
MINUTE
SECOND
- public void set(int f,int value)
- public void add(int f,int amount)
- public final Date getTime()
- public final void setTime(Date date)
JDK8后
-
java.time
LocalDateTime
LocalDate
-
java.time.chrono 对不同的日历系统的访问
-
java.time.format 格式化和解析时间和日期
-
Timestamp
好处在于能统一前端和SQL的时间显示Timestamp timestamp = new Timestamp(System.currentTimeMillis()); System.out.println(timestamp);
比较器
-
自然排序 : Comparable
- 默认从小到大排序
-
定制排序 : Comparator
详情参照例子就行
System类
currentTimeMills() 返回当前计算机的时间
exit() 退出当前程序 code 0代表正常退出 非0代表异常
gc() 请求系统进行垃圾回收
Math类
abs 绝对值
acos asin atan cos sin tan三角函数
sqrt 平方根
pow
min
max
random
int i = (int)Math.random(); //0-1
//公式如下 [a,b)
//int i = (int)Math.random()*a+(b-a);
BigInteger
Integer作为int的包装类,最大能存储2的31次方 -1,Long也是有限的,最大是2的63次方-1.如果要表示更大的数
- BigInteger可以表示为不可变的任意精度整数
abs()
add(val) this + val
divide() 整数相除取整数部分
remainder() 整数取余
divideandRemainder() 放商和余数的一个数组
pow(int x) this的x次方
subtract() this-val
multiply() this*val
BigDecimal
Float与Double做科学计算或工程计算
商业计算
- 支持不可变的任意精度的有符号十进制数
更多推荐
已为社区贡献3条内容
所有评论(0)