常用类总结

Object类

类的特点都有
成员内部类
	定义在一个类里面的类称为内部类,在外面的类称为外部类
	特点:
		无法定义静态变量和方法(类加载时期不一样)
			不能在不存在的里面定义一个已经存在的东西
		可以访问外部类的成员(私有,静态)
	创建:
		内部类.对象名=new 外部类().new 内部类();

静态内部类
	可以定义静态成员和非静态成员(属性方法)
	只能调用外部类静态成员
	创建:
		内部类.对象名=new 外部类();

局部内部类
	在方法中它的作用域已经确定了,不能再使用访问修饰符(在作用域就在局部),只能在方法中使用
	特点:和成员内部类一样
		 局部内部类只能访问局部常量
		 	局部变量在方法结束之后会被销毁,对象还在变量没了	 	
		 	局部内部类不会随着方法的死亡而死亡
	创建:在哪个方法内作用域就在哪new

匿名内部类(常用)
	语法:
		new 父类(){};
	特点:
		匿名内部类本身就是对象
		通常会有一个父类,父类:通常是个接口或抽象类
		一般不会定义自己的属性和方法(可以定义,但定义也调不了)
		一般最多用在方法的参数为接口时使用!!!
			有个接口就得有个实现类,太多冗余
		lambda表达式就是简化内部类		
String类
	直接赋值
	通过构造方法赋值
	通过字节数组创建String对象(io流..)
	通过字符数组创建String对象
常用方法
	获取的方法
		获取字符串指定下标对应的字符,返回值为char类型charAt()
		获取字符串指定字符串对应的下标indexOf()
		从后向前找下标lastIndexOf()——也是从前数
		获取字符串长度length()
	判断方法
		判断字符串是否相等,区分大小写equals()
		不区分大小写equalsIgnoreCase()
		判断字符串是否已指定字符串开头startsWith()
		判断字符串是否已指定字符串结尾endsWith()
		判断字符串是否包含指定的字符串contains()
		判断字符串长度是否为0,是否为空isEmpty()
	其他方法
		将字符串变为字节数组byte[] bytes=字符串名.getBytes()
		将字符串变为字符数组char[] ch=字符串名.toCharArray()
		字符串截取substring(参数1:起始下标 参数2:结束下标)   (是个左闭右开的区间,从0数起 )
			注意:String类是一个字符串常量,一旦定义不能改变。一定要重新赋值(字符串不可变)
		字符串指定内容替换repalce()
		字符串切割split()	返回的是数组
        将字符串变为大写toUpperCase()
        将字符串变为小写toLowerCase()
        去除字符串前后的空格trim()
        将以他类型转化为String类型valueOf()

在这里插入图片描述

String内存分配
	在做字符串比较的时候,尽量使用equals方法
		字符串1是通过Scanner对象扫描出来的(会创建在堆中)
		字符串2是直接定义出来的(会创建在常量池中)
		所以他们地址不一样
	Sring a="abc"; s="bcd" ;
		在内存中常量池会放一个新的字符串acd
		s指向了新的字符串,并不是改值操作

在这里插入图片描述

str2/3:
	都是在常量池中(不会被内存回收)
str4:
	str4在堆内存中,因为java对于变量的字符串凭借做了优化,其底层使用到了StringBuilder类(new的都在堆里)
str5:
	str5在堆内存中
str6:
	str6在堆内存中,后面那个c是在常量池中
str7:
	str7在常量池中,intern()方法的作用就是让此对象返回这个字符串在常量池中的地址
s3!=str5:
	使用new关键字产生的对象地址永远不可能相等
可变的字符串序列StringBuffer(StringBuilder一样)
	这两类的API方法一致
	定义一个空字符串
		StringBuffer sb=new StringBuffer();
	常用方法
		(不用向String一样要赋值)
		append
			在原有的字符串序列上追加指定字符串,地址不变
		insert(下标,内容)
			指定位置插入字符串
		delete(下标,下标)
			删除指定内容,左闭右开
		reverse()
			翻转
		toString()
			将字符串序列变成String类型

String

String 、StringBuffer 、StringBuilder区别
	String类是字符串常量类,一旦定义不能改变(拼接一次创建一次对象),而后者是字符串可变类,如果实现字符串的拼接是在原有的基础上拼接的
	StringBuffer线程安全的,而StringBuilder是线程不安全的,所以效率更高(一人和多人WC)

在这里插入图片描述

Object类

java继承树上最顶层的父类,所以类都是直接间接继承自Object,都拥有其提供的方法

常用方法

getClass()

获取对象的真实类型(类对象),反射中用得多

public final Class<?> getClass()
toString()

默认返回这个对象的内存地址
通常重写为对象的属性信息

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
hashCode()

返回这个对象十进制的hash值(hash值的作用是区分对象,不同对象应该有不同的hash值,有时会出现hash冲突)

equal()
  • 底层相当于==
    • == 可以用于基本类型和引用类型
    • equals只能用于引用类型的比较
  • 返回两个对象是否相等,默认比较内存地址
  • 如果不希望比较地址,可重写
    • Double/Integer/String类重写父类的equals方法,从而比较内容
  • 在HashSet等集合的底层去重原理?(如何比较两个对象是否相等)
    • 在java中会优先比较两个对象的hash值,如果不一致,那么两个对象不相同
    • 如果一致,进而比较equals方法也相等,那么这两个对象相同
finalize方法

当垃圾回收器回收垃圾对象的时候,自动调用

包装类

为什么要有包装类

因为基本数据类型不具有方法和属性。而引用数据类型可以拥有属性和方法,使用更加的灵活

装箱和拆箱

未来在集合中只保存引用类型
8大基本数据类型首字母大写就是对应的包装类
装箱/拆箱
装:基本类型转换为包装类型
自动拆装箱
Number类
是包装类的父类
常用包装类
Integer
Integer缓冲区
(-128~127数组缓冲区,在这个范围不会new,超了会new)
属性:
MAX_VALUE
MIN_VALUE
Double

Number

Byte、Short、Integer、Long、Float、Double六个子类

提供一组方法,用于将其中某一种类型转换成其他类型 xxxValue()方法

常用属性

MAX_VALUE
MIN_VALUE

常用方法

将字符串类型的数值转换成int或者是double类型

String s = "123";
//方式1:
int i = Integer.parseInt(s);
System.out.println(i);
//方式2:
int i2 = Integer.valueOf(s);
System.out.println(i2);

缓冲区

缓冲区是内存空间的一部分。用来缓冲输入或输出的数据

缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

public class Demo02 {
	public static void main(String[] args) {
	/**
		* 面试题:整数型包装类缓冲区
		* 整数型的包装类定义缓冲区(-128~127),直接从缓存数组中获取,
		* 否则,重新new新的对象
		*/
		Integer i1 = new Integer(10);
		Integer i2 = new Integer(10);
		System.out.println(i1 == i2); //false
		System.out.println(i1.equals(i2));//true
        
        //而当传入的数值不在这个范围之内,程序便会创建一个新的对象
		Integer i3 = 1000; //Integer i3 = new Integer(1000);
		Integer i4 = 1000; //Integer i3 = new Integer(1000);
		System.out.println(i3 == i4); //false
		System.out.println(i3.equals(i4));//true
        
		Integer i5 = 100; //IntegerCache.cache[i + (-IntegerCache.low)]
		Integer i6 = 100; //IntegerCache.cache[i + (-IntegerCache.low)]
		System.out.println(i5 == i6);//true
		System.out.println(i5.equals(i6));//true
    }
}

Date类
	创建Date对象 	alt+Enter	java.util.Date
	获取系统当前时间 Date date=new Date(); 
		表示指定日期Date date=new Date(2020-1900,10-1,20);——2020-10-20
        毫秒数(时间戳)
        	编号
        	计算活了多少天
        	
SimpleDateFormat日期化格式类
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")	2022-04-13 20:31:30
	format(time)	对long类型的毫秒数进行格式化
	format(date)方法
	parse(time)方法
	前端向后端提交的永远都是字符串类型的
		字符串——>日期类型

System系统类
	获取当前时间的毫秒数		currentTimeMillis()	从1970开始
	终止虚拟机运行 	0表示正常退出  exit(0);

Math类(静态的直接调用)
	a的b次方	pow(底数,幂数)	
	a的平方根	sqrt(a)
	a的立方根	cbrt()
	向上取整	ceil()
	向下取整	floor()
	四舍五入	round()
	随机数		 random()			默认范围[0,1)
		保留一个两位正整数[0,90)
		int num=(int)(Math.random()*90+10)	

random类(调用)
	new一下
	随机一个[0,100)		nexInt(100);
	
BigDecimalDemo(精确计算)
	java浮点型在保存小数的时候是近似存储,所以计算不准确
	new对象	调用方法加减乘除 add/subtract/multiply/divide
		除法运算设置模式
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是二次元穿越来的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值