JAVA知识回顾【二】
13.字符串特点
String类型不可变,线程安全
Stringbuffer可变,线程安全
Stringbuilder可变,线程安全
14.字符串常量池
1.构造//都会在常量池存入字符串
直接赋值:String s = “string”;//返回池内对象
new方法:String s = new String ();//返回堆内对象
2.拼接
常量+常量:编译器优化//常量池中一个对象
变量+?:new Stringbuilder.append().tostring()
//常量池中变量+新的对象
3.比较
==比较地址
equal比较内存
15.修饰符(权限)
public:所有都可以访问。
protect:包内或者包外子类。
default:包内。
private:类内。子类不可以访问。
16.修饰符(非权限)
abstract:
类:抽象类,不可被实例化。不能同时被final修饰。只能被继承从而实现抽象方法。抽象类中可以有抽象方法。有抽象方法不一定是抽象类。
方法:抽象方法。只有声明。没有实现。子类必须实现抽象类中所有方法才可以实例化。不能用private修饰,也不能用static修饰。
final:
类:final类不能被继承。
方法:final方法不能被重写。
final变量不可以被修改。
static:
变量:类变量
方法:类方法
类:可以被单独实例化,且不需要外界交互的类。
代码块:类加载的时候执行的代码块。
17.引用传递和值传递
引用的概念:
C++:新建一个变量存储另一个变量的地址。
Java:新建一个变量指向堆中的内容。
java没有c++概念里的引用,因此没有引用传递。在java中引用作为数据类型的一种,因此地址传递也被叫做值传递。
18.引用的分类
强引用:默认引用,一直存活。
软引用:jvm内存不足时回收。
弱引用:引用对象没有强引用时回收。
虚引用:任何时刻都可以回收。
19.初始化流程
程序从main方法开始执行。main方法执行之前会进行类的初始化。依次加载父类的静态部分和子类的静态部分。
对象的初始化发送在创建对象的时候,依次执行父类的非静态变量和代码块,最后执行构造方法。
总结:类的初始化时,依次加载静态部分,再到子类的静态。而对象的初始化时,依次加载非静态部分,任何构造函数,之后是子类的。
20.构造器,this,super关键字
构造器最后执行。子类构造器默认执行父类构造方法。
21.浅拷贝和深拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象,是“值”而不是“引用”。