1-5
面向对象
什么是面向对象?
面向过程更加重视步骤以及顺序,面向对象更加重视有哪些参与者需要做些什么
面向过程高效,面向对象更加易于复用、拓展、维护
面向对象:封装、继承、多态
封装:明确的标注外部可以使用的成员函数以及数据
内部细节对外部调用封闭,外部调用不需要关心内部实现也不需要修改
1.setName()有自己的内部逻辑,由本身来决定不能让外部胡乱的修改
2.math库 只需要知道如何调用而不用关心内部如何实现的
继承:继承基类方法,做出自己的改变或拓展
子类共性的方法或者属性直接使用父类的,不需要自己定义共性的东西,只要拓展自己个性化的东西即可。
多态:继承、方法重写、父类引用指向子类对象
外部对同一个方法调用实现执行的逻辑不同
父类引用指向子类对象所调用的方法必须父类中也要有,重写或者继承过来
JDK、JRE、JVM三者区别
JDK是开发工具,给开发人员用,jdk包含jre、、、、jdk=jre+Java工具(Java、javac)
JRE是运行环境,给运行Java程序的人使用,jre包含jvm、、、jre=jvm+类库
JVM是虚拟机
jvm将。class文件翻译成机器码反应到操作系统执行
==和equals
==是对比的栈,栈中储存基本数据类型和地址
equals比较的内容,比较堆中,使用new的话就是在堆中新开一个空间
String中equals已经重写了,注意字符串是不是在常量池里有
用=定义String是放在常量池中,new的话就是在堆里面,用=赋值时,要看常量池中有没有
简述final的作用
最终的
类:不可以有子类
方法:不可被覆盖,不可被重载
变量:不可更改,全局必须声明初始值才可以,局部变量一定要在使用时,显式的赋值
修饰基本类型数据(不可以更改数值0)和引用类型的数据(不可以在引用其他变量,但是引用的值是可以改变的)
为什么局部内部类以及匿名内部类只能访问局部final变量
内部类和外部类时同一个级别,不会因为方法执行结束而被回收,不会被销毁,所以如果外部类被销毁时,但是内部类没有被销毁,所以如果不是final就是引用了一个不存在变量。内部类实际访问的是,外部类的一份拷贝,拷贝到了内部类里面,所以两个变量要保持一致,所以必须要不可以随意更改
String、StringBuffer、Stringbuilder区别以及使用场景
String是final修饰的,是一个不可变的,每次操作都会产生一个新String对象
StringBuffer、Stringbuilder都是对元对象进行操作,所以如果要频繁操作就使用StringBuffer、Stringbuilder
StringBuffer线程安全、Stringbuilder线程不安全(需要额外的加锁,多线程共享变量)
StringBuffer每一个方法都加了synchronized修饰
性能:Stringbuilder>String Buffer>String
优先使用Stringbilder,如果多线程使用共享变量使用StringBuffer,再不会对字符串进行大量操作时可以使用String