刻苦学习Java第十二天【打卡贴】

开始简单记笔记 不写过多内容~

 

=====================================================

异常处理

ctrl+alt+t 选中try-catch

Java语言中,将程序执行中发生的不正常情况称为“异常”

(逻辑和语法错误不算)

Error(错误):Java虚拟机无法解决的严重问题,程序崩溃

Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以针对性的代码进行处理

Exception分两类:运行时异常、编译时异常

常见运行时异常

NullPointException空指针异常

程序在需要对象的地方使用null

ArithmeticException数学运算异常

ArrayIndexOutOfBounds数组下标越界异常

ClassCastException试图将对象强制转换为不是子类的实例时

NumberFormatException数字格式不正确异常

异常处理

try-catch-finally :try包含代码catch处理异常finally必须执行

throws:向上抛,知道JVM,JVM会直接停掉chengxu

二选一,默认throws

就是发生异常try中的代码不执行,直接执行catch,但finally不管怎么样都会执行

1. 如果try代码块可能有多个异常,可以使用多个catch分别捕获异常分别做处理,要求子类异常在前,父类异常在后

2. finally执行完程序该崩溃还是崩溃

3. throws是方法中可能发生某种异常,但是不能确定如何处理,此方法显示的声明异常,表明该方法不对异常处理,由调用者处理

4. 可以声明抛出异常的列表,throws声明的是可以产生的异常或者它的父类

throws关键字后可以是异常列表,即可以抛出多个异常

5. 子类重写的方法抛出的异常是父类抛出的一致或者是该异常的子类

6. 有try-catch就不用throws了

7. 一个方法调用一个有编译异常的方法,该方法必须处理该异常

8. 运行异常可以默认处理(默认处理机制),编译异常要显示处理

自定义异常

没有在Throwable中定义的错误,自己定义异常

定义类名 继承 Exception/RuntimeException

可以通过构造器设定信息

一般时候自定义的是RuntimeException,好处是使用默认处理机制比较方便

throw和throws

意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

包装类 Wrapper

基本数据类型包装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

 

 包装类和基本数据类型转换(int Integer)

1. jdk5以前是手动装箱和拆箱 装箱:基本类型->包装类型 反之拆箱

2. jdk5(含)是自动拆箱和装箱

3. 自动装箱底层调用ValueOf方法

手动装箱

Integer integer1 =  new Integer(n);

Integer integer2 = Integer.valueOf(n);

手动拆箱

int i = integer.intValue();

自动装箱

Integer integer3 = n;

自动拆箱

int n = integer;

Integer和String相互转换

public class WrapperVsString {
    public static void main(String[] args) {
        //包装类->String
        Integer n = 1;
        String str1 = n + "";
        String str2 = n.toString();
        String str3 = String.valueOf(n);
        //String->包装类
        String str4 = "123";
        Integer i1 = Integer.parseInt(str4);
        Integer i2 = new Integer(str4);
    }
}

小知识点(阅读源码)!!!(结果为false true false)

在-128~127直接从数组返回值,超过范围就new!!!

new的话对象就不同

只要有基本数据类型,就判断值是否相等,比如比较int和integer的值

public class Method1 {
    public static void main(String[] args) {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);
        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n);
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);
        Integer a = 128;
        int b = 128;
        System.out.println(a==b);

    }
}

String类

 用双引号引起的字符序列 用Unicode编码 一个字符占两个字节 实现构造器重载 实现重要接口

可以串行化代表数据可以在网络传播Serialable 可以比较Comparable

 String是final类

String有属性private final char value[];

用于存放字符串内容 final类型不可修改->指地址!!!内容可修改!!!

举例:

1. String s1 = "hello"; s1 = "haha";

不是改变hello的内容,而是在方法区创建新的haha,再指向它,创建了两个对象

2. String a = "hello" + "abc";

编译器做一个优化,判断创建常量池的对象,是否有引用指向

String a = "hello" + "abc"; =>String a = "helloabc";

3. 

public class String01 {
    public static void main(String[] args) {
        String a = "hello";
        String b = "abc";
        //1. 先创建一个 StringBuilder sb = new StringBuilder();
        //2. 执行sb.append("hello");
        //3. 执行sb.append("abc");
        //4. String c = sb.toString();
        //最后c指向堆中的对象(String)value[]->池中"helloabc"
        String c = a + b;
    }
}

创建方式

String s = "XXX";

String s = new String("XXX");

intern方法:返回常量池中的地址

String常用方法

equals //区分大小写 判断内容是否相等

equalsIgnoreCase //忽略大小判断内容是否相等

length //获取字符的个数 字符串的长度

indexOf //获取字符在字符串中第一次出现的索引,从0开始,找不到返回-1 可以是字符串

lastIndexOf //获取字符在字符串中最后一次出现的索引,从0开始,找不到返回-1

substring //截取范围内的子串 substring(6):从6开始截距到最后 substring(0,5):截取0~5-1

toUpperCase //转换成大写

toLowerCase //转换成小写

concat //拼接

replace //替换 s.replace(a,b) s中所有a内容替换成b  s.replace()对s没有影响 要接收

split //分割字符串 要注意转义字符!!

public class StringMethod {
    public static void main(String[] args) {
        String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        String[] split = poem.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
    }
}

toCharArray //转成字符数组

compareTo //比较两个字符串的大小 前者大返回正数 后者大返回负数 相等返回0

比较直到出现差值->长度不同时长度相减 长度相同时为0

format //格式字符串 %s %d %.2f %c称为占位符 %.2f进行四舍五入处理

String name = "jack";

String formatStr = "我的名字是%s";

String info = String.format(formatStr, name);

StringBuffer类

String保存的是字符串常量 里面的值不能更改 每次String类的更新实际上就是修改地址 效率低

StringBuffer保存的是字符串变量 里面的值可以更改 每次String类的更新实际上就是更新内容 

不用每次更改地址 效率高 用数组存放在堆中 char[] value

StringBuffer str1 = new StringBuffer(); 16

StringBuffer str2 = new StringBuffer(100);  100

StringBuffer str3 = new StringBuffer("hello"); 21=5+16

String和StringBuffer转换

String->StringBuffer

1. StringBuffer s1 = new StringBuffer(str);

2. StringBuffer s2 = new StringBuffer();  s2.append(str);

StringBuffer->String

1. String str = s.toString();

2. String str = new String(s);

append //增加 s.append("XXX");

delete //删除 s.delete(a,b); 删除[a,b)的字符

replace //修改 s.replace(a,b,XX);  使用XX替换[a,b)的字符

indexOf //查找 s.indexOf(XX);

insert //插入 s.insert(a,XX); 在索引为a的位置插入XX,原来的自动后移

length //长度 s.length();

StringBuilder

StringBuilder提供一个与StringBuffer兼容的API,是简易替换,但不能保证同步,用在字符串缓冲区被单个线程使用得时候,如果可以优先使用该类,大多数情况比StringBuffer快

StringBuilder主要操作是append和insert

String StringBuffer StringBuilder 比较

String:不可变字符序列、效率低、但复用率高

StringBuffer:可变字符序列、效率较高(增删)、线程安全

StringBuilder:可变字符序列、效率最高、线程不安全

如果对String进行大量修改,不要用String

使用的原则

1. 如果字符串实现大量修改操作,一般用StringBuffer和StringBuilder

2. 如果字符串实现大量修改操作,单线程,一般用StringBuilder

3. 如果字符串实现大量修改操作,多线程,一般用StringBuffer

4. 如果字符串很少修改,被多个对象引用,使用String,比如配置信息

Math类

数学运算方法

abs 绝对值

pow 幂 //pow(2,4) 2的4次方

ceil 向上取整 //>=该参数的最小整数(转成double)

floor 向下取整 //<=该参数的最大整数(转成double)

round 四舍五入

sqrt 求开方

random 0~1之间的随机小数[0,1)

max 最大值

min 最小值

Arrays类

toString 返回数组的字符串形式 Arrays.toString(arr);

sort 排序(自然排序和定制排序)

自然排序:Arrays.sort(arr);

定制排序:通过传入一个接口Comparator实现定制排序

binarySearch 通过二分搜索法查找,要求必须排好

copyOf  拷贝Arrays.copyOf(arr,arr.length);

从arr数组中拷贝arr.length个元素到新数组中 

拷贝长度大于arr.length,那后面增加null 拷贝长度小于0,抛出异常

fill 数组填充 Arrays.fiil(num,n); 使用n填充num数组,可以理解为替换原来元素

equals 比较两个数组元素是否完全一致 Arrays.equals(arr1,arr2);

asList 将一组值转化为list

System类

exit 退出当前程序 exit(0); 正常退出(0表示一个正常状态)

arraycopy 复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组

arraycopy(src,0,dest,0,3); 拷贝个数不要越界

源数组 ,从源数组哪个索引位置开始拷贝,目标数组, 目标数组开始的索引位置 ,拷贝个数

currentTimeMillens:返回当前时间距1970-01-01的毫秒数

gc 垃圾回收机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值