文章目录
equals() 、== 、hashCode()
==: java中预留的关键字,用来比较两个对象所存储数据的地址是否相等.
equals(): java中所有的类都继承自Object超类,如果没有重写equals()方法的前提下,equals()和==的作用是等价的;如果类中重写了equals(), (String为例, '= = '就是比较地址,equals就是比较值.)
hashCode(): 与内存地址有关系 输出对象时,调用原始的toString()方法 @后面的值为hashCode码.
Notice: 两个对象的hashCode相同,equals()不一定相同;
两个对象的equals()相同,则hashCode()一定相同.
equals()方法重写了.一般就会重写hashCode().
判断是否重写了equals()、toString()
API文档中,常用方法中如果能查到这些方法,则说明是重写了。
String串的可变与不可变
StringBuilder 、StringBuffer、 String
String 作为一种引用的数据类型,是不可变的,也叫做只读字符串。
String类中提供了许多常用的方法:
1. charAt(int index) 返回指定索引处的char值
2.
2.1 indexOf(char c) 根据字符返回第一次在串中出现的位置
2.2 indexOf(String s) 根据字符串返回第一次在串中出现的位置,范围的int 为串的第一个char的索引
2.3 indexOf(char c, int fromIndex) 从某个位置开始索引
2. a.compareTo( b ) 返回值是int,当a ,b 长度不等时,就是前者-后者的串长度值;当串长度相等时,单个字符的ascll比较,如果为0,向后顺移;否则输出差值,当串相等时,返回的结果应该为0.
3. lenth( ) 注意空串和空白串
4. subString(begin,[end]) 截取子串. 取值范围的区间是 **左闭右开**
5. StringValue( ) 将 String类型转换为其他类型. 相反的是toString( )方法.
6. trim( ) 取出前后空格 使用场景::注册/登录
7. 字符串转换为数组
7.1 toCharArray( )
char[] array= str.toCharArray();
System.out.println(array); //char数组可以通过数组名直接输出,而不用遍历.
7.2 split( )
7.3 charAt(int index)
数组转换为字符串:
String st=String.copyValueOf(char arr[])
String st=new String(char arr[])
StringBuilder 线程不安全的,运行效率高;
StringBuffer 线程安全的,运行效率低.
与String不同的就是,操作的是同一块内存地址.所以实现了内容可变.
运行效率: StringBuilder > StringBuffer >String
基本数据类型对应的封装
byte: short long float double boolen ---->首字母大写。
int —> Integer
char —> Character
自动拆箱
引用类型—>基本数据类型
实现原理 以 int 类型返回该 Integer 的值。
i2.intValue();
当引用类型与基本数据类型进行运算操作时,.会自动拆箱.
自动封箱
把基本数据类型–>引用类型
Integer i= new Integer(25);
Integer i=25;
Integer i=1;
// 实现原理
Integer.valueOf(i);
Integer 重写了equals( ) 就是比较的值得大小,而==是比较地址.
当Integer类型后面赋值范围在-128—127之间时,都会返回true,否则返回false。
数学类(Math)
ceil( param ) 大于等于参数的最小整数值
floor(param) 小于等于参数的最大整数
random ():产生随机数, 范围是[0,1) 随机数封装成了一个Random类
,
日期类(Date)
toString 打印对象默认调用toString.
Calendar (Date的升级版本)
获取当前日期的方法不是构造方法,而是通过静态方法 getInstance().
异常类
-
一种可以通过某些类解决的错误。
-
系统提供的异常类都会有Exception后缀。
-
exception,error 都是 Throwable 的子类。
分类
编译时异常:
1. 一般实在调用方法的时候会产生,其实是方法本身就有异常。
2. FileNotFoundException、IOException…
运行时异常: 代码不严谨造成。
1. 空指针异常,对象没有初始化
2. 数组越界,
3. 逻辑算数异常。 除数为0
处理异常:-
try-catch
try:存放可能会出现异常的代码,一旦出现异常,直接跳到catch块,try块后面的代码不再执行。
catch([参数列表]):异常类型指定,是try块的异常类型。 打印的是堆栈信息。try或者catch 中都可以嵌套 try-catch
try -->try —> catch 错误
try—>catch —>catch 正确 ,因为一个try块中可能由多个不同类型的异常
但是需要注意以下参数的顺序, Exception的子类应该在Exception的上面Catch.
否则会报不得到达的编译错误. -
try–>catch–>finally 中 finally中的语句是不管有没有发生异常,都会进入Finally块.
案例:
输出结果是:
首先看函数的返回值类型int ,只有return int 时 才会对结果有影响,return i++; 先用i,再++,所以值为1.此时将return 挂起,执行finally;
最后一同将结果返回给函数.
2. throws
不管了。往上抛,谁调用就谁处理。抛到Main以外是JVM。
而JVM处理异常就是打印一堆红色错误日志。
方法重写:
子类的异常 <= 父类的异常. 这里指的是编译时异常,而不是运行时异常.;
所有的运行时异常都是 RuntimeEception 的子类
自定义异常:
throws 放到放大声明上 后面是类名
throw 在方法体中, 后面是对象