Java学习总结(二)

这篇博客主要介绍了Java编程中的核心概念,包括String字符串的创建和方法、可变字符串StringBuilder和StringBuffer的使用,System和Runtime类的功能,包装类的装箱和拆箱,异常处理机制,集合框架中的ArrayList、LinkedList、HashSet和HashMap,以及File类和流的操作。此外,还涵盖了Java中的线程和线程生命周期,以及流的分类和常用方法。
摘要由CSDN通过智能技术生成

一、String字符串

字符串定义后是一个常量

//创建一个hello字符串对象,将其地址保存在str变量中
String str="hello";
str="abc";//这里实际是又创建了一个字符串对象abc,将其地址保存在str变量中
//str只引用最后赋值的字符串地址abc

//字符串实际是一个字符数组
String str2="abc";
char[] list = {
   'a','b','c'};
String str3= new String(list);
//这里str2和str3中保存的内容是一样的

如果要频繁更改字符串中的值,建议使用StringBuilder类或StringBuffer

创建一个字符串对象

1.使用""赋值创建

String str="hello你好";

2.通过构造方法创建

常用构造方法 说明
String() 创建一个空白字符串对象,实际创建一个空字符数组
String(String str) 创建一个指定的字符串对象,实际是创建一个形参字符串的副本
String(char[] list) 创建一个指定字符数组的字符串对象。
String(byte[] list) 按默认编码格式创建一个指定字节数组的字符串对象。
String(byte[] list,String charsetName) 按指定的编码格式创建一个指定字节数组的字符串对象。

字符串常用方法

方法名 返回值 作用
length() int 获取字符串的长度
trim() String 去除字符串首尾的所有空格
toLowerCase() String 转换字符串为小写
toUpperCase() String 转换字符串为大写
isEmpty() boolean 判断是否为一个空字符串
getBytes() byte[] 按默认编码格式将字符串转换为字节数组
toCharArray() char[] 将字符串转换为字符数组
equalsIgnoreCase(String str) boolean 忽略大小写比较指定字符串是否相同
equals(String str) boolean 判断字符串是否相同
charAt(int index) char 获取index位置上的字符串
indexOf(String str) int 获取str第一次出现的位置,如果没有返回-1
lastIndexOf(String str) int 获取str最后一次出现的位置,如果没有返回-1
contains(字符序列) boolean 判断指定的字符序列(字符串)是否存在于原字符串中
concat(String str) String 将str拼接到原字符串末尾
startsWith(String str) boolean 判断是否以指定字符串开头
endsWith(String str) boolean 判断是否以指定字符串结尾
substring(int index) String 截取原字符串在[index,数组长度)区间内的字符。(从指定位置截取至末尾,包含指定位置)
substring(int from,int to) String 截取原字符串在[from,to)区间内的字符。(从from截取至to,包含from不包含to)
split(String reg) String[] 按指定字符串或正则表达式切分原字符串。如果指定内容不在末尾,n个指定字符能得到n+1个子串;如果指定内容在末尾,n个指定字符能得到n个子串(不包含末尾的无效字符)。
String.valueOf(参数) String 将一个参数转换为字符串,参数可以是原始类型,也可以是任意对象。
replace(char oldChar,char newChar) String 使用newChar替换oldChar

字符串注意事项

在比较字符串是否相同时,要使用String重写的equals方法进行判断。

String中equals方法判断的原理,大致为:将两个字符串保存到字符数组中,再对每个字符逐一比较,如果全部一致则返回。

在使用equals方法时,通常要将已知的非空字符串作为调用者。

二、可变字符串

在程序中,如果要频繁操作某个字符串,一定使用可变字符串类StringBuilderStringBuffer创建对象。

StringBuilder类

用于表示可变字符串的一个类,是非线程安全的,建议在单线程环境下使用,效率略高于StringBuffer。

StringBuffer类

用于表示可变字符串的一个类,是线程安全的,建议在多线程环境下使用,效率略低于StringBuilder。

StringBuilder和StringBuffer中的方法作用都一致,只不过StringBuffer中的方法使用了synchronized关键字修饰,表示一个同步方法,在多线程环境下不会出现问题。

所以这里以StringBuilder为例。

构造方法

常用构造方法 作用
StringBuilder() 创建一个大小为16的字符数组。类似于String str=“”;
StringBuilder(int capacity) 创建一个指定大小的字符数组
StringBuilder(String str) 创建一个str长度+16的字符串数组后,将str添加到其中。类似于String str=“初始值”;

普通方法

方法 作用
append(Object obj) 将指定内容添加到原可变字符串对象末尾
delete(int start,int end) 删除[start,end)范围内的字符
deleteCharAt(int index) 删除指定索引的字符
insert(int index,Object obj) 将obj添加到index位置上
replace(int start,int end,String str) 将[start,end)范围内的字符替换为str
reverse() 翻转原字符串

注意

  • 以上方法都是在直接操作原字符串,每个方法调用后,原字符串都会发生变化。

  • StringBuilder或StringBuffer中并没有重写equlas方法,所以要比较两个可变字符串对象的值是否相同时,需要将可变字符串对象转换为String对象后,调用equals方法比较。

可变字符串与不可变字符串之间的转换

不可变字符串转换为可变字符串

通过创建一个可变字符串对象,将不可变字符串作为参数实现转换

//定义一个不可变字符串对象
String str="hello";
//创建一个可变字符串对象,将不可变字符串对象作为参数
StringBuilder sb = new StringBuilder(str);

可变字符串转换为不可变字符串

通过调用可变字符串的toString()方法实现转换

//创建一个可变字符串对象
StringBuilder sb = new StringBuilder("hello");
//调用toString()转换为String类型
String str=sb.toString();

三、System类

常用属性和方法 作用
System.in 获取系统输入流对象,通常用于获取输入信息
System.out 获取系统打印输出流对象,通常用于打印普通信息
System.err 获取系统打印输出流对象,通常用于打印异常信息
System.exit(int statues) 终止虚拟机运行,0表示正常结束
System.getenv(String key) 获取系统指定的环境变量信息
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,原数组要赋值的元素数量) 将原数组中指定长度的元素复制到新数组中
System.currentTimeMills() 获取从1970.1.1 0:0:0(UTC)至今经过了多少毫秒。中国是UTC(+8)所以是从1970.1.1 8:0:0至今经过了多少毫秒,返回long类型

四、Runtime类

Runtime类的对象,用于表示程序运行时对象(程序运行环境对象)。

包含了程序运行环境相关的信息。常用于获取运行环境信息(如虚拟机内存)或执行某个命令。

特点

这个类不是一个抽象类,但不能创建对象,因为其构造方法是私有的。

但是它提供了一个静态方法getRuntime(),通过这个方法,可以获取一个Runtime类的对象。

五、包装类

**包装类就是原始类型对应的类类型。**包装类通常用于将字符串转换为对应的原始类型。

在web应用中,从浏览器中获取到后台的数据,全是String类型,一定要使用转换的方法。

包装类 原始类型 将字符串转换为原始类型
Byte byte Byte.parseByte(String str)
Short short Short.parseShort(String str)
Integer int Integer.parseInt(String str)
Long long Long.parseLong(String str)
Float float Float.parseFloat(String str)
Double double Double.parseDouble(String str)
Boolean boolean Boolean.parseBoolean(String str)
Character char

装箱和拆箱

  • 所有包装类都有一个静态方法valueOf(原始类型),将某个原始类型的数据转换为相应的包装类对象,这个过程称为装箱

    //手动装箱
    int i=123;//定义一个原始类型的数据
    Integer aInteger=Integer.valueOf(i);//调用包装类的valueOf()方法将原始类型转换为包装类对象
    
  • 所有包装类都有一个原始类型Value()方法,用于将包装类对象转换为原始类型,这个过程称为拆箱

    //手动拆箱
    Integer aInteger=new Integer(123);//创建一个包装类对象
    int i = aInteger.intValue();//调用包装类的"原始类型
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值