这部分只有最基础部分,Java常用集合下篇文章写。
1 什么是面向过程与面向对象?你对面向对象的理解
1 面向过程侧重于做事情的步骤,面向对象侧重事情的参与者与动作
以洗衣机洗衣服为例:
面向过程描述:打开洗衣机 -放入衣服-放入洗衣粉-启动洗衣机
面向过程描述:
参与事情的对象:人:打开洗衣机 放衣服 放洗衣粉
洗衣机:洗衣 烘干
总结:面向过程更加高效,而面向对象更加易复用、扩展和维护。
2 面向对象的三大特性
封装:封装的意义在于明确标识出允许外部使用的所有成员函数和可修改的属性。对象向外暴露相应的修改属性或调用方法的接口,外部调用无需修改或关心内部如何实现。
体现:比如orm框架,操作数据库,我们不需要关心如何与数据库建立连接,SQL如何执行,只需要引入Mybatis框架,使用时只需调用相应方法。
继承:继承基类的方法和属性,并做出自己的扩展和改变,或者重写父类方法
注意:子类拥有父类对象的所有属性和方法包括私有属性和方法,但只是拥有,子类也无法访问父类的私有属性和方法。
多态:基于对象所属类不同,外部对于同一个方法的调用,执行的逻辑不同。
举个简单的例子:英雄联盟里面我们按下 Q 键这个动作:
对于亚索,就是斩钢闪
对于提莫,就是致盲吹箭
对于剑圣,就是阿尔法突袭
分类:编译时多态(静态多态):方法重载
运行时多态(动态多态):动态绑定,通常说的多态
父类类型 变量名 = new 子类对象;
变量名.方法名();
!!!!无法通过多态调用子类特有方法
多态需要满足的条件:继承、重写和向上转型,只有满足这三点才可以同一逻辑执行不同行为。
2 说说C++和Java的异同
相同点:都是面向对象语言,都使用了面向对象思想,二者都具有很好的可重用性
不同点:(太多了,这里只是一部分)
Java为解释型语言,源文件-JVM编译器编译成-字节码-JVM解释执行
C++为编译型语言,源码经过编译和链接后生成可执行的二进制代码
所以Java执行效率一般情况下低于C++,当由于JVM的存在,Java程序可以跨平台执行
Java为纯面向对象语言,所有代码(包括函数,变量)必须在类中实现,除了基本数据类型外,所有类型都是类,所有类的祖类为Object。C++由于兼容C,可以定义全局变量和全局函数。
C++支持多继承,Java不支持多继承但Java引入了接口,可以同时实现多个接口。
C++需要开发人员手动管理内存,Java提供垃圾回收器和回收算法管理内存。
3 访问修饰符访问范围
4 JDK、JVM与JRE的关系
JVM时程序运行的核心,只有JVM什么也赶不了,它需要字节码文件。 有了字节码文件也无法完成编译,他需要一个基本的类库:比如怎么操作文件、怎么连接网络等。而JER就是这些基础操作类库,JVM标准加上基础类库构成了Java的运行时环境,也就是我们常说的JRE(Java Runtime Environment)
JDK主要包含三部分
第一部分就是Java运行时环境,JVM。
第二部分就是Java的基础类库,这个类库的数量还是非常可观的。(jdk目录下的rt.jar,里面有String等)
第三部分就是Java的开发工具,如javac、java、jar 。
5 基础考察-类型转换问题
// 代码块1
short s1 = 1; s1 = s1 + 1;
// 代码块2
short s1 = 1; s1 += 1;
其实,s1 += 1 相当于 s1 = (short)(s1 + 1)
代码块1编译报错,错误原因是:不兼容的类型: 从int转换到short可能会有损失。
代码块2正常编译和执行
6 基础考察-包装类
public static void main(String[] args) {
Integer a = 128, b = 128, c = 127, d = 127;
System.out.println(a == b);//flase
System.out.println(c == d);//true
}
答案是:false,true。
执行 Integer a = 128,相当于执行:Integer a = Integer.valueOf(128),基本类型自动转换为包装类的过程称为自动装箱(autoboxing)。
Integer源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
在 Integer 中引入了 IntegerCache 来缓存一定范围的值,IntegerCache 默认情况下范围为:-128~127。
本题中的 127 命中了 IntegerCache,所以 c 和 d 是相同对象,而 128 则没有命中,所以 a 和 b 是不同对象。
但是这个缓存范围时可以修改的,可能有些人不知道。可以通过JVM启动参数:-XX:AutoBoxCacheMax=<size> 来修改上限值
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wkc_ii/article/details/125877743

402

被折叠的 条评论
为什么被折叠?



