【面试题】常见面试题-java基础篇

?????博主主页:爪哇贡尘拾Miraitow
??创作时间:??2022年2月7日??
??内容介绍:开始记录面试题
??参考资料: 公众号文章
?简言以励:列位看官,且将新火试新茶,诗酒趁年华
??内容较多有问题希望能够不吝赐教??
?? 欢迎点赞 ?? 收藏 ?留言 ??

【面试题】常见面试题-java基础篇

简单来说就是JDK是Java的开发工具,JRE是Java程序运行所需的环境,JVM是Java虚拟机.它们之间的关系是JDK包含JRE和JVM,JRE包含JVM

2、JAVA语言特点

  • Java是一种
  • Java通过Java虚拟机实现了平台无关性,
  • 支持
  • 支持
  • 具有较高的和

3、java面向对象编程的三大特征

3.1封装

:

把一个对象的属性私有化(private),同时提供一些可以被外界访问的属性的方法(get set),如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

3.2 继承

:

是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类/基类),得到继承信息的被称为子类(派生类)。

3.3多态

:

分为和。要实现多态需要做两件事:一是子类继承父类并重写父类中的方法,二是用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。

总结:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。

4、为什么 Java 中只有值传递/h2>

(call by value)表示方法接收的是调用者提供的值,
(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。它用来描述各种程序设计语言(不只是 Java)中方法参数传递方式。Java 程序设计语言总是采用按值调用。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。

下面通过 3 个例子来给大家说明

4.1 example 1 基本数据类型

example 1

在 swap 方法中,a、b 的值进行交换,并不会影响到 num1、num2。因为,a、b 中的值,只是从 num1、num2 的复制过来的。也就是说,a、b 相当于 num1、num2 的副本,副本的内容无论怎么修改,都不会影响到原件本身。

通过上面例子,我们已经知道了一个方法不能修改一个基本数据类型的参数,而对象引用作为参数就不一样,请看 example2.

4.2 example 2 对象类型

example 2

首先要知道,数组类型也是一个对象,array 是 arr 的拷贝也就是说array也是一个对象的引用,也就是说 array 和 arr 指向的是同一个数组对象。 因此外部对引用对象的改变会反映到所对应的对象上。

【面试题】常见面试题-java基础篇

结果:

解析

如果是,那么s1和s2所引用的对象应该被交换了,然而,方法并没有改变存储在变量 s1 和 s2 中的对象引用。swap 方法的参数 x 和 y 被初始化为两个对象引用的拷贝,这个方法交换的是这两个拷贝,在方法结束时参数变量X和y被丢弃了。原来的变量s1和s2仍然引用这个方法调用之前所引用的对象

总结

Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。

下面再总结一下 Java 中方法参数的使用情况:

  • 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
  • 一个方法可以修改一个对象类型对的参数。
  • 一个方法不能让对象参数引用一个新的对象。

参考:

《Java 核心技术卷 Ⅰ》基础知识第十版第四章 4.5 小节

重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写

方法的重写(override)两同两小一大原则:

  • 方法名相同,参数类型相同
  • 子类返回类型小于等于父类方法返回类型
  • 子类抛出异常小于等于父类方法抛出异常
  • 子类访问权限大于等于父类方法访问权限

另外,如果父类方法访问修饰符为 private 则子类就不能重写该方法

5、 equals和==

: 记住此句话即可(基本数据类型==比较的是值,引用数据类型比较的是内存地址)。

: 它的作用也是判断两个对象是否相等

  • 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
  • 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

举个例子:

【面试题】常见面试题-java基础篇

可以发现:我们重写了Person的equals()。但是,很奇怪的发现:HashSet中仍然有重复元素:p1 和 p2。由此验证了我们刚才的推理。()

7.1 hashCode()与equals()的相关规定

  1. 如果,则一定也是相同的
  2. 两个,对两个对象分别调用equals方法都返回true
  3. 两个对象有相同的hashcode值,它们也不一定是相等的()
  4. hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)

因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖

推荐阅读:Java hashCode() 和
equals()的若干问题解答

8、异常

8.1 Java异常类层次结构图

【面试题】常见面试题-java基础篇

线程安全性

String 中的的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了或者所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

StringBuffer 补充

说明:StringBuffer 中并不是所有方法都使用了 Synchronized 修饰来实现同步:

【面试题】常见面试题-java基础篇

举个栗子:

Class.forName(String className)返回的是一个类,在这个过程中,会把该,即这个类的静态代码会执行,我们主要就是为了要个静态代码块(java.sql.DriverManager.registerDriver(new Driver());)执行才加载这个驱动的。

【面试题】常见面试题-java基础篇

输出结果

可以看到 ArrayList 和 ArrayList 的原始类型是相同,在编译成字节码文件后都会变成 List ,JVM看到的只有 List ,看不到泛型信息,这就是泛型的类型擦除。
在看下面这段代码

【面试题】常见面试题-java基础篇

输出

来源:爪哇贡尘拾Miraitow

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月6日
下一篇 2022年1月6日

相关推荐