CGBTN2109-DAY11复习总结

Posted 程序媛 泡泡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGBTN2109-DAY11复习总结相关的知识,希望对你有一定的参考价值。

DAY 11 复习

学习API阶段的前提:

  1. API是一些别人制定或者写好的应用程序接口/功能
  2. 学习的重点:学习这些功能如何更好的使用,怎么使用,使用后有什么效果
  3. 比如:怎么创建某个类的对象–看构造方法
    怎么使用某个功能–需不需要传参数,传什么样的参数
  4. 比如:这个方法有什么样的结果/执行效果:结果看返回值类型,效果要在IDEA去尝试
  5. 所以我们可以把API手册当成一个“字典”,哪里不会查哪里

1. 顶级父类 java.lang.Object

  1. Object是Java中所有类的超类,Java中的类都直接或者间接的继承自Object
  2. 如果一个类没有明确的指定父类,那么这个类默认继承Object
  3. java.lang包是Java的核心包,无需导包,会自动导入

1.1 hashCode()

作用:返回对象对应的哈希码值,Object中默认实现根据对象的地址值生成哈希码值,对象不同,哈希码值应该不同
默认实现:根据对象的地址值生成一个唯一的哈希码值
–重写后:根据传入的属性值生成哈希码

1.2 toString()

重写前:打印对象的地址值

注意:我们要牢记Object中的默认实现方式,只要与默认实现不同,说明当前类就重写了Object中的实现
至于重写后是什么样的效果,得看具体的重写方式:
自定义类Student重写后: 打印Student类型 + 属性 +属性值【这个是我们自己写的类】
String类重写后:打印的是字符串的具体内容【Java自带的类】

1.3 equals()

重写前:等等比较,比较的是两个对象的地址值
注意:我们要牢记Object中的默认实现方式,只要与默认实现不同,说明当前类就重写了Object中的实现
至于重写后是什么样的效果,得看具体的重写方式:
自定义类Student重写后:比较两个对象的类型+属性+属性值
String类重写后:比较的是两个字符串的具体内容

注意1:toString()不是我们主动调用的,是println()层层调用
如果你打印某个类的对象时,不想打印地址值,可以在这个类里添加重写的toString()
注意2:equals()与hashCode()的重写要一致,要重写都重写,要不重写都不重写

查找类的4种方式:

  1. 查API手册 点这里:API手册使用指导
  2. 连点两下Shift打开IDEA的搜索,注意勾选"include non-Project items",再搜Object
  3. 按住Ctrl点hashCode()
  4. 在拓展库External Libraries找到jdk1.8->rt.jar->java.lang.Object
    public class TestObject {

2 String 类

  1. 底层的结构是字符数组char[ ]
  2. String的常用方法

String API总结

int hashCode() 返回此字符串的哈希码。
boolean equals(Object anObject) 将此字符串与指定的对象比较,比较的是重写后的串的具体内容
String toString() 返回此对象本身(它已经是一个字符串!)。

int length() 返回此字符串的长度。
String toUpperCase() 所有字符都转换为大写。
String toLowerCase() 所有字符都转换为小写
boolean startsWith(String prefix) 测试此字符串是否以指定的元素开头。
boolean endsWith(String suffix) 测试此字符串是否以指定的字符串结束。

char charAt(int index) 返回指定索引/下标处的 char 值/字符
int indexOf(String str) 返回指定字符在此字符串中第一次出现处的索引。
int lastIndexOf(String str) 返回指定字符在此字符串中最后一次出现处的索引。
String concat(String str) 将指定字符串连接/拼接到此字符串的结尾,注意:不会改变原串
String[] split(String regex) 根据给定元素来分隔此字符串。

String trim() 返回去除首尾空格的字符串
byte[] getBytes() 把字符串存储到一个新的 byte 数组中
String substring(int beginIndex) 返回一个新子串,从指定下标处开始,包含指定下标
String substring(int beginIndex, int endIndex) 返回一个新子串,从执定下标开始,到结束下标为止,但不包含结束下标
static String valueOf(int i) 把int转成String

3 String的创建方式

方式一:

char[] values = {‘a’,‘b’,‘c’};
String s1 = new String(value);
注意:每new一次,创建一个String对象,存在堆中

方式二:

String s = “abc”;
注意:存在堆中的常量池中,有高效的效果,如果是第二次创建,不会新建
注意:== 比较的如果是引用类型,那么是地址值
注意:String重写了Object中的toString(),所以可以直接打印字符串的具体内容
String重写了Object中的equals(),所以比较的也是两个字符串的具体内容

4 内部类

  1. 我们可以把内部类看作是外部类的一个特殊的成员
  2. 内部类可以直接使用外部类的所有资源,包括私有资源
  3. 外部类想要使用内部类的资源,需要创建内部类的对象才能使用

4.1 成员内部类

位置:类里方法外

被private修饰

被私有化的内部类在main()中无法直接创建其对象
可以在私有内部类所处的外部类当中,创建一个公共的方法供外界调用,这个方法就可以用来创建私有内部类的对象并且调用私有内部类的功能

被static修饰

static:静态,优先于对象加载,静态可以通过类名直接调用,静态只能调用静态
静态内部类可以不创建外部类对象,直接通过外部类类名.的方式创建内部类对象
如果静态内部类中还有静态方法,那么我们可以不创建一个对象,直接通过链式加载的方式使用这个静态方法

4.2 局部内部类

位置:方法里
直接通过外部类创建对象,调用局部内部类所处的这个方法时,并不会触发局部内部类的功能!
所以如果想要使用局部内部类的功能,需要在局部内部类所处的方法中创建局部内部类的对象并且调用这个局部内部类的功能!

4.3 匿名内部类

匿名对象:
没有名字的对象,只能使用一次,一次只能调用一个方法,如果想要调用多次,或者是多个方法,就需要创建普通对象,或者是多个匿名对象才能完成
匿名内部类通常与匿名对象结合在一起使用

new Inter1(){ 我是一个匿名内部类,我来实现方法 }.eat();

以上是关于CGBTN2109-DAY11复习总结的主要内容,如果未能解决你的问题,请参考以下文章

CGBTN2109-DAY13复习总结

CGBTN2109-DAY04总结复习

CGBTN2109-DAY12总结复习

CGBTN2109-DAY17总结复习

CGBTN2109-DAY14总结复习

CGBTN2109-DAY15总结复习