Java面试题
1、什么是面向对象?
答:当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。
2、面向对象的特点?
答:封装、继承、多态。
封装:根据职责将属性和方法封装到一个抽象的类中。
继承:(1)继承基类的方法,并做出自己的扩展;
(2)实现代码的重用,相同的代码不需要重复的写;
多态:(以封装和继承为前提),不同的子类对象调用相同的方法,产生不同的执行结果。
3、重写和重载的区别?
答:重写:子类重写父类方法,只有实例方法可以被重写,重写后的方法必须仍为实例方法。成员变量和静态方法都不能被重写,只能被隐藏。
方法的重写(override)两同两小一大原则:
(1)方法名相同,参数类型相同
(2)子类返回类型小于等于父类方法返回类型
(3)子类抛出异常小于等于父类方法抛出异常
(4)子类访问权限大于等于父类方法访问权限
重载:在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关。编译器通过对方法签名的识别即可静态编译出不同的方法。这也是java中重载与重写的区别之一。
4、String, Stringbuffer, StringBuilder 的区别?
答:String 字符串常量(final修饰,不可被继承),String是常量,当创建之后即不能更改。(可以通过StringBuffer和StringBuilder创建String对象(常用的两个字符串操作类)。)
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
在不考虑线程安全的前提下,StringBuild性能最高,StringBuffer次之,String比较差.
5、ArrayList 和 LinkedList 有什么区别?
答:ArrayList和LinkedList都实现了List接口,有以下的不同点:
(1)ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
(2)相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
(3)LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
原文链接:https://blog.csdn.net/weixin_43495390/java/article/details/86533482
6、 ArrayList 和 Vector 的区别是什么?
(1)Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。
(2)ArrayList比Vector快,它是异步,不会过载。
(3)ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。
原文链接:https://blog.csdn.net/weixin_43495390/java/article/details/86533482
7、Array 和 ArrayList 有何区别?
(1)Array可以容纳基本类型和对象,而ArrayList只能容纳对象。
(2)Array是指定大小的,而ArrayList初始大小是固定的。
(3)Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。
原文链接:https://blog.csdn.net/weixin_43495390/java/article/details/86533482
8、抽象类和接口的区别?
(1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
(2)抽象类要被子类继承,接口要被类实现。
(3)接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。
(4)接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
(5)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
(6)抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
(7)抽象类里可以没有抽象方法。
(8)如果一个类里有抽象方法,那么这个类只能是抽象类。
(9)抽象方法要被实现,所以不能是静态的,也不能是私有的。
(10)接口可继承接口,并可多继承接口,但类只能单根继承。
原文链接:https://blog.csdn.net/weixin_43495390/java/article/details/86533482
9、Map的类型?
原文链接:https://blog.csdn.net/qq_30683329/article/details/80455779
10、final 的用途?
类、变量、方法
(1)final 修饰的类叫最终类,该类不能被继承。
(2)final 修饰的方法不能被重写。
(3)final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
11、public、private、protected、dofault的作用域?
(1)public 所有类可见
(2)protected 本包和所有子类都可见(本包中的子类非子类均可访问,不同包中的子类可以访问,不是子类不能访问)
(3)default 本包可见(即默认的形式)(本包中的子类非子类均可访问,不同包中的类及子类均不能访问)
(4)priavte 本类可见
原文链接:https://blog.csdn.net/weixin_43495390/java/article/details/86533482

浙公网安备 33010602011771号