java22--常用类

常用类

String类的构造方法和方法在API帮助文档进行学习

关于StringBuffer

如果进行字符串的频繁拼接,会占用大量方法区内存造成内存空间的浪费,因为java中字符串不可变,每一次拼接都会产生新的字符串

StringBuffer底层实际是一个byte数组,往StringBuffer中放字符串实际是放到byte数组中了

StringBuffer初始容量为16

append方法底层在进行追加的时候数组容量不够会自动扩容

复制代码
StringBuffer s1 = new StringBuffer();
s1.append("a");//可以放基本数据类型的数据和引用数据类型的数据

如何优化StringBuffer的性能

在创建StringBuffer的时候尽可能给定一个合适的初始化容量,减少底层数组的扩容次数

复制代码
StringBuffer s2 = new StringBuffer(100);

StringBuilder和StringBuffer

StringBuilder的初始化容量也是16

StringBuilder s1 = new StringBuilder(100);

StringBuilder的append方法用起来和StringBuffer一样

区别:

StringBuffer中的方法都有synchronized关键字修饰,在多线程环境下运行是安全的

StringBuilder没有这个关键字修饰

包装类

java为8种基本数据类型准备了8种对应的包装类型,8种包装类属于引用数据类型,父类是Object

为什么要提供包装类

因为8种基本类型不够用,所以又提供了对应的8种包装类

当一个方法的参数类型是Object时,要传一个基本数据类型的数据时怎么办

可以传一个对应的包装类进去

可以将这个基本数据类型的数据经过构造方法包装成一个对象进去

复制代码
public class Integertest{
	public static void main(String[] args){
	
	Myint mi = new Myint(100);
	dosome(mi);
	}
	public static void dosome(Object obj){
	System.out.println(obj);
	}

}

class Myint{
	int value;
public Myint(){
}
public Myint(int value){
this.value =value;
}
public String toString()
	{
	return String.valueOf(value);
	}
}

String中valueOf的方法:将非字符串,转化为字符串。

如果valueOf里填的是类,那么返回的就是类的toString方法。

以上的包装类是我们自己写的,而java中已经提供了8种基本类型的包装类

8种基本类型的包装类对应的包装类型名

基本数据类型 包装类型

byte java.lang.Byte

short java.lang.Short

int java.lang.Integer

long java.lang.Long

float java.lang.Float

double java.lang.Double

boolean java.lang.Boolean

char java.lang.Character

详讲java.lang.Integer

复制代码
public class Integertest{
	public static void main(String[] args){
	
	Integer i = new Integer(100);
	dosome(i);
	}
	public static void dosome(Object obj){
	System.out.println(obj);
	}
}

装箱与拆箱

将基本数据类型转化为引用数据类型就叫装箱

Integer i = new Integer(100);

System.out.println(i);//包装类的toString()方法已经重写了,可以直接用

将引用数据类型转换为基本数据类型就叫拆箱

int i = i.intValue();//这是Number类下的方法,byte等都有类似的方法

Integer的构造方法有俩个

Integer(int)

Integer(String)//注意这个String必须是数字比如"111","中文"这样没法转化成数字的,运行时会报错NumberFormatException(数字格式化异常)

通过包装类获取基本数据类型的最大值与最小值

Integer.MAX_VALUE

Integer.MAX_VALUE

自动拆箱与自动装箱

Integer i = 100;//自动装箱

int y = x;//自动拆箱

进行基本运算时也会进行自动拆箱

System.out.println(i+1);//101

自动装箱与自动拆箱的好处

方便编程

但是Integer i = 100依然保存的是对象地址

所以Integer y = 100;

System.out.println(i==y);//false

==不会触发自动拆箱机制,==永远判断的是两个对象的内存地址

Integer.parseInt(String)方法是将String类型的数字转换为int型,他的返回值类型是int

Integer.valueOf(String)方法是将String类型的数字转为Integer型,返回值类型是Integer,类似于Integer(String)的改进方法,由于Integer(String)性能差所以被弃用,建议使用valueOf(String)

日期类

Date a = new Date();//并且Date的toString方法已经重写

如何将日期格式化

SimpleDateFormat类负责日期格式化

yyyy 年

MM月

dd 日

HH 时

mm 分

ss 秒

SSS 毫秒

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//想要什么格式就自己写例如yyyy/MM/dd

和Date套用,Date转String

String nowtime = sdf.format(a);//将Date类的a转换成sdf的格式

System.out.println(nowtime);

String转Date

String time = "1949-10-01"'

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-mm-dd");//这个格式要和String对应

Date time2 = sdf2.parse(time);

System.out.println(time2);

获取毫秒数

System.currentTimeMillis();获取自1970年1月1日到当前时间的总毫秒数

获取方法耗时的毫秒数就可以

long begin = System.currentTimeMillis();

方法();

long end = System.currentTimeMillis();

long a = end - begin;

数字格式化

DecimalFormat df = new DecimalFormat("格式");

#数字

, 千分位

. 小数点

0 不够补零

DecimalFormat df = new DecimalFormat("###,###.##");

String s = df.format(1234.111);

System.out.println(s);//1,234.11

DecimalFormat df = new DecimalFormat("###,###.0000");//表示保留四位小数,不够补零,1,234.1110

BigDecimal//大数据,精度高,属于引用数据类型

Random//随机数

Random random = new Random();

int num = random.nextInt();

random.nextInt(101);//表示从0-100间随机取数,不包括101

枚举类型

一枚一枚可以列举出来的才建议使用枚举

枚举编译之后也是生成class文件

枚举也是引用数据类型

枚举中的每一个值都可以看做常量

枚举类型语法:

复制代码
enum 枚举类型名{
枚举值1,枚举值2
}

结果只有两种类型的建议使用布尔类型,超过两种建议枚举类型

复制代码
//四季枚举
public enmu season{
SPRING,SUMMER,AUTUMN,WINTER
}
//switch语句支持枚举
switch(season.SPRING)
{
	case SPRING:
	System.out.println("春天");
	break;
	case SUMMER:
	System.out.println("夏天");
	break;
	case AUTUMN:
	System.out.println("秋天");
	break;
	case WINTER:
	System.out.println("冬天");
	break;
	}
相关推荐
AI小怪兽2 小时前
轻量、实时、高精度!MIE-YOLO:面向精准农业的多尺度杂草检测新框架 | MDPI AgriEngineering 2026
开发语言·人工智能·深度学习·yolo·无人机
码农小韩2 小时前
基于Linux的C++学习——循环
linux·c语言·开发语言·c++·算法
linweidong2 小时前
C++ 中避免悬挂引用的企业策略有哪些?
java·jvm·c++
用户93761147581612 小时前
并发编程三大特性
java·后端
CoderCodingNo2 小时前
【GESP】C++五级/四级练习(双指针/数学) luogu-P1147 连续自然数和
开发语言·c++·算法
阿在在2 小时前
Spring 系列(二):加载 BeanDefinition 的几种方式
java·后端·spring
IT=>小脑虎2 小时前
PHP零基础衔接进阶知识点【详解版】
开发语言·学习·php
小当家.1052 小时前
Maven与Gradle完整对比指南:构建工具深度解析
java·gradle·maven
你怎么知道我是队长2 小时前
C语言---位域
c语言·开发语言