Java常考面试题(二)

简介: 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。

      序言

         昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。

                

                                                                                  ------WZY

一、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

       自己解答:

            覆盖:又称作重写, 前提条件:继承。 子类将父类中的某个方法,原封不动的抄下来,方法体中就自己写

                   注意:子类重写父类的方法,访问修饰符的权限不能低于父类方法的访问修饰符, 其它返回值、方法名、参数,必须一样。

            重载:不需要继承,在自己类中,和自己本类中的某个方法名相同,参数不同,其他没有限制, 这就是方法的重载。

    

       参考答案: 

            Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

       自我评价:
            大概的要点已经答道,语言上面有点欠缺,不精炼。一看就是个菜鸟~

            1、重载:方法名相同、参数不相同。 修饰符、返回值无所谓。 

            2、重写:方法名、参数、返回值都必须相同、修饰符 >= 父类方法修饰符

                注意:重写是为了进行多态的使用,多态的好处就是能让代码的维护性能更高。而重载是为了一个方法能根据参数的不同,选择更多的功能。

           

     

二、Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?            

        自己解答:

            构造函数:方法名和类名相同,并且没有返回值。每个类中默认有一个无参构造函数。

            构造函数重载:在构造函数中,参数不同,其他相同, 作用,做一些初始化的操作。

            复制构造函数:这个不知道。。。 没遇到过这种需要复制构造函数的情况。

        参考答案:

            当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
            Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
            Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。

            

        自我评价:

            总体也答道点上了,复制构造函数那个概念,对C++的学习不深,其实没怎么学,所以不知道

            1、构造函数在新对象被创建的时候会调用。每一个类都有构造函数,构造函数的名字跟类名相同,没有返回值,每个类有一个默认的无参构造函数,

            2、构造函数的重载:跟方法的重载类似,唯一的不同就是功能不一样,构造函数的重载,增加不同参数,来达到初始化属性的目的。

3、Java支持多继承么?

        自己解答:

            这个问题,有点傻,学了java的人都知道, 肯定不知道多继承啊,java是只支持单继承,多实现。我记得C++中就支持多继承。

        

        参考答案:

            Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是java中的接口支持多继承,,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。

        自我评价:   

            只说出表面答案来,不能更深入的讲解,说明自己所储备的知识不够多,而且自己确实不知道接口可以多继承。这个可以记住。

            1、java 是支持单继承、多实现

            2、实现说的就是一个类实现某个接口,接口中只申明方法,但是没有方法体,接口可以多继承。一个接口继承多个接口,说明该接口扩展更多的功能。

4、接口和抽象类的区别是什么?

        自己解答:

             接口:接口中只定义方法,方法中没有方法体, 也就是说只是声明有哪些功能,功能具体的实现要靠实现该接口的类去做。关键字interface

             抽象类:对一类事物相同的部分抽取出来,可以有具体的方法,也可以有不写方法体的方法。特点,关键字 abstract

             区别:

                关键字 interface abstract

                接口中全是方法的声明,没有方法体 抽象类中可以有方法体,也可以只申明方法,还可以有成员变量。

                接口需要实现 implements 抽象类需要继承 extends

                实现接口,需要实现接口中所有的方法, 继承抽象类,需要重写抽象类中所有的抽象方法,如果不重写,则该类也还是抽象类。抽象类不能new 对象。

        参考答案:

             Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
             接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
             类可以实现很多个接口,但是只能继承一个抽象类
             类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
             抽象类可以在不提供接口方法实现的情况下实现接口。
             Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
             Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
             接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
             也可以参考JDK8中抽象类和接口的区别 

        自我评价:

              看起来好像知道,其实不明白他们两个其中的联系和区别。还有一个理解错了,接口中也能有属性,但是每个变量都声明为 public static final 。也就是常量了

              1、接口是最顶级的抽象,抽象类次之。

              2、接口中所有的变量都市 public static final 而抽象类中能包含任意类型的变量 接口中所有的方法都是abstract。

              3、接口是最顶级的抽象,所以它只声明方法,而没有方法体,而抽象类既可以有方法体的方法,也可以没有,

              4、一个类中有抽象方法,则该类一定要是抽象类。而且继承该类的类必须重写抽象方法,

              5、abstract只能修饰类和方法,不能修饰属性。

              6、一个方法被abstract修饰了,则该方法只能声明,没有方法体。

            

        重新解答:

              区别: 三个方面、 关键字、方法、成员变量、其他。

                关键字: 接口 interface 抽象类 abstract

                接口是最顶级的抽象 抽象类次之

                接口中所有的方法都市抽象的,且接口只能被实现,不能被继承,而抽象类中的方法可以是抽象的,也可以不是,抽象的方法都没有方法体

                接口的成员变量都市public static final 修饰的 是常量 而抽象类则可以是各种类型。

      

五、什么是值传递和引用传递?

        自己解答:

              值传递:针对的是基本数据类型,是把自己的值进来传递

              引用传递:针对的是引用数据类型,传递的是地址值,

                注意:有一个话说,java中所有的都是值传递,没有引用传递,其实说的是真正的值和引用值(地址值)。

        参考答案:

              值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.

              引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.一般认为,java内的传递都是值传递
          
            这样可能更容易理解。
              public void add(int a) { int b = a; } 这个可以看作是值传递,a是基本数据类型,他把他的值传给了b public void add(Object obj) { Object objTest = obj; } 这个可以看作是址传递,obj是引用数据类型,是把他栈中指向堆中的对象的地址值赋值给了objTest. 这时候就同时有两个引用指向了堆中的某个Object对象 其实这样看来,java应该只有值传递的。如果是基本数据类型,传递的就是实际的值. 如果是引用数据类型,传递的就是该引用的地址值.

        自我评价:

              自己解答的不够深入,只是表面上的解答

              1、值传递是针对基本引用类型,如果将值赋予另一个a变量,改变a变量的值,原先变量的值并不会因此改变

              2、引用传递针对的是引用基本类型,如果将a变量的值赋给b变量,改变b变量的的值,a变量的值也会因此改变,因为传递的是一个地址,一个地址中的值改变了,所有指向该地址的对象的值也会相应的改变

相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
21天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
53 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
26天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
30 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
57 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
114 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
116 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
66 5
下一篇
DataWorks