4_JAVA常用API

目录

Object类

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

常用方法

class Student{
	//属性、成员变量
	int id;
	String name;
	
	//构造方法
	public Student(){}
	public Student(int id,String name){
        this.id=id;
        this.name=name;
	}
	
	//get set 方法
	public String getName(){return name;}
	public void setName(String name){this.name=name;}
	public int getId(){return id;}
	public void setId(int id){this.id=id;}

	//equalse()指示某个对象是否与此对象“相等”
	@Override
	boolean equals(Object obj){
        if(obj instanceof Student){
            if(obj.id==id&& obj.name==name) return true;
        }
        return false;
	}
	
	//hashCode()返回该对象的哈希码值
	@Override
	public int hashCode(){
        int result = 17;
        result = 31*result + id;
        result = 31*result + (name==null ? 0:name.hashCode);
        return result;
	}
	
	//toString()返回该对象的字符表示
	@Override
	public String toString(){
        return "Student {id="+id+",name="+name+"}";
	}
	
	//当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法。
	protected void finalize()
}

1. toString()

默认返回 类名@地址 的格式,表示对象的地址值。

一般重写这个方法来查看属性值,重写后把属性拼接成一个字符串。

2. equals(Object obj)

当前对象和参数对象比较,默认是比较内存地址,如果要比较对象的属性,则重写该方法。

重写equals()的规范
  1. 自反性:对于任何非空引用值x,x.equals(x)都应该返回true。
  2. 对称性:对于任何非空引用值x,y,当且仅当y.equals(x)返回true时,x.equals(y)才返回true。
  3. 传递性:对于任何非空引用值x,y,z,若x.equals(y)返回true,且y.equals(z)返回true,则x.equals(z)应该返回true。
  4. 一致性:对于任何非空引用值x,y,在未进行更改时,多次调用equals()始终返回同样的结果。
  5. 对于任何非空引用值x,x.equals(null)都应该返回false。

3. hashCode()

返回对象的哈希值,主要作用是为了配合基于散列的集合(HashSet、HashMap、HashTable)一起正常运行。

equals方法和hashCode方法
  1. 若equals方法返回true,则两个对象的hashCode值一定相同;若两个对象的hashCode值相同,equals方法不一定返回true。
  2. 在重写equals方法的同时,一定要重写hashCode方法。
重写hashCode()方法
  1. 不能包含equals方法中没有的字段,否则会出现equals为true而hashCode不同的情况。

  2. 31来计算,而且很多人都是这么写的,这是因为任何数n*31都可以被jvm优化为(n<<5)-n,移位和减法的操作效率比乘法的操作效率高很多!

    result = 17;
    result = 31 * result + (str==null ? 0:str.hashCode);
    return result;
    
  3. 属性 f 的哈希码的计算

    类型哈希值
    booleantrue为1,false为0
    byet、char、short、int强制为int值
    long(int)(f^(f>>32))
    floatFloat.floatToIntBits(f)
    doubleDouble.doubleToLongBits(f),再按照long的方法计算
    引用类型调用其hashCode方法

4. getClass()

返回此 Object的运行时类。

Student stu = new Student();
System.out.print(stu.getClass()) //class day11.Student

String类

创建对象

String s1=new String();
String s2="3";
String s3=new Scanner(System.in).nextLine(); //等同于new Stirng() 不在常量池中操作

概念

  1. 字符串实际上就是一个 char 数组

    private final char value[];
    
  2. final修饰,字符串不可变。

  3. String str1 = new String() 是在堆中开辟新的内存空间;

  4. str = “test” 是在堆中的常量池中找"test",若没有则分配新的内存。

  5. str=“te”+“st” ,编译器优化成"test"再运行.

  6. str1+str2+str3 字符串拼接,会有5个对象。效率低。

  7. str1+str2 JVM会隐式的改写成StringBuilder调用append()

常用方法

方法名用处
length()返回此字符串的长度
charAt(int index)返回指定索引处的值
concat(String str)在结尾连接指定字符串
lastIndexOf(String str)返回指定字符串最后一次出现的索引
subString(int a,int b)返回a-b的一个子字符串,含头不含尾
equals(Object obj)将此str与指定对象进行比较
startsWith(String prefix)测试此字符串是否以指定的前缀开头。
endsWith(String suffix)测试此字符串是否以指定的后缀结尾。
split(String regex)以regex为分隔符,分割字符串,返回string数组
trim()返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
toCharArray()把字符串数据存入char[]
getBytes()把字符串数据转换成整数并存入byte[]

StringBuilder 、StringBuffer

用来优化字符串的拼接

特点

  1. 封装了char[] 数组,是可变的字符序列。

  2. 它们的对象可以被多次修改,不产生新的对象。

  3. 常用append()做字符串拼接。

  4. 内部字符数组默认初始容量是16,如果大于16会尝试扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。

  5. stringbuffer1.0定义是线程安全的;stringbuilder1.5定义,去除线程安全以提高速度。

包装类

为对应的基本类型提供丰富的方法。Number数字包装类的抽象父类。

与基本类型的对应关系

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

Integer

创建对象
  1. 在Integer类中,包含256个Integer缓存对象,范围是 -128到127。

    new Integer(3); //新建对象
    Integer.valueOf(5);
    
  2. 使用valueOf()时,如果指定范围内的值,访问缓存对象,而不新建;如果指定范围外的值,直接新建对象。

    Integer a = new Integer(3);
    Integer b = Integer.valueOf(3);
    Integer c = Integer.valueOf(3);
    a==b;		//false
    b==c;		//true
    a.equals(b);//true
    
方法
方法用处
parseInt()字符串转换成int
toBinaryString()整数转换成2进制数据
toOctalString()整数转换成8进制数据
toHexString()整数转换成16进制数据

Double

创建对象
new Double(3.0)
Double.valueOf(3.0)//和new没有区别

自动装箱和自动拆箱

自动装箱
  1. 把基本类型包装成一包装类的对象。

    Integer a = 5;//a是引用类型,引用了包装对象的地址。
    
  2. 编译器会完成对象的自动装箱:Integer a = Integer.valueOf(5);

自动拆箱
  1. 从包装对象中,自动取出基本类型值。

    int i = a;
    
  2. 编译器会完成自动拆箱:int i = a.intValue();

日期类Date

概述

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

创建对象

new Date(); //封装系统当前时间的毫秒值
new Date(30000000000L); //封装指定时间点

常用方法

  Date d = new Date();
  System.out.println(d);//输出当前时间
  System.out.println(d.getTime());//输出1970-1-1至今的毫秒值
  System.out.println(d.getMonth());//获取当前月份
  System.out.println(d.getHours());//获取当前小时

日期工具类SimpleDateFormat

概述

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

创建对象

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

常见方法

format(Date):把Date格式化成字符串

parse(String):把String解析成Date

BigDecimal and BigInteger

BigDecimal: 常用来解决精确的浮点数运算
BigInteger: 常用来解决超大的整数运算

创建对象

BigDecimal.valueOf(3);

常用方法

add(BigDecimal num) //加法运算
substract(BigDecimal num) //减法运算
multiply(BigDecimal num) //乘法运算
divide(BigDecimal num) //除法运算
divide(BigDecimal num,保留位数,舍入方式) //除不尽时使用
setScale(保留位数,舍入方式) 
pow(int n) //求数据的几次幂
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值