【2021最新版】JavaOOP面试题总结(99道题含答案解析)

文章目录

    • 1、什么是B/S架构?什么是C/S架构
    • 2、Java都有那些开发平台?
    • 3、什么是JDK?什么是JRE?
    • 4、Java语言有哪些特点
    • 5、面向对象和面向过程的区别
    • 6、什么是数据结构?
    • 7、Java的数据结构有那些?
    • 8、什么是OOP?
    • 9、类与对象的关系?
    • 10、Java中有几种数据类型
    • 11、标识符的命名规则。
    • 12、instanceof关键字的作用
    • 13、什么是隐式转换,什么是显式转换
    • 14、Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型
    • 15、什么是拆装箱?
    • 16、Java中的包装类都是那些?
    • 17、一个java类中包含那些内容?
    • 18、那针对浮点型数据运算出现的误差的问题,你怎么解决?
    • 19、面向对象的特征有哪些方面?
    • 20、访问修饰符 public,private,protected,以及不写(默认) 时的区别?
    • 21、String 是最基本的数据类型吗?
    • 22、flfloat f=3.4;是否正确?
    • 23、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1; 有错吗?
    • 24、重载和重写的区别
    • 25、equals与==的区别
    • 26、++i与i++的区别
    • 27、程序的结构有那些?
    • 28、数组实例化有几种方式?
    • 29、Java中各种数据默认值
    • 30、Java常用包有那些?
    • 31、Object类常用方法有那些?
    • 32、java中有没有指针?
    • 33、java中是值传递引用传递?
    • 34、实例化数组后,能不能改变数组长度呢?
    • 35、假设数组内有5个元素,如果对数组进行反序,该如何做?
    • 36、形参与实参区别?
    • 37、构造方法能不能显式调用?
    • 38、什么是方法重载?
    • 39、构造方法能不能重写?能不能重载?
    • 40、内部类与静态内部类的区别?
    • 41、Static关键字有什么作用?
    • 42、fifinal在java中的作用,有哪些用法?
    • 43、StringString StringBuffffffffer 和 StringBuilder 的区别是什么?
    • 44、String str=”aaa”,与String str=new String(“aaa”)一样吗?
    • 45、讲下java中的math类有那些常用方法?
    • 46、String类的常用方法有那些?
    • 47、Java中的继承是单继承还是多继承?
    • 48、Super与this表示什么?
    • 49、普通类与抽象类有什么区别?
    • 50、什么是接口?为什么需要接口?
    • 51、接口有什么特点?
    • 52、抽象类和接口的区别?
    • 53、Hashcode的作用?
    • 54、 Java的四种引用,强弱软虚?
    • 55、Java创建对象有几种方式?
    • 56、有没有可能两个不相等的对象有相同的hashcode
    • 57、拷贝和浅拷贝的区别是什么?
    • 58、static都有哪些用法?
    • 59、a=a+b与a+=b有什么区别吗?
    • 60、fifinal、fifinalize()、fifinally
    • 61、JDBC操作的步骤
    • 62、在使用jdbc的时候,如何防止出现sql注入的问题。
    • 63、怎么在JDBC内调用一个存储过程?
    • 64、是否了解连接池,使用连接池有什么好处?
    • 65、你所了解的数据源技术有那些?使用数据源有什么好处?
    • 66、&和&&的区别?
    • 67、静态内部类如何定义?
    • 68、什么是成员内部类?
    • 69、Static Nested Class和Inner Class的不同?
    • 70、什么时候用assert?
    • 71、Java有没有goto?
    • 72、数组有没有length()这个方法? String有没有length()这个方法?
    • 73、用最有效率的方法算出2乘以8等於几?
    • 74、flfloat型flfloat f=3.4是否正确?
    • 75、排序都有哪几种方法?请列举。
    • 76、静态变量和实例变量的区别?
    • 77、说出一些常用的类,包,接口,请各举5个。
    • 78、a.hashCode() 有什么用?与a.equals(b) 有什么关系?
    • 79、Java中的编译期常量是什么?使用它又什么风险?
    • 80、在Java中,如何跳出当前的多重嵌套循环?
    • 81、构造器(constructor)是否可被重写(override)?
    • 82、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    • 83、是否可以继承 String类?
    • 84、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    • 85、String和StringBuilder、StringBuffffer的区别?
    • 86、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
    • 87、char 型变量中能不能存贮一个中文汉字,为什么?
    • 88、抽象类(abstract class)和接口(interface)有什么异同?
    • 89、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
    • 90、Java中会存在内存泄漏吗,请简单描述。
    • 91、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
    • 92、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
    • 93、如何实现对象克隆?
    • 94、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类?
    • 是否可继承具体类(concreteclass)?
    • 95、一个”java”源文件中是否可以包含多个类(不是内部类)?有什么限制?
    • 96、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
    • 97、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
    • 98、Java中的fifinal关键字有哪些用法?
    • 最后

最近面试的小伙伴很多,对此我整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。
可以分享给大家学习。【持续更新中】

完整版Java面试题地址:【2021最新版】Java面试真题汇总

序号 内容 地址链接
1 【2021最新版】Java基础面试题总结 https://blog.csdn.net/m0_48795607/article/details/115485109
2 【2021最新版】多线程&并发面试题总结 未更新
3 【2021最新版】JVM面试题总结 未更新
4 【2021最新版】Mysql面试题总结 未更新
5 【2021最新版】Redis面试题总结 未更新
6 【2021最新版】Memcached面试题总结 未更新
7 【2021最新版】MongoDB面试题总结 未更新
8 【2021最新版】Spring面试题总结 未更新
9 【2021最新版】Spring Boot面试题总结 未更新
10 【2021最新版】Spring Cloud面试题总结 未更新
11 【2021最新版】RabbitMQ面试题总结 未更新
12 【2021最新版】Dubbo面试题总结 未更新
13 【2021最新版】MyBatis面试题总结 未更新
14 【2021最新版】ZooKeeper面试题总结 未更新
15 【2021最新版】数据结构面试题总结 未更新
16 【2021最新版】算法面试题总结 未更新
17 【2021最新版】Elasticsearch面试题总结 未更新
18 【2021最新版】Kafka面试题总结 未更新
19 【2021最新版】微服务面试题总结 未更新
20 【2021最新版】Linux面试题总结 未更新

1、什么是B/S架构?什么是C/S架构

2、Java都有那些开发平台?

3、什么是JDK?什么是JRE?

答:

  1. JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
  2. JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境

4、Java语言有哪些特点

5、面向对象和面向过程的区别

6、什么是数据结构?

7、Java的数据结构有那些?

8、什么是OOP?

9、类与对象的关系?

10、Java中有几种数据类型

11、标识符的命名规则。

12、instanceof关键字的作用

**答:**instanceof严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:

boolean result = obj instanceof Class

其中obj为一个对象,Class表示一个类或者一个接口,当obj为Class的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result都返回true,否则返回false。

注意:编译器会检查obj是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

inti=0; 
System.out.println(i instanceof Integer);//编译不通过i必须是引用类型,不能是基本类型 
System.out.println(i instanceof Object);//编译不通过
 Integer integer=newInteger(1); 
 System.out.println(integer instanceof Integer);//true 
 //false,在JavaSE规范中对instanceof运算符的规定就是:如果obj为null,那么将返回false。 System.out.println(nullinstanceofObject);

13、什么是隐式转换,什么是显式转换

14、Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型

15、什么是拆装箱?

答:

  1. 装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。
  2. 调用方法:Integer的intValue方法在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);

而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:

Integer i = 10;

面试题1: 以下代码会输出什么?

public class Main {
      public static void main(String[] args) {
      Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1==i2); System.out.println(i3==i4); } }

结果:

true false

16、Java中的包装类都是那些?

17、一个java类中包含那些内容?

18、那针对浮点型数据运算出现的误差的问题,你怎么解决?

19、面向对象的特征有哪些方面?

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

答:
【2021最新版】JavaOOP面试题总结(99道题含答案解析)_第1张图片
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公 开(public),对于不是同一个包中的其他类相当于私有(private)。受保护 (protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私 有。
Java 中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的 修饰符可以是以上四种。

21、String 是最基本的数据类型吗?

22、flfloat f=3.4;是否正确?

23、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1; 有错吗?

24、重载和重写的区别

25、equals与==的区别

26、++i与i++的区别

27、程序的结构有那些?

28、数组实例化有几种方式?

29、Java中各种数据默认值

30、Java常用包有那些?

31、Object类常用方法有那些?

32、java中有没有指针?

33、java中是值传递引用传递?

34、实例化数组后,能不能改变数组长度呢?

35、假设数组内有5个元素,如果对数组进行反序,该如何做?

36、形参与实参区别?

37、构造方法能不能显式调用?

38、什么是方法重载?

答:
静态实例化:创建数组的时候已经指定数组中的元素。

int [] a= new int[]{
      1 , 3 , 3}

动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值

39、构造方法能不能重写?能不能重载?

40、内部类与静态内部类的区别?

41、Static关键字有什么作用?

42、fifinal在java中的作用,有哪些用法?

答:

final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了:

  1. 被fifinal修饰的类不可以被继承。
  2. 被fifinal修饰的方法不可以被重写。
  3. 被fifinal修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.。
  4. 被fifinal修饰的方法,JVM会尝试将其内联,以提高运行效率。
  5. 被fifinal修饰的常量,在编译阶段会存入常量池中。

除此之外,编译器对fifinal域要遵守的两个重排序规则更好:
在构造函数内对一个fifinal域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
初次读一个包含fifinal域的对象的引用,与随后初次读这个fifinal域,这两个操作之间不能重排序。

43、StringString StringBuffffffffer 和 StringBuilder 的区别是什么?

44、String str=”aaa”,与String str=new String(“aaa”)一样吗?

45、讲下java中的math类有那些常用方法?

46、String类的常用方法有那些?

答:

charAt:返回指定索引处的字符

indexOf():返回指定字符的索引

replace():字符串替换

trim():去除字符串两端空白

split():分割字符串,返回一个分割后的字符串数组

getBytes():返回字符串的byte类型数组

length():返回字符串长度

toLowerCase():将字符串转成小写字母

toUpperCase():将字符串转成大写字符

substring():截取字符串

format():格式化字符串

equals():字符串比较

47、Java中的继承是单继承还是多继承?

48、Super与this表示什么?

49、普通类与抽象类有什么区别?

50、什么是接口?为什么需要接口?

51、接口有什么特点?

52、抽象类和接口的区别?

53、Hashcode的作用?

54、 Java的四种引用,强弱软虚?

答:

强引用

强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:

String str = new String("str");

软引用

软引用在程序内存不足时,会被回收,使用方式:

// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,
 // 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T
  SoftReference<String> wrf = new SoftReference<String>(new String("str"));

可用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

弱引用

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:

WeakReference<String>wrf=newWeakReference<String>(str);

可用场景:Java源码中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

虚引用

虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入ReferenceQueue中。注意哦,其它引用是被JVM回收后才被传入ReferenceQueue中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有ReferenceQueue,使用

例子:

PhantomReference<String>prf=newPhantomReference<String>(new String("str"),newReferenceQueue<>());

可用场景: 对象销毁前的一些操作,比如说资源释放等。** Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效上诉所说的几类引用,都是指对象本身的引用,而不是指 Reference 的四个子类的引用( SoftReference 等)。

55、Java创建对象有几种方式?

56、有没有可能两个不相等的对象有相同的hashcode

57、拷贝和浅拷贝的区别是什么?

58、static都有哪些用法?

59、a=a+b与a+=b有什么区别吗?

60、fifinal、fifinalize()、fifinally

61、JDBC操作的步骤

62、在使用jdbc的时候,如何防止出现sql注入的问题。

63、怎么在JDBC内调用一个存储过程?

64、是否了解连接池,使用连接池有什么好处?

65、你所了解的数据源技术有那些?使用数据源有什么好处?

66、&和&&的区别?

67、静态内部类如何定义?

68、什么是成员内部类?

答:

定义在类内部的非静态类,就是成员内部类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。实例:

public class Out {
      
private static int a; 
private int b; 
public class Inner {
      
public void print() {
      System.out.println(a);
 System.out.println(b); } } }

69、Static Nested Class和Inner Class的不同?

70、什么时候用assert?

71、Java有没有goto?

72、数组有没有length()这个方法? String有没有length()这个方法?

73、用最有效率的方法算出2乘以8等於几?

74、flfloat型flfloat f=3.4是否正确?

75、排序都有哪几种方法?请列举。

76、静态变量和实例变量的区别?

77、说出一些常用的类,包,接口,请各举5个。

78、a.hashCode() 有什么用?与a.equals(b) 有什么关系?

79、Java中的编译期常量是什么?使用它又什么风险?

80、在Java中,如何跳出当前的多重嵌套循环?

81、构造器(constructor)是否可被重写(override)?

82、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

83、是否可以继承 String类?

84、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

85、String和StringBuilder、StringBuffffer的区别?

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

87、char 型变量中能不能存贮一个中文汉字,为什么?

88、抽象类(abstract class)和接口(interface)有什么异同?

89、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

答:

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示:
* 扑克类(一副扑克) * @author 骆昊 */public class Poker {
      private static String[] suites = {
     "黑桃", "红桃", "草花", "方块"}; private static int[] faces = {
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; private Card[] cards; /** * 构造器 * */ public Poker() {
      cards = new Card[52]; for(int i = 0; i < suites.length; i++) {
      for(int j = 0; j < faces.length; j++) {
      cards[i * 13 + j] = new Card(suites[i], faces[j]); } }
* }/** * 洗牌 (随机乱序) * */ public void shuffle() {
      for(int i = 0, len = cards.length; i < len; i++) {
      int index = (int) (Math.random() * len); Card temp = cards[index]; cards[index] = cards[i]; cards[i] = temp; } }/** * 发牌 * @param index 发牌的位置 * */ public Card deal(int index) {
      return cards[index]; }/** * 卡片类(一张扑克) * [内部类] * @author 骆昊 * */ public class Card {
      private String suite; // 花色 private int face; // 点数 public Card(String suite, int face) { this.suite = suite; this.face = face; }@Override public String toString() { String faceStr = ""; switch(face) { case 1: faceStr = "A"; break; case 11: faceStr = "J"; break; case 12: faceStr = "Q"; break; case 13: faceStr = "K"; break; default: faceStr = String.valueOf(face); } return suite + faceStr; } } }//测试类 class PokerTest { public static void main(String[] args) { Poker poker = new Poker(); poker.shuffle(); // 洗牌 Poker.Card c1 = poker.deal(0); // 发第一张牌 // 对于非静态内部类 Card // 只有通过其外部类 Poker 对象才能创建 Card 对象 Poker.Card c2 = poker.new Card("红心", 1); // 自己创建一张牌 System.out.println(c1); // 洗牌后的第一张 System.out.println(c2); // 打印: 红心 A } }

90、Java中会存在内存泄漏吗,请简单描述。

91、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

92、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

93、如何实现对象克隆?

94、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类?

是否可继承具体类(concreteclass)?

95、一个”java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

96、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?

97、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?

98、Java中的fifinal关键字有哪些用法?

最后

该面试题答案解析完整文档获取方式:JavaOOP面试题总结

篇幅有限,其他内容就不在这里一 一展示了,整理不易,欢迎大家一起交流,喜欢小编分享的文章记得关注我点赞哟,感谢支持!重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!

你可能感兴趣的:(编程,Java面试,JavaOOP,java面试,编程,程序员,JAVA)