Java常用API

Object

1、概念

所有对象的顶级父类,存在于Java.lang包中

2、常用方法

public class Demo1_Object {
    public static void main(String[] args) {
        //TODO 创建Object对象
        Object obj=new Object();
        Object obj2=new Object();
        //TODO 调用方法
        //1、指示其他某个对象是否与此对象“相等”,比较的是两个对象的地址值。
        System.out.println(obj.equals(obj2));//false
        //2、返回该对象的哈希码值。
        System.out.println(obj.hashCode());//1735600054
        //3、返回该对象的字符串表示。
        System.out.println(obj.toString());//java.lang.Object@677327b6
    }
}

String

字符串对象,可用于少数字符串的拼接功能

1、特点

底层是一个封装的char[ ]数组对象并且字符串一旦确定,是不可变的

在这里插入图片描述

2、创建String对象

 public class Demo2_String {
    public static void main(String[] args) {
        //TODO 方法1  ---在堆内存中分配一个存储空间
        char ch[]={'a','b','c','d','e'};
        String str=new String(ch);
        System.out.println(str);//abcde
        //TODO 方法2  
        //1、 如果是第一次使用字符串,java会在字符串常量池创建一个对象。
		//2、 再次使用相同的内容时,会直接访问常量池中存在的对象。
        String str2="abcde";
        System.out.println(str2);//abcde

        String str3="abcde";
        System.out.println(str3);//abcde
		
		//String类重写了object的equals方法,比较的是属性值,而“==”比较的是地址值
        System.out.println(str.equals(str2));//true  
        System.out.println(str==str2);//false
        System.out.println(str2==str3);//false
    }
}

3、常用方法

public class Test3_String {
	public static void main(String[] args) {
// 1.创建String对象
		// --方法1
		char[] ch = { 'a', 'b', 'c', 'd', 'e' };
		String str = new String(ch);// 触发String(char[] value)构造方法
		System.out.println(str);
		// --方法2
		String str2 = "12345";// 相当于简写形式+
		// 方法2比方法1 更加高效,因为方法1要在存放在堆内存中,
		// 方法2存在堆内存的一个常量池中,如果这个值存在了,就不再开辟新空间,直接拿来用
// 2.调用方法
		// 2.1返回指定索引的char值
		System.out.println(str.charAt(3));// 'd'
		// 2.2将指定字符串连接到此字符串的结尾
		System.out.println(str.concat(str2));// abcde12345
		// 2.3 将旧字符换成新字符
		System.out.println(str.replace("abc", "xyz"));// xyzde
		// 2.4将此字符与指定的对象进行比较(判断两个字符串的内容是否相等,对equals方法进行了重写)
		System.out.println(str.equals(str2));// false
		// 2.5 返回次字符串的哈希码值
		System.out.println(str.hashCode());// 92599395

		System.out.println("==========================");

		// 2.6 返回指定子字符串在此字符串的索引
		System.out.println(str.indexOf("b"));// 1
		// 2.7 返回指定字符在此字符串中最后一次出现处的索引。
		System.out.println(str.lastIndexOf("c"));// 2
		// 2.8 返回指定字符串是否为空
		System.out.println(str.isEmpty());// false
		// 2.9 返回指定字符串的长度
		System.out.println(str.length());// 5

		System.out.println("==========================");

		// 2.10 返回字符串是否以指定字符为前缀开头
		System.out.println(str.startsWith("ab"));// true
		// 2.11判断字符串是否以指定后缀结尾
		System.out.println(str.endsWith("de"));// true
		// 2.12 返回一个新的字符串,从指定索引位置开始截取字符串到末尾处
		System.out.println(str.substring(2));// cde
		// 2.13 返回一个新字符串,截取字符串,从开始位置到结束位置(不包含结束位置)
		System.out.println(str.substring(1, 3));// bc
		// 2.14 将指定字符串全部转成小写
		System.out.println(str.toLowerCase());// abcde
		// 2.15 将指定字符串全部转成大写
		System.out.println(str.toUpperCase());// ABCDE

		System.out.println("==========================");

		// 2.16 返回字符串的副本,忽略前导空白和尾部空白
		System.out.println(str.trim());// abcde
		// 2.17 将指定的数字转成字符串
		System.out.println(String.valueOf(98));// 98
		// 2.18 将字符串的数据存入char数组中
		System.out.println(str.toCharArray());// abcde
		// 2.19 按照指定的字符串切割
		System.out.println(Arrays.toString(str.split("c")));// [ab, de]
		// 2.20 将字符串的数据,转成整型并存入byte数组中
		System.out.println(Arrays.toString(str.getBytes()));// [97, 98, 99, 100, 101]

		// 打印字符串里的每个字符
		for (int i = 0; i < str.length(); i++) {
			System.out.print(str.charAt(i));//abcde
		}
	}
}

5、StringBuffer与StringBuilder

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

5.1、特点

1、  封装了char[]数组

2、  是可变的字符序列

3、  提供了一组可以对字符内容修改的方法

4、  常用append()来代替字符串做字符串连接

5、  内部字符数组默认初始容量是16:initial capacity of 16 characters

6、  StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全

7、  如果大于16会尝试将扩容,新数组大小原来的变成2倍+2;容量如果还不够,直接扩充到需要的容量大小;
	int newCapacity = value.length*2+2;

5.2、常用方法

方法方法描述
public StringBuffer append(String s)将指定的字符串追加到此字符序列。
public StringBuffer reverse()将此字符序列用其反转形式取代。
public delete(int start, int end)移除此序列的子字符串中的字符。
public insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。
replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。

String,StringBuffer,StringBilder的区别

1、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

2. 再来说线程安全,在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

3. 总结一下 
String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

Date

1、概述

存在于java.util.Date包。
用来封装一个毫秒值表示一个精确的时间点。
从1970-1-1 0点开始的毫秒值。

2、创建对象

序号方法描述
Date date=newDate();//封装的是系统当前时间的毫秒值
Date date=newDate(long time);//封装指定的时间点

3、常用方法

序号方法描述
getYear();/返回距离1900年多久
getMonth();/返回月(0-11),所以比现实月份小1
getDate();/获取日
getHours();/获取时
getMinutes();获取分
getSeconds();获取秒
getDay();获取星期
getTime();/返回从1970年到现在的毫秒数
toLocaleString();返回当前的年-月-日 时:分:秒

4、如期工具SimpleDateFormat

4.1、概述

日期格式化工具,可以把Date对象格式化成字符串,也可以日期字符串解析成Date对象。

4.2、创建对象及常用方法

方法方法描述
SimpleDateFormat sdf = new SimpleDateFormat(String pattern);可以填"yyyy-MM-dd HH:mm:ss"
format(Date)把Date格式化成字符串;举例:String str = sdf.format(new Date())
parse(String)把String解析成Date;举例:举例:Date d = sdf.parse(new String(“abc”));

4.3、测试

public class Test3_SimpleDateFormat {
	public static void main(String[] args) throws ParseException {
		// 创建对象——参数格式:yyyy-MM-dd
		String s = new Scanner(System.in).nextLine();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		//将字符串类型的数据转成date类型
		Date d = sdf.parse(s);
		//创建Date对象
		Date today = new Date();
		long birth = d.getTime();
		long todayTime = today.getTime();
		System.out.println((todayTime - birth) / 1000 / 60 / 60 / 24);
	}
}

Number 包装类

数字包装类的抽象父类

1、作用

1、包装类的作用,为对应的基本类型,提供丰富的方法

2、自动装箱:把基本类型 包装 成包装类型----使用方法:包装类.ValueOf(包装类对应的基本类型变量)
	Integer a = 5;//a是引用类型,引用了包装对象的地址。编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);

3、自动拆箱:把包装类型 包着的是啥拆出来 变回成 基本类型----使用方法:包装类.intValue()拆成int类型,包装类.doubleValue()拆成double类型
	int i = a;//a现在是包装类型,没法给变量赋值,需要把5取出来。编译器会完成自动拆箱:int i = a.intValue();

4、自动装箱有两种方式:①构造方法创建对象、②静态方法创建对象(推荐后者,在范围内高效)
 	后者高效的原因是:静态方法相对new,相同数据创建后不再开辟新的空间存储——范围:-128~127 超过范围后和new的效率是一样的

2、包装类与基本类型的对应关系

基本类型对应的包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

3、常用方法(用Integer类型举例)

方法方法描述
parseInt()字符串转换成int
toBinaryString()把整数转换成2进制数据
toOctalString()把整数转换成8进制数据
toHexString()把整数转换成16进制数据

3、BigDecimal与BigInteger

3.1、概述

BigDecimal:常用来解决精确的浮点数运算。

BigInteger:常用来解决超大的整数运算。

3.2、测试 BigInteger

public class Test_BigInteger {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//随机给a,b附上一个在100000000内的随机数
		int a = new Random().nextInt(1000000000);
		int b = new Random().nextInt(1000000000);
		
		//创建BigInteger对象,参数类型为String类型
		BigInteger ab = new BigInteger(String.valueOf(a));
		BigInteger bb = new BigInteger(b + "");
		//两个大数相加
		BigInteger result = ab.add(bb);
		System.out.println(result);
		//两个大数相减
		result = ab.subtract(bb);
		System.out.println(result);
		//两个大数相乘
		result= ab.multiply(bb);
		System.out.println(result);
		//两个大数相除
		result= ab.divide(bb);
		System.out.println(result);
	}
}

3.3、测试 BigDecimal

public class Test4_BigDecimal {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//输入数值
		double a = new Scanner(System.in).nextDouble();
		double b = new Scanner(System.in).nextDouble();

		// 触发含参构造 BigDecimal(String val)——推荐
		// 将a,b转成string类型的数据
		BigDecimal bd1 = new BigDecimal(String.valueOf(a));
		BigDecimal bd2 = new BigDecimal(b + "");
		
		//两个大数相加
		BigDecimal result = bd1.add(bd2);
		System.out.println(result);
		//两个大数相减
		result= bd1.subtract(bd2);
		System.out.println(result);
		//两个大数相乘
		result = bd1.multiply(bd2);
		System.out.println(result);
			
		//result = bd1.divide(bd2);//相除时,不能这么除,有坑!!! 需要使用重载的divide方法
		// 重载divide(x,y,z)
			// x:代表要参与运算的对象名称,
			//y:代表的是保留的小数位数,
			//z:代表是舍入模式(通常用四舍五入——BigDecimal.ROUND_HALF_UP)
		//两个大数相除,
		result = bd1.divide(bd2, 10, BigDecimal.ROUND_HALF_UP);
		System.out.println(result);
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值