Java成神之路的解析

本人总结了2019版Java成神之路的每道题的解析和答案,网上搜集的资源仅供参考。
一、基础篇
1.面向对象
什么是面向对象(OOP)
面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;
Java面向对象三要素就是,封装,继承,多态

2.面向过程(POP)
典型的是C/C++的结构体,结构体里只有变量,没有处理变量的方法,需要专门编写处理变量的方法。

3.面向对象的三大基本特征和五大基本原则
单一职责原则(SRP)
开放封闭原则(OCP)
里氏替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)

五个基本原则:
单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的
Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

4.平台无关性
Java如何实现的平台无关,都有统一的JVM运行

5.JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

6.值传递、引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

7.为什么说Java中只有值传递
JAVA中的参数传递全是以值传递的。是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法

8.封装、继承、多态
什么是多态、方法重写与重载
封装:代码的数据和代码进行包装,只提供对外的接口。
继承:使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
多态:多态就是同一个接口,使用不同的实例而执行不同操作。

Java的继承与实现
继承:如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同部分都放到父类里,让他们都继承这个类。

实现:如果多个类处理的目标是一样的,但是处理的方法方式不同,那么就定义一个接口,也就是一个标准,让他们的实现这个接口,各自实现自己具体的处理方法来处理那个目标

9.无参构造函数与默认构造函数
看new一个对象时候要不要传参。

10.类变量、成员变量和局部变量
类定义在类上的静态变量
成员定义在方法体外类上的变量
局部定义在方法体中的变量

11.成员变量和方法作用域
成员变量:(1)定义在类里,方法之外的变量。
(2)成员变量可以不显式初始化,它们可以由系统设定默认值;
(3)成员变量在所在类被实例化后,存在堆内存中

局部变量:(1)定义在方法体内部的变量。
(2)局部变量没有默认值,所以必须设定初始赋值。
(3)局部变量在所在方法调用时,存在栈内存空间中

Java基础知识
基本数据类型
1.7种基本数据类型:整型、浮点型、布尔型、字符型

2.整型中byte、short、int、long的取值范围

3.什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?
用来表示小数的类型,float(32位),double(64位),因为截取误差会产生不必要的金额损失

4.自动拆装箱
什么是包装类型、什么是基本类型、什么是自动拆装箱
Integer Boolean Float

5.Integer的缓存机制
会自动保存128的数值但是new Integer(10) != new Integer(10)

6.String
字符串的不可变性

7.JDK 6和JDK 7中substring的原理及区别、
JDK6中是使用1.count 2.offset 3.char[] value 进行substring,改变的只是count,offset
JDK7中是定义了一个新的字符串。

8.replaceFirst、replaceAll、replace区别、
replace,replaceAll替换了所有的字符串,replaceAll 是可以使用正则表达式,replaceFirst只能替换第一个

9.String对“+”的重载、字符串拼接的几种方式和区别
“+”底层还是用了StringBuilder来进行拼接
StringBuilder是多线程,不安全的
StringBuffer是单线程,安全的

10.String.valueOf和Integer.toString的区别
java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。

而valueOf(Object obj)对null值进行了处理,不会报任何异常。但当object为null 时,String.valueOf(object)的值是字符串”null”,而不是null

11.switch对String的支持
JDK7版本增加了switch 对 string 的支持

12.字符串池、常量池(运行时常量池、Class常量池)、intern

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值