Java常考面试题(二)(转)

      序言

         昨天刚开始的”每日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变量的值也会因此改变,因为传递的是一个地址,一个地址中的值改变了,所有指向该地址的对象的值也会相应的改变

原文地址:https://www.cnblogs.com/jwcz/p/11806951.html

时间: 2024-10-31 22:30:48

Java常考面试题(二)(转)的相关文章

java常考面试题

p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify; orphans: 0; widows: 0 } 什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? 参考答案 Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重

Java常考面试题(三)

序言 说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言和自己关于该知识点的讲解,也有可能是觉得太简单,不用做解释,但是个人感觉,写博文,在一些自己都需要思考一段时间去理解的东西,应该把自己思考的过程,如何理解的写下来,而不是就把精华的部分复制黏贴上去,个人感觉没什么用,回想一下再写计算机网络教程学习历程的博文中,自己也有类似的情况,应该改正过来,在乎的

阿里巴巴JAVA常考面试题及汇总答案

一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答:   1.String是字符串常量,StringBuffer和StringBuilder都是字符串变量.后两者的字符内容可变,而前者创建后内容不可变. 2.String不可变是因为在JDK中String类被声明为一个final类. 3.StringBuffer是线程安全的,而StringBuilder是非线程安全的. ps:线程安全会带来额外的系统开销,所以StringBu

计算机网络面试常考总结(二)

目录 简述DNS域名系统及其工作原理. 简述HTTP协议及其工作原理. HTTP报文的格式? HTTP请求报文中的方法有哪些? http1.1和http2.0的区别? http的返回码以及代表的意思? 简述https.https与http的区别? IP数据报格式? TCP数据报格式? UDP数据报格式? 以太网MAC帧格式? 怎么判断两台主机是否连接好? 简述RIP及其工作原理. 简述OSPF及其工作原理. 简述BGP及其工作原理. 写在最前面:本文章所有内容是本人从网络上以及<计算机网络第七版

.net常考面试题

1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 在同一命名空间内可以访问. 2 .列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString, 如....?id=1; response. Redirect()...

java常考小程序

private static void nineNineMulitTable(){ /** * 9*9乘法表 */ for (int i = 1,j = 1; j <= 9; i++) { System.out.print(i+"*"+j+"="+i*j+" "); if(i==j){ i=0; j++; System.out.println(); } } } /** * 判断是否为素数12=2*6=3*4 false * @param n

C++常考面试题:实现内存拷贝函数

void* memcpy(void *dst,const void *src,size_t count) { assert(dst!=NULL); assert(src!=NULL); unsigned char *pdst=(unsigned char*)dst; const unsigned char *psrc=(const unsigned char *)src; assert(!(psrc<=psdt)&&pdst<(psrc+count)); assert(!(ps

计算机网络常考面试题总结

这里先将搜集到的题目列出来,日后一一精细得写完. https://blog.csdn.net/u013408431/article/details/62442670 https://blog.csdn.net/tzs_1041218129/article/details/52134226 https://blog.csdn.net/GitChat/article/details/78546898 <.................................正文..............

Java面试题中常考的容易混淆的知识点区别

以下是我收集的Java编程里各种区别,供Java学习爱好者参考,这些区别都是每次Java面试中常考的,大家好好掌握,如有失误请留言指出.想要获取Java详细全套学习资料请到上海尚学堂官网获取. 1.HashMap和Hashtable的区别. HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable. HashMap允许将null作为一个entry的key