概述
常用类 API
常用类:java系统中提供的一些使用频率较高的类,
API:应用程序编程接口
Java系统中所提供的一系列类和接口
Api文档:官方给广大java开发者学习者提供对类和接口功能的说明文档
本章学习一些单个的,独立功能的类
Object
Java.lang.Object 是java类体系中的最顶级的,万类之祖
java.lang.Object
toString()
当输出一个对象时,会默认调用类中的toString()方法,把对象以字符串形式输出
类中如果没有toString(),那么会调用父类(object)中的toString();
public String toString(){
Object类中的默认输出的名字和对象在内存中的地址(10进制 转为16进制)
return getClass().getName()+"@"+Inter.toHexString(hashCode());
Equals() 用来比较字符串的内容
== 用于基本类型比较时,比较的值是否相等
== 用于引用类型比较时,比较的是两个引用的地址是否相同
以后如果比较两个对象中的地址是否相等时,直接使用==比较即可
所以其他的类为了比较两个对象中包含的内容是否相等,
都对Object中的equals(),进行了重写,改为判断内容是否相等
Arrays类 操作数组工具类
数组也是对象,也继承了Object类,数组名,equals()调用的是Object类中的equals()
Arrays.equals(a,b);// true 比较的是两个数组里面的内容是否相等
//二分查找算法,需要数组是有序的,
如果数组中不包含要找的key,返回负数,
找到了返回元素所在的索引位置
Arrays.binarraySearch(a,2);
//数组复制:
Java中的数组在创建时,指定长度,一旦给定长度不能改变
30---》扩容 40 new 40
将原数组中的内容复制到一个指定长度的新数组中
Int [] a = {1,2,3,4,5};
Int [] b = Arrays.copyOf( a, 10);
Sout (Arrays.toString(b));
Sort -排序
Int [] a={1,3,4,86};
Arrays.sort(a); 对整个数组默认进行升序排序
对指定区间排序,包含开始位置,不包含结束
基本数据类型包装类
如何获得一个int类型的包装类型对象
Interger a = new Interger(10);
Interger b = new Interger(“10”);
Interger c = Interger.valueOf(10);
Interger d = Interger.valueOf(“10”);
装箱和拆箱
装箱:将基本类型可以自动转为包装类型
Int a = 10;
(Interger aa = a;)
Interger aa = Interger.valueOf(a);
Interger aa1 = new Interger(a); 自动装箱 直接把基本类型 赋值给包装类型
底层是默认调用valueOf(a);
Cache 缓存
当自动装箱时,默认调用Interger类中valueOf();
这个方法内部对-128--+127之间进行缓存(数组),在此区间的自动装箱
不会创建新的Interger对象,直接从数组中获取即可
超出此区间后,每次都会new 新的Interger对象
拆箱: 将包装类型转为基本类型,底层用到的是intValue()
Int bb = aa;
String 类
Java.lang.String 代表字符串
Java 中凡是“”括起来的 都是String类的实例(对象)
字符串的值不可改变的,一旦字符串对象被创建,值就不能被该改变了
底层存储字符串内容的数组,是被final修饰的,必须再对象创建之初由构造方法对其赋值
每次+= + 其实都是创建了一个新的字符串对象
创建字符串对象:
方式1:
String s1 = “abc”;
String s2 = “abc”;
//在第一次创建s1变量时,会在内存中有一个叫字符串常量池的空间检索,
有没有此内容的一个字符串对象,如果没有就会在字符串常量池中创建一个字符串对象
把这个对象的地址赋给了s1,
在第二次创建s2变量时,会去字符串常量池中查找,如果有直接将之前创建的字符串对象赋值给s2
一旦出现要创建的字符串对象一致,返回拿到的是同一个字符串对象的地址
方式2:
String s1 = new String(“abc”);
//无论是否存在相同的字符串对象,都会创建一个新的字符串对象。
构造方法
Public String()
Public String (“abc”)
判断功能
获取功能
转换功能
String s3 = “abc”;
Byte [ ] bytes = s3.getBytes();//把字符串转为byte类型 转码
String s4 = new String(bytes);//解码
equalsIgnoreCase()忽略大小写
contains ()//判断是否包含子串
isEmpty()//判断是否是空串” ”
startsWith ()//判断是否是以指定的子串开头
endWith () 判断是否以指定的子串结尾
indexof()//返回指定字符首次出现的位置
lastIndexof()//从后往前查找
substring() //从指定的位置开始截取字符串,返回一个新的子字符串
substring(0,4);//从指定的位置开始到指定的位置结束(不包含结束),返回一个子串
String s = String.valueOf(a);//把其他类型转为字符串,建议使用的,避免出现空指针异常
Concat(”“) //上一个字符串并创建一个新的字符串对象返回
将指定字符串拼接到字符串末尾
Split(”“) 正则表达式
String[] strings = s4.split(“”);
//使用指定的字符将字符串分割为数组
String s =”abcdefg”;
System.out.println(s.replave(‘c’,’C’));
//replaceall() 使用正则表达式匹配需要替换的内容
Trim().length() ;// 链式调用(中间的空格去不掉,只能去掉前后的)
去掉中间的:
s.replace(target:” ”,replacement:””);
Math 类
Abs 绝对值
Sqrt 平方根
Pow(a,b) //a的b次幂
Math.flooe(9.9)//向下取整
Math.ceil(9.1)//向上取整
Round()//四舍五入
Random();//返回一个大于等于0.0 小于1.0的随机数
Random类
Random random = new Random();
Sout(sandom.nextInt()); //在int 取值范围内随机返回一个参数
Sout(random.nextInt(bound:10)); //在指定的范围内返回一个随机数 大于等于零 小于给定的数
Byte[ ] bytes = new byte[5];
Random.nextbytes(bytes);
StringBuffer 类
带缓冲区的字符串,字符串是可以改变的,
即使值发生改变,始终都创建了一个对象
Char[ ] value ; 默认长度16 当装满16个元素时,数组扩容(数组长度*2+2)
只需要改变数组的地址即可,不需要重新创建新的StringBuffer 对象
Capacity—容量
StringBuffer s = new StringBuffer();
s.appen(“abc”);
s.appen(“efg”); //默认向末尾添加
插入功能
s.insert( 2, “xxx”); //abxxxc 在2的位置插入元素
删除功能
s.deleteCharAt(2); //把该位置的元素删除
s.delete(0 , 3); //删除指定区间的内容,包含开始位置 不包含结束
替换功能
s.replace( 0 , 2 ,”xxxx”); 用新内容替换指定区间的内容 包含开始位置 不包含结束位置
截取功能
s.substring(2); //从第二个元素开始向后截取到结束,返回一个字符串副本 ,原字符串不变
StringBuilder类
也是一个字符串缓存区
与StringBuffer 所包含的方法一样,功能基本一致
区别:
StringBuffer 中的方法都被 synchronized 修饰,一次只允许一个请求进入操作,在多用户访问下是安全的
StringBuilder 中的方法都没有被synchronized 修饰,在多用户访问下是不安全的,只适用于单用户操作
String : 值不可以改变,一旦改变了就会创建新的String 对象
StringBuffer,StringBuilder 值是可以改变的,不会创建新的对象,变的只是底层的数组
StringBuffer: 多线程是加锁的,是安全的
StringBuilder : 没有加锁,多线程不安全,适合单线程场景
注意:
1、StringBuffer类中的 s.reverse()方法 反向:导致该字符序列被序列的相反代替。
2、IO包中的File类中的getName()方法
File file = new File(String str) : 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
getName():返回由此抽象路径名表示的文件或目录的名称。
String 类中的substring(int beginIndex): 返回一个字符串,该字符串是此字符串的子字符串。
lastIndexOf(String str, int fromIndex):返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始向后搜索。
Data类
Date date=new Date(); until包
getYear();上面有一个删除线,表示此方法是弃用的方法,不建议用
但是也是可以调用的
测试程序运行的时间 程序运行前 new Date().getTime()
程序运行后 ~ 后减前 (毫秒值)
Calendar 日历类 抽象类 不能用来new对象
用来定义日历功能的 具体的实现可以交给子类来实现
实现子类 : GregorianCalendar 格里高利(公历)是Calendar抽象类具体实现子类
simpleDateFormat 日期格式化类
new ~(pattern:“yyyy年MM月dd日 HH:mm:ss”)
S 毫秒
E 星期几
将date类型 格式化为指定格式的字符串
String datestr = sdf.format(date);
把字符串日期 格式化为date类型
String str = “2002-3-2”;
SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyy-MM-dd”);
Date d = sdf1.parse(str);
BigInteger
Integer int的包装类
BigInteger a = new BigInteger(“11111111111111111”);
BigInteger b = new BigIneger(“9999999999999999”);
BigInteger c = a.add(b);
Sout (a);
BigDecimal a = new BigDecimal(“0.1”);
BigDecimal b = new BigDecimal(“0.2”);
BidDecimal c = a.add(b);
Sout(c)://0.3
10
3
divide(b);
除法运算时,默认遇到无限循环会报错,需要指定保留的小数位数,以及近似值的策略
String s = “abc”; char [ ] c = [‘a’,’b’,’c’ ]
String s = “ab:cd:efg”;
String [ ] array = s.split(regex:”:”);
正则表达式 -规则
是一种模式匹配语法
可以使用一些符号,来定义一个规则,然后用规则与字符串进行匹配
验证输入的内容必须是一个手机号格式
第一位1
第二位 3 5 7 8 9
从第三位开始都是数字即可
charAt();
拿到字符串的每一位进行判断
正则表达式中符号
\d 匹配的是0-9之间的数字
String p = “1234567890”;
Boolean b = p.matches(“\\d*);
Matches(“\\d{9}”)
Matches(“\\d{3,6}”);
Sout(b);
Boolean b = p.matches(“[a-z ]*”) *//任意个
(“[A-z]*”)
(“\\w”); //对大小写字母,数字,下划线
//邮箱格式
Boolean b = p.matches(“\\w{6,10}@\\w{2,6}\\.(com|com.cn)”);
String s = “ab3cd5efg”;
s.replace(“c”,”C”);
replaceAll(_,_);前是正则表达式;
replaceFirst(); 只匹配第一个