小言_互联网的博客

【备战面试】每日10道面试题打卡-Day1

222人阅读  评论(0)

本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容

1、JVM、JRE和JDK的关系?

答:JDK里面包含了JRE和JVM,JRE里面包含了JVM,它们分别是:

  • JVM:全名为Java Virtual Machine,是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
  • JRE:全名为Java Runtime Environment,是Java的运行环境,里面包括了Java虚拟机和Java程序所需的核心类库,核心类库主要就是java.lang包,里面包含了运行Java程序必不可少的系统类。
  • JDK:全名为Java Development Kit,它是提供给Java开发人员使用的,其中包含了Java的开发工具和JRE,所以说安装了JDK,就不需要单独再去安装JRE了。其中的开发工具有:编译工具(javac.exe),打包工具(jar.exe)等。

2、Java语言有哪些特点?

答:Java有以下七个特征:

  • 简单易学(Java语言的语法与C语言和C++语言很接近)
  • 面向对象(封装,继承,多态)
  • 平台无关性(Java虚拟机实现平台无关性)
  • 支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)
  • 支持多线程(多线程机制使应用程序在同一时间并行执行多项任务)
  • 健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
  • 安全性

3、Java和C++的区别有哪些?

答:Java和C++的区别有:

  • Java与C++都是面向对象的语言都支持封装、继承和多态
  • C++中有指针,但是Java中不提供指针来直接访问内存,程序内存更加安全。
  • Java的类是单继承的,C++支持多重继承(虽然Java的类不可以多继承,但是接口可以多继承)。
  • Java自动内存管理机制,不需要程序员手动释放无用内存。

4、Java有哪些数据类型?

答:Java语言是强类型语言,对于每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间,数据类型又分为基本数据类型和引用数据类型:

基本数据类型:

  • 整数类型:byte,short,int,long
  • 浮点数据类型:float,double
  • 字符型:char
  • 布尔型:boolean

引用数据类型:

  • 类:class
  • 接口:interface
  • 数组:[]
  • 字符串(特殊):String

这里给字符串类型加了个特殊,为什么说他特殊呢?详见:还在问String属于什么数据类型

一般来说,引用类型在堆里,基本类型在栈里

5、访问修饰符 public、private、protected,以及不写(默认)时的 区别?

private

  • 同类内可见
  • 使用对象:变量、方法

default

  • 同包内可见,不使用任何修饰符。
  • 使用对象:类、接口、变量、方法。

protected

  • 同包内的类所有子类可见。
  • 使用对象:变量、方法。

public

  • 所有类可见。
  • 使用对象:类、接口、变量、方法。

6、面向对象和面向过程的区别?

答:面向过程是具体化、流程化的,解决一个问题,你需要一步一步地分析,一步一步地实现。面向对象是模型化的,你只需要抽象出一个类,类就像一个封闭的盒子一样,这个盒子里面有一些解决问题的方法,我们在解决问题时直接去调用这个盒子里面的方法就行了,至于这些方法是怎么实现的我们就不需要管了,我们只需要会调用就行。

面向过程

  • 优点:性能比面向对象高,因为面向对象在创建对象时开销比较大,比较消耗资源。
  • 缺点:没有面向对象的易维护,易复用,易扩展。

面向对象

  • 优点:易维护,易复用,易扩展,由于面向对象有封装、继承、多态的特性,我们可以设计出来低耦合的系统,使系统更加灵活,更加易于维护。
  • 缺点:性能比面向过程底。

7、面向对象的三大特征是什么?

答:面向对象的三大特征是封装、继承和多态,分别是:

  • 封装封装将同一类事物的特征和功能包装在一起,只对外暴露需要调用的接口。封装也称为信息的隐藏,在Java中接口是体现封装最常用的方法,在接口中我们没有任何功能的实现(具体实现都交给实现类),只是定义了一系列抽象的方法声明用于外部调用。
  • 继承:继承是Java中面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类可以吸收已有的属性、行为,并扩展新的能力。Java中不支持多继承,但是支持实现多接口。
  • 多态:封装和继承都是为多态来服务的,多态是指同一个行为具有多个不同的表现形式。在Java中方法的重载和重写是实现多态的2种方式。
    • 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。方法重载体现了编译时的多态性
    • 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,重载对返回类型没有特殊的要求。方法重写体现了运行时的多态性

多态的三要素:继承 、重写、父类指向子类引用

8、抽象类和接口有哪些区别?

答:抽象类是用来捕捉子类的通用特性的,接口抽象方法的集合
从设计层面来讲,抽象类对类的抽象,是一种模板设计接口行为的抽象,是一种行为的规范

相同点

  • 接口和抽象类都不能被实例化
  • 都位于继承的顶端,用于被实现或继承。

不同点

9、成员变量与局部变量的区别有哪些?

答:成员变量:方法外部,类内部定义的变量 ;局部变量:类的方法中的变量。 成员变量和局部变量的区别如下:

1. 作用域

  • 成员变量:针对整个类内有效。
  • 局部变量:只在某个范围内有效(一般指的就是方法,语句体内)。

2. 存储位置

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
  • 局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结
    束后,就自动释放。

3. 生命周期

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失
  • 局部变量:当方法调用完,或者语句结束后,就自动释放。

4. 初始值

  • 成员变量:有默认初始值
  • 局部变量:没有默认初始值,使用前必须赋值

使用原则

在使用变量时需要遵循的原则为:就近原则,首先在局部范围找,有就使用;接着在成员位置找(由小变大)。

10、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性

重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不 同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父
类,访问修饰符大于等于父类
(里氏代换原则);

如果父类方法访问修饰符为private则子类中就不是重写。


转载:https://blog.csdn.net/apple_51673523/article/details/129278928
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场