异常、自定义异常、字符串、StringBuffer、StringBuilder

1、异常

在程序运行中,出现的错误

Throwable:Throwable类是java语言中所有错误或者异常的超类

Exception、Error是Throwable的子类

  • Error

    • 总是不可控制的

    • 经常用来表示系统错误或者底层资源错误

    • 如果可能的话,应该在系统级被捕捉s

      比如:虚拟机错误、内存溢出、线程锁死

  • Exception

    • 可以是可控的或者不可控的

    • 表示一个由程序员导致的错误

    • 应该在应用程序级被处理

      分类:

      • 运行时异常

        可以编译通过,程序运行时报出来的异常

        处理:

        try {
            
        } catch(Exception e) {
            
        } finally {
            // 无论前面是否抛出异常,都会执行里面的语句
            // 可以return覆盖前面的return值
        }
        

        在产生异常的方法里处理获取异常

        • 产生的异常对象被catch里面的参数接收
        • catch块中用来处理异常
        • 如果异常被catch处理了,就不会往上抛出异常
        • 如果异常被处理了,try{}catch后面的代码会接着执行
        • 调用端不会感知异常的产生,因为内部已经处理完了

        在调用端处理异常

        • 异常会抛出到调用端,调用端try…catch处理
      • 编译期异常

        这个异常必须处理,否则没有办法通过编译

        被调用的方法抛出异常,调用端必须做处理,否则会编译异常

        被调用的方法可以准确的预测到这个代码可能发生的异常,这个是给调用者的一个警示,让调用者知道会发生这种异常

        public [void] 方法名 (参数类型: 参数名) throw Exception {
            
        }
        

    总结

    运行期的异常:编译期不强制处理,运行期JVM将自动检测抛出

    编译期的异常:在编译期强制被处理的异常

2、自定义异常

自己定义异常类型

public class MyException extends RuntimeException{

	public MyException(String message) {
		super(message);
	}
	
}
public class Test2 {

	public static void main(String[] args) {
		
		Test2 test2 = new Test2();
		test2.login();
		
	}
	
	public void login() {
		// 业务
		// 假设用户名密码错误
		if(true) {
			throw new MyException("账号或密码错误");
		}
	}
	
}

3、字符串

字符串不是基本数据类型,是类,是引用的数据类型

八种基本数据类型:byte、char、short、int、long、double、float、boolean

  • 字符串常量

    String str = "123";
    Str += "456";
    

    这里定义了一个字符串常量,常量是不可以改变的,即这个字符串是不能改变的,字符串常量是共享的,如果我们做字符串的拼接,那么就是产生了一个新的字符串

  • 字符串的构造器

    new String(“123”)如果在常量池中没有abc,则会在常量池中创建一个123的常量,并且在堆中创建一个字符串对象,同时又在常量池中创建一个字符串对象,然后在堆中的对象来引用字符串常量池中的对象。如果在常量池中存在123这个常量,那么堆直接引用这个常量的地址。

  • 空字符串和null的区别

    空字符串是有效的引用,有地址的,只不过内容的长度为0

    null的引用是空的引用,不能使用,使用会报空指针异常

  • 常用API

    Modifier and TypeMethod and Description
    booleancontains(CharSequence s) 当且仅当此字符串包含指定的char值序列时才返回true。
    booleanendsWith(String suffix) 测试此字符串是否以指定的后缀结尾。
    booleanequals(Object anObject) 将此字符串与指定对象进行比较。
    booleanequalsIgnoreCase(String anotherString) 将此 String与其他 String比较,忽略案例注意事项。
    Stringreplace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar
    String[]split(String regex) 将此字符串分割为给定的 regular expression的匹配。
    booleanstartsWith(String prefix) 测试此字符串是否以指定的前缀开头。

4、StringBuffer

线程安全的可变字符串

线程:多个线程同时操作一个资源的时候,可能会发生数据安全问题

StringBuffer是线程安全的,创建后值可以变化,可以添加、修改、删除值,但不会改变地址,不会产生新的字符串

线程安全有利有弊,它提高了安全性,但是牺牲了性能

5、StringBuilder

非线程安全的可变字符串

用法和StringBuffer一样,只是StringBuilder是非线程安全的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值