今天是从基础开始备战春招第一天,要从基础开始背了,毕竟很多基础也都忘记了,牢记初心,不忘使命。
主要追求用一个通俗易懂的方式记住题目。
首先面向对象要和面向过程进行对比记忆。这是两种处理问题的角度。
面向对象更加注重每一个步骤和过程,面向对象更加注重事情有哪些参与者,以及各自需要去做什么。
比如洗衣服:
面向过程:第一步是打开洗衣机,第二步是干什么,第三步是干什么
面向对象:洗衣服这件事情,有人,洗衣机两个对象。
人:做什么
洗衣机:做什么。
对比记忆:面向过程更加高效率(别记错了,对,就是面向过程更加高效,因为它遇见事情直接去做就好了,没必要拆分对象,然后对象再去做什么。)
但是面向对象是更加可复用,易扩展的,便于后期维护。
其次,谈到面向对象,三大特性必不可少。
封装,继承,多态。
封装:在于明确标识 哪些可以被外部使用。
例如JavaBean,所有的属性都是私有化的,get,set方法对外进行调用。
orm框架:操作数据库的,我们不关心SQL,不关心内部细节,只需要引入mybatis。
继承:继承基类的方法,并且做出自己的改变。
父类有的东西,子类直接继承,父类没有,子类自己扩展即可。
多态:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
继承,方法重写,父类的引用指向子类的对象。
没办法调用子类特有的功能。
JDK:Java开发工具
JRE:Java运行环境
JVM:虚拟机
描述:JDK最大,里面是JRE,和Java工具。
JRE里面是bin(jvm),和lib(类库)。
图片看一下:
基本数据类型:==和equals都是比较数。
引用数据类型: = =是比较地址,equals是比较数据。
object中 equal 就是==。
hashcode和equalshashcode:哈希码,散列码,返回int值,确定该对象在hash表中的索引。
为什么要有这个呢?
举例:HashSet如何检查重复。在插入对象之前,先根据hashcode判断是否有重复值,如果二者连hashcode都不同,肯定对象也就是不相同的,如果碰巧hashcode值相同,再去equals检查对象是否相同,这样就减少了对比次数。
总结:
最终的
修饰类:类不可继承修饰方法:方法不能被子类覆盖,但是可以重载。修饰变量:相当于常量,赋值之后不可改变,但是没说一定要声明的时候就赋值,可以后面赋值也行。
修饰成员变量:
修饰类变量:静态初始化中指定初始值或者声明改变粮食指定初始值。成员变量,可以在非静态初始化块,声明改变量或者构造器中执行初始值。
修饰局部变量:
局部变量由程序员显示初始化。一次赋值。
举例:
修饰基本数据类型和引用数据类型:
基本数据类型:声明之后不能改引用数据类型:初始化之后不能指向其他对象,但是引用值可变。
举例:
为什么局部内部类和匿名内部类只能访问局部final变量?
答:内部类和外部类 是同一个级别的。
而当外部类方法结束,局部变量会销毁,但是对象可能还存在,此时会互相矛盾。局部变量final之后,保持了一致性。
String:不可变,final修饰,每次操作产生新的对象。
StringBuffer:可变,线程安全。(洗脑:buffer==buff,红蓝buff拿着肯定更加有安全感啊!),synchronized修饰。
StringBuilder:可变,不安全。
性能:StringBuilder > StringBuffer > String
场景:经常变化的字符串用后面两个,有限StringBuilder,因为效率高,多线程时用StringBuffer。
overload和override的区别,其实一点关系都没有。
直接总结:
抽象类中科院存在普通成员函数,接口中只有public abstract。抽象类中的成员变量科院是各种类型的,接口中只有public staticfinal抽象类只有一个,接口有多个。
接口的设计目的:对类的行为进行约束,约束行为的有无,而不是约束行为的具体内容。
抽象类的设计目的:代码复用,多个类,有一个部分的相同的行为时,可以把其抽象出来,变成抽象类,达到代码复用的目的。
抽象类:is a的关系
接口:like a的关系
抽象类的功能远超过接口,但是抽象类的代价高。所有设计阶段 接口会降低难度。
List 和Set List:有序,可重复,允许多个null,可以用iterator,还可以get(i)按下标取出。
Set:无序,不可重复,最多一个null,只能用iterator取出元素,再逐一遍历。
OKKKKKKKKKKKKKKKK,今天时间短,暂时到这里为止。
准备下班~