JAVA基础复习(三)

JAVA基础复习(三),第1张

1.三大特性

封装:提供一些方法供外部访问对象内部信息

继承:

1.子类继承父类的所有变量和方法,但是不能访问父类的私有变量和方法。

2. 子类可以增加自己独有的变量和方法

3. 子类可以重写父类的方法

多态:

父类的引用指向子类,只能调用父子类都有的方法,如果子类重写了方法,则调用的实际是子类的方法。

2.接口和抽象类

共同之处:1.都不能实例化 2.都可以有默认实现(接口可以使用default,java8)3.都可以包含抽象方法

区别:1.可以实现多个接口,只能继承一个类 2.接口的成员变量只能是public static final,类的成员变量默认是default,在子类可以重定义。

3.深拷贝、浅拷贝、引用拷贝

引用拷贝两个引用指向堆中同一个对象。

浅拷贝新创建一个对象,对象中的基本类型会复制一份,与原数值互相独立,但是对象中有内部对象,则直接复制引用地址,拷贝对象和原对象中的内部对象会同步改动。

深拷贝就是不同的对象,在堆中新建。

4.==和equals

基本数据类型 == 比较值,引用数据类型 ==比较对象内存地址

equals用来判断对象是否相等,不能用来判断基本数据类型变量是否相等。String是特例,equals重写过直接比值

5.hashcode

重写equal却不重写hashcode,在插入map时候因为是先计算hashcode,可能导致两个equal为true的类因为hashcode不同 被重复插入。

6.String不可变,StringBuilder和StringBuffer继承自AbstractStringBuilder,使用字符数组保存字符串。

Sring和Stringbuffer线程安全。

String不可变是因为String内部的字符串数组是私有的并且不提供修改字符串的方法,同时作为final类,String不能被继承,子类无法破坏不可变性。

字符串相加实际是使用Stringbuilder append。循环相加,会创建过多StringBuilder。

字符串常量池,通过初始化创建的字符串都会放入,且可重复使用

String str = new String("str");会创建1-2个字符串对象

如果之前常量池中有,只会在堆中创建一个对象。如果没有,会在堆中创建1个对象,在字符串常量池中创建一个。

String str = "str"

如果之前常量池中有,只会返回对象引用。如果没有,会在字符串常量池中创建1个对象,返回对象引用。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/738159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存