Java基础(九)★ String,Pattern,包装类,异常

API

 --- Application Programming Interfaces -> 应用程序接口

Object String Math Date 包装类

异常 集合 映射

File IO 线程 套接字 反射 设计模式

JDK8

Object

Java中的顶级父类---Java中所有的类都是这个类的子类。---任何一个类的对象都可以用Object对象接住

重要方法

clone()---克隆对象---克隆完成之后会产生一个新的对象,这个新对象和原对象的地址不同但是属性值是一样的。---一个对象要想被克隆,那么这个对象对应的类必须实现Cloneable接口---Cloneable接口中没有任何的方法和属性,仅仅用于标识这个类产生的对象可以被克隆

finalize()---通知gc回收垃圾对象---即使gc开始运行,也只回收当前对象而不回收其他对象   System.gc();---通知gc回收对象

getClass()---获取当前对象的实际类型

hashCode()---获取对象的哈希码---哈希码是一串32位的二进制数据---可以认为是唯一的。

toString()----对象的字符串形式--当打印对象的时候实际上是调用了这个对象的toString方法

equals(Object o)---判断两个对象是否一致---要求能够手动重写

Eclipse命令

Ctrl + /--单行注释/取消单行注释

Ctrl + shift + /---多行注释

Ctrl + shift + \---取消多行注释

Alt + /---提示键

Alt + up / down 向上或者向下移动

Ctrl + d---删除一行

Ctrl + shift + o---导包

Ctrl + 1---错误提示键

二进制---Bin---Binary

八进制---Oct---Octal

十进制---Dec---Decimal

十六进制---Hex---Hexagondecimal

String

代表字符串的一个类---是一个最终类,没有子类。所有的字符串都是String的对象。

字符串是一个常量,定义好之后不可改变;字符串是被共享的。

 

String s = “a”; s += “b”; -> String s = “a”; -> s = new StringBuilder(“a”).append(“b”).toString(); -> s = new String(“ab”);

创建对象次数:

String s = “abc”; --- 1

String s = new String(“abc”); --- 2

String s = “a”; s += “b”;  --- 5

String s = “a”; --- 1

s = new StringBuilder(“a”).append(“b”).toString(); --- 4

// 100个字符串组成的字符数组

String[] arr = new String[100];

// + 进行拼接

String s = “”; // 1

for(String str : arr){

s += str; //s = new StringBuilder(s).append(str).toString(); //300

}

// StringBuilder

StringBuilder sb = new StringBuilder(); // 1

for(String str : arr){

sb.append(str); // 100

}

String s = sb.toString(); // 1

如果拼接多个字符串,建议使用StringBuilder;如果拼接少量字符串,可以使用+.

StringBuilder/ StringBuffer中的方法在使用上完全一致的---StringBuilder是线程不安全的,StringBuffer是线程安全。

concat(String str)---将参数字符串拼接到对象字符串的末尾---不改变原串

注意:在String中提供了一系列的操作而不改变的原串的方法

contains(String str)---判断是否包含指定的子串

equals(Object o)---判断两个字符串是否一致---判断的是实际值

getBytes()---将字符串转化为字节数组---如果不指定编码,会按照默认的系统平台码转化

charAt(int index)---表示获取这个字符串指定下标位置上的字符

length()---获取字符串的长度

toCharArray()---将字符串转化为字符数组


练习:

1. 输入一个字符串,统计字符串中字母、数字以及其他字符的个数

sdlgn479d  -=23 -> 字母:数字:其他字符:4

2. 输入一个字符串,提取其中的数字并求和。 sdlgn479d  -=23 -> 25

3. 输入一个字符串,提取其中的数字并排序。 sdlgn479d  -=23 -> 23479

4. 输入一个字符串,统计每个字符出现的次数。

hdslanldao -> h:1 d:2 s:1 l:1 a:2 n:1 o:1

compareTo(String another)---判断两个字符串的大小---根据返回值的正负来确定大小

编码

按照某种规则将字符映射成字节---记录这种规则的形式---编码表

ASCII--- 0-127---不完全的码表

ISO-8859-1---西欧码表--- 一个字符一个字节

gb2312---gbk---1个字符2个字节---收录了基本的简体汉字以及一部分常见的繁体汉字

Unicode编码体系---utf-8---1个字符3个字节--- 常见语言的常见字符

所有的码表默认兼容西欧编码---无论哪个码表中,英文一个字符永远占一个字节

练习:

1.输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取字符串

中文english5 -> 中文e   6 -> 中文en  2 -> 中  3 -> 12-> 中文english

indexOf(int ch, int index)---表示从指定的下标开始寻找指定字符第一次出现的位置

2.输入一个字符串和一个字符,输出这个字符出现的所有位置

public class Test {
public static void main(String[] args){
    String str = “abc”;
    append(str);
    System.out.println(str); // abc
}
public static void append(String str){
    // 地址发生了改变
    // str += str;
 	str = “def”;
}
}

注意:null身上没有任何的方法和属性,只要利用null去调用方法或者属性一定会出现空指针异常

Pattern

指定规则的类

本质上使用与指定匹配或者筛选规则的一系列表达式

练习:

输入一个字符串,判断这个字符串是否是一个小数

练习:

1. 叠字换单字 --- 我我我我我我爱爱爱爱学学学学学学学学学学学学编编编程程程程程程 -> 我爱学编程

2. 匹配邮箱 @ qq.com 163.com sina.cn sohu.com.cn

3. 匹配密码:6-12位组成,至少字母/数字/符号中的两个组成

包装类

给每种基本类型提供一个对应的类---包装类

byte

short

int

long

float

double

char

boolean

Byte

Short

Integer

Long

Float

Double

Character

Boolean

intchar对应的包装类发生变化

自动封箱:将一个基本类型的变量来直接赋值给对应的引用类型的对象---实际上是调用了对应类的valueOf方法

自动拆箱:将一个引用类型的对象来直接赋值给对应的基本类型的变量---实际上是调用了对应对象的***Value方法

自动封箱/拆箱是JDK1.5的特性之一

将一个字符串转化为一个字符?

“a” -> ‘a’ “a”.charAt(0) -> ‘a’ “a”.toCharArray()[0]

整数的哈希码是其本身;小数的哈希码需要经过计算;字符的哈希码是其对应的编码;布尔类型的哈希码是返回一个特殊值---true1231  false:1237

八种基本类型的哈希码都是固定值

数学类

Math---是一个最终类,构造函数是私有,提供了一系列的操作基本数据的静态方法---提供了基本的数学运算,运算的是基本类型----完全的作为了工具类使用。---初等数学运算

BigDecimal---用于精确运算小数的类---要去参数以字符串形式传入

日期类

Date/Calendar

异常

异常是一套用于问题的处理和反馈的机制

Throwable

Error---错误---无法处理---StackOverFlowError

Exception---异常---可以处理

编译时异常---在编译时期就已经出现了---由于在编译的时候已经出现了,所以要求必须处理---要么抛出,要么捕获

CloneNotSupportedException

ParseException

运行时异常---编译的时候不报错的,但是在运行的时候出现。---由于在编译的时候不报错,所以可以不处理,也可以处理。---往往语法没有错误---RuntimeException

ArithmeticException-算术异常

ArrayIndexOutOfBoundsException---数组下标越界异常

NullPointerException

ClassCastException

NumberFormatException

对于运行时异常而言,可以随意抛出随意捕获;对于编译时异常,只有在抛出的时候才能捕获

自定义异常---继承某个异常类

异常捕获的方式

1. 可以使用多个catch来分别捕获不同的异常来分别处理

2. 可以捕获一个父类异常对象,做统一处理

3. 可以使用 分隔不同的异常来做分组的处理---JDK1.7开始


如果方法声明throws了一个父类异常,那么在处理的时候必须处理这个父类异常

捕获异常的时候需要先捕获子类异常再捕获父类异常

异常对方法的重载没有任何的影响---方法的重载只和方法签名有关---方法名一致而参数列表不同

子类重写的方法的异常必须是父类方法异常的子类或者本身。---子类不能抛出比父类更多的异常---范围不能更大,而且指的是编译时异常

finally代码块无论如何都会执行一次

项目在开发阶段,如果捕获了异常,打印栈轨迹,抛出一个RuntimeException来停止项目

项目上线了,如果捕获了异常,跳转错误页面,记录错误日志。


发布了1 篇原创文章 · 获赞 12 · 访问量 6814
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章