20200928+袁鑫
学习日志:
知识总结:
Object:
object类是所有类的父类。在java中,所有的类都直接或间接地继承了java.lang.Object类。在定义一个类时,如果没有extends其他类,那么这个类就直接继承自Object。
方法:
getclass() 返回类的对象 返回值是class<?>
finalize() 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对 象上调用该对象(无返回值)
toString() 返回对象的字符串表示形式 返回值 Sring
equals() 两个对象是否相同 返回值boolean
hashCode() 返回对象的哈希码值 返回值 int
很多情况下, toString() / equals() / hashCode() 方法是不满足咱们需求的,因为Object中都 是对象地址的引用。所以我们大多数情况下需要重写这三个方法
重写 equals() 和hashCode()
因为 equals 和 hashCode 之间是有关系的,所以一般要同时重写这两个方法。
规则:
- 如果 hashCode 值相等,那么 equals 不一定相等
- 如果 hashCode 值不相等,那么 equals 一定不相等
- 如果 equals 相等,那么 hashCode 一定相等
- 如果 equals 不相等,那么 hashCode 不一定相等
重写equals()
equals() 是判断两个对象是否相等的方法,它有一下规则:
- 自反性 :对于任何非空的对象 x,x.equals(x) 应该返回 true 。
- 对称性:对于任何非空引用值 x 和 y,x.equals(y) 应该返回 true 当且仅当 y.equals(x) 返 回 true 。
- 传递性 :对于任何非空引用值 x, y 和 z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,然后 x.equals(z) 应该返回 true 。
- 一致性 :对于任何非空引用值 x 和 y ,多次调用 x.equals(y) 始终返回 true 或始终返回 false ,当 equals 比较的对象未被修改时。
- 对于任何非空的参考值 x , x.equals(null) 应该返回 false 。
instanceof
instanceof 表示一个变量所指向的对象是否是指定类型。 instanceof 在使用时,参与运算的对象和 类,必须是继承关系。否则会产生错误。
重写hashCode()
重写 hashCode 要注意,同一个对象多次调用 hashCode() 返回值一定是一致的
包含(组合)
包含和继承都能访问到关联的类,但是继承是一种 is a 关系,包含是 has a 关系。
字符序列
- String 字符串
- StringBuffer 字符串缓冲区,是线程安全的。
- StringBuilder 字符串构造器,非线程安全的
- CharBuffer 字符缓冲区
他们都实现了CharSequence接口
String
字符串java.lang.String可以用来表示多个字符,用“ ”引起来。字符串时引用数据类型,默认值是null.
Srting类
public final class String 是用final修饰的类,在java中用final修饰的类不能被继承,也就是说String没有子类。
final关键字表示最终的,可以修饰类、方法、变量:
- 被final修饰的类,不能被继承
- 被final修饰的方法,不能被重写
- 被final修饰的变量,不能变。如果是基本数据类型不能重新赋值,如果是引用数据类型不能改变引用。
字符串一旦声明就不可变。所以字符串拥有不可变性
构造方法:
String():初始化新创建额String对象,使其表示空字符序列
String(byte[] bytes) 通过使用平台默认的字符集解码指定的字节数组成构造新的String
String(byte [] bytes, Charset charset)构造一个心得String由指定用指定的字节的数组解码charset
String(String original)初始化新创建的String对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串时参数字符串的副本。
String(StringBuffer buffer)分配一个心得字符串,其中包含当前包含在字符串缓冲区参数钟的字符序列
String(StringBuilder) 分配一个新的字符串,其中包含当当花钱包含在字符串构建起参数中的字符序列
实例方法
charAt(int index) (char) 返回值指定索引处的字符
codePointAt(int index)(int) 返回指定索引处的字符(Unicode代码点)。
compareTo(String anotherString)(int) 按字典顺序比较两个字符串
compareToIgnoreCase(String str) (int) 按字典顺序比较两个字符串,忽略大小写
concat(String str)(String) 将指定的字符串链接到该字符串的末尾
contains(CharSequence s) (boolean) 当且仅当此字符串包含指定的s值序列时才返回true
endswith(String suffix) (boolean) 测试次字符串是否以指定的后缀结尾
startsWith(String prefix) (boolean) 测试次字符串是否以指定的前缀开头
equalsIgnoreCase(String anotherString) (boolean) 比较字符串,忽略大小写
equals(object anobject) (boolean) 比较字符串
getBytes () ( byte[] ) 适用平台的默认字符集将此String编码为字节序列,将结果存储到新的字节数组中。
getBytes(Charset charset) ( byte[] )使用给定的charset将该String编码为字节序列,将结果 存储到新的字节数组中。
hashCode () (int) 返回此字符串的哈希码
indexOf(String str) (int) 返回指定字符第一次出现的字符串内的索引
indexOf(String str, int fromIndex) ( int ) 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始
isEmpty() ( boolean ) 判断字符串是否是空串
lastIndexOf(String str) ( int) 返回指定子字符串后一次出现的字符串中的索引
lastIndexOf(String str, int fromIndex) (int) 返回指定子字符串的后一次出现的字符串中的索引,从指定索引开始向后搜索
length() (int) 返回此字符串的长度
replace(char oldChar, char newChar) (String) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar
split(String regex) (String[]) 将此字符串分割为给定的 regular expression的匹配.使用 特殊字符时需要转义
substring(int beginIndex) ( String ) 从指定索引开始(包括)截取字符串并返回
substring(int beginIndex, int endIndex) 从指定索引开始(包括)到指定索引结束(不包括)
toLowerCase() 转换小写
toUpperCase() 转换大写
trim() 去掉首尾空格
toString() 返回字符串
包装类
java 为了方便基本数据类型的操作,为每一个基本数据类型都写了一个包装类。这个包装类是引用数 据类型。
除了int是 Integer 和char是Character以外 其他都只是首字母大写。
基本数据类型转String
使用 String.valueOf() 方法进行转换
String转基本数据类型
String 类型转换成基本数据类型时,需要用到基本数据类型的包装类。
基本数据类型的包装类中有 parse...(String str) 方法或者 valueOf() 用来转换。但是需要注意, 被转换的字符串必须是可以转换成基本数据类型的字符串,否则会产生 java.lang.NumberFormatException 异常;
拆箱/装箱
拆箱是指将包装类型转换成其基本数据类型
装箱是指将基本数据类型转换成其包装类型
装箱
装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()
- 对于Float和Double类型会进行 NaN(not a number) 判断,如果是 NaN 就会准换成一个相对应的 NaN 引用
- 如果包装类的值是整数类型范围在-128 ~ 127 或者布尔类型的 true 或者 false 以及字符文字在 \u0000 和 \u007f 范围中的话, java 会直接从缓存中取值。如果超出了这个范围会 new
拆箱
拆箱操作(包装类转换到基本数据类型)调用的是 包装类对象.xxxxValue()
在 java 中基本数据类型与其包装类是自动进行类型转换的,称为自动拆箱/自动装箱
心得:
今天的学习的东西比较多,需要记忆掌握的占大多数,知识点有点总结不过来,思维导图还没时间画,笔记本做了一部分,选了两道String章节的课后作业来做,逻辑很简单,但是实现起来有点难度,可能是知识点的理解还不够,对于实例方法的应用也不能很好的运用。还需要很多的练习。
评论