Java面试知识点解析-02 —— Java基础知识点

借参加过的多场Java开发面试,应聘岗位均为Java开发方向,在不断的面试中,又仔细对Java知识点进行复习和总结,也算是重新学习一下Java吧。

推荐收藏链接:Java 面试知识点解析


6)Java 和 C++ 的区别:

解析:虽然我们不太懂C++,但是就是会这么问,尤其是三面(总监级别)面试中。

答:

  • 都是面向对象的语言,都支持封装、继承和多态
  • 指针:Java不提供指针来直接访问内存,程序更加安全
  • 继承: Java的类是单继承的,C++支持多重继承;Java通过一个类实现多个接口来实现C++中的多重继承; Java中类不可以多继承,但是!!!接口可以多继承
  • 内存: Java有自动内存管理机制,不需要程序员手动释放无用内存
7)“static” 关键字是什么意思?

答:“static” 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

面试官:Java中是否可以覆盖(override)一个 private 或者是 static 的方法?

答:Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。

Java 中也不可以覆盖 private 的方法,因为 private 修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到 private 变量或方法的,当然也不能覆盖。

8)Java 是值传递还是引用传递?

解析:这类题目,面试官会手写一个例子,让你说出函数执行结果。

答:值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。

一般认为,Java 内的传递都是值传递.,Java 中实例对象的传递是引用传递,Java 是值传递的!

  • 我们先来看一个例子:
    在这里插入图片描述

这是一个很经典的例子,我们希望在调用了 swap() 方法之后交换 arg1 和 arg2 的值,但事实上并没有,为什么会这样?

这就是因为 Java 是值传递的,也就是说,我们在调用一个需要传递参数的函数时,传递给函数的参数并不是我们传递进去的参数本身,而是它的一个副本,我们改变了数据其实只是改变了副本的数据而已,并不会对原来的参数有任何的改变。

  • 再来看一个例子:
    在这里插入图片描述

我们自己定义了一个内部类 Person ,该类只有一个 int 类型的 age 属性,然后有 getter/setter ,我们希望通过 changeAge() 函数来改变 Person 对象的 age 属性,为什么这次成功了呢?

你依然可以理解为,主函数将 person 复制了一份到 changeAge 函数中去,最终还是只改变了 changeAge 中复制的那一份参数的值,而原本的参数并没有改变,但 changeAge 中的那一份和原本的参数指向了同一个内存区域!

9)JDK 中常用的包有哪些?

答:java.lang、java.util、java.iojava.net、java.sql。

10)JDK,JRE 和 JVM 的联系和区别?

答:

  • JDK 是 Java 开发工具包,是 Java 开发环境的核心组件,并提供编译、调试和运行一个 Java 程序所需要的所有工具,可执行文件和二进制文件,是一个平台特定的软件。

  • JRE 是 Java 运行时环境,是 JVM 的实施实现,提供了运行 Java 程序的平台。JRE 包含了 JVM,但是不包含 Java 编译器 / 调试器之类的开发工具。

  • JVM 是 Java 虚拟机,当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理 / 垃圾回收和安全机制等。

这种独立于硬件和操作系统,正是 Java 程序可以一次编写多处执行的原因。

区别:

  • JDK 用于开发,JRE 用于运行 Java 程序;
  • JDK 和 JRE 中都包含 JVM;
  • JVM 是 Java 编程语言的核心并且具有平台独立性。

我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。扫描二维码加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/alogtech6/article/details/89453452