java面试集锦
HashMap和HashTable的区别
他们都是Map接口的实现类,实现了将唯一键值映射到特定的值上。
HashMap没有分类或者排序,它允许一个null和多个null值。
HashTable类似于HashMap,但是不允许有null键和null值。它比hashMap要慢,因为它是同步的(即线程安全的)
HashTable继承自Dictionart类,而HashMap是java1.2引进的Map接口的一个实现类。
HashMap允许将null作为一个entry的key或者value,而HashTable不允许,HashMap还去除了hashTable的contains方法,改成了containavalue()和containskey()方法。
两者最大的不同是,HashTable的方法是Synchronize的,而HashMap却不是,在多线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供而外的同步。
HashMap和HashTable采用hash/rehash的算法类似,因此性能不会产生很大的差异。
重载和覆盖的区别
对于在同一个区内被声明的几个具有不同参数列的同名函数,程序会根据不同的参数列来切定具体调用哪一个函数,这种机制叫重载(overload),重载不管系函数的返回值类型。
覆盖(override)是指派生类中重新定义的函数,其函数名、参数列、返回值类型必须与父类中哦够的函数保持严格的一致。覆盖函数和被覆盖的只有函数体不同,宕派生类对象调用子类该同名函数时会自动调用子类中的覆盖版本,而不是父类中被覆盖的函数,这种机制叫做覆盖。
关于覆盖的使用请参考下面的代码。
package com.company;
/**
* Created by shugen on 17-3-3.
*/
public class OverLoad {
public static void main(String[] args) {
A ref = new AC();
ref.print();
AC ref2 = new AC();
ref2.print();
}
}
class A {
public void print() {
System.out.println("this is class A");
}
}
class AC extends A {
@Override
public void print() {
System.out.println("this is class B");
}
}
程序的执行结果如下:
在上面的代码中,即使ref被声明为A类型的,但是java中存在形式类型和实际类型。此时ref的形式类型时A,但是ref的实际类型确是AC。因此ref也是调用子类AC的print方法。
成员函数的重载的特征如下:
(1) 相同的范围(在同一个类中)
(2) 函数名字相同
(3)参数不同
(4)virtual关键字可有可无
覆盖的特征如下:
(1)不同的范围(分别位于父类和子类或者叫做派生类中)
(2)函数名字相同
(3)参数相同
### 静态方法的覆盖问题
为了方便展示static方法的可覆盖性,先提供下面的基础代码:
class STA {
public static void print() {
System.out.println("Hello, it's STA");
}
private void ge(){
System.out.println("这是私有的方法");
}
}
class STAC extends STA{
public static void print(){
System.out.println("Hello, it's STAC");
}
public void ge(){
System.out.println("这是覆盖后的非私有方法");
}
}
结论:
(1)静态方法,不能被覆盖成非静态方法
如下图,放尝试覆盖父类的static方法为非static方法时,IDE开始报错。
(2)私有方法可以被覆盖
从上图可以看出,父类的静态方法是可以被子类继承的,但是以父类作为形式类型却是不能访问被覆盖的父类的方法的。
关于静态方法在父类和子类中的调用问题
package com.company;
/**
* Created by shugen on 17-3-3.
*/
public class StaticCall {
public static void main(String[] args) {
F f1 = new F();
F f2 = new C();
System.out.println(f1.getName());
System.out.println(f2.getName());
}
}
class F {
public static String getName(){
return "F";
}
}
class C extends F{
public static String getName(){
return "C";
}
}
程序的输出如下:
出现这种现象的原因时,程序中的两个getName
方法时静态方法,所以在内存中的地址空间时固定的,不存在冲突的问题。也就是折两个方法在内存中占用了不同的空间,而具体执行哪一个则要看由哪个类来调用,因为时静态方法,且两个引用变量都是F
类型的,因此,这里调用的都是F类中的getName方法。
super构造函数的位置
如果要想在子类中使用super构造函数,则必须吧super()放在子类代码的第一行的位置。
从上图中可以看到,把super放在了子类的构造函数的第二行时,编译器就会报错了。因此,如果在使用super构造函数时不将其放在代码的第一行就会造成编译器报错(即编译错误)
。
抽象类相关的性质
(1)抽象类只能作为其他类的基类,不能被直接实例化,而且对抽象类不能使用new
操作。抽象类如果包含有抽象的变量或者值,则它们要么时null类型,要么包含了对非抽象类的实例的引用。
(2)抽象类允许包含抽象成员,但不是必须的,抽象类中可以有非抽象方法。
(3)抽象类不能时final的。因为final是不能被继承的,因此声明成fianal的抽象类没有实际意义,java是不允许的。
(4)如果一个非抽象类从抽象类中派生,则其必须要覆盖抽象类的所有抽象方法。
(5)抽象类可以被抽象类继承,结果仍是抽象类。
(6)抽象类可以被声明。
(7)抽象类可以不包含任何抽象方法或者抽成员。
从上图可以看出,一个抽象类可以不包括任何成员变量或者成员方法。
java面试集锦的更多相关文章
- Java 面试知识点解析(五)——网络协议篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java面试,如何在短时间内做突击
面试前很有必要针对性的多刷题,大部分童鞋实战能力强,理论不行,面试前不做准备很吃亏.这里整理了很多常考面试题,希望对你有帮助. 面试技术文 Java岗 面试考点精讲(基础篇01期) Java岗 面 ...
- Java面试知识点汇总
Java面试知识点汇总 置顶 2019年05月07日 15:36:18 温柔的谢世杰 阅读数 21623 文章标签: 面经java 更多 分类专栏: java 面试 Java面试知识汇总 版权声明 ...
- 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案
2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...
- 转:最近5年133个Java面试问题列表
最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来 ...
- java面试宝典(蓝桥学院)
Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...
- JAVA面试精选【Java基础第一部分】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对于那些正打算找工作JAVA软件开发工作的童 ...
随机推荐
- 读书笔记 effective c++ Item 42 理解typename的两种意义
1. class和typename意义相同的例子 问题:在下面的模板声明中class和typename的区别是什么? template<class T> class Widget; // ...
- ngrok完成内网映射外网
项目需求: 完成微信公众号开发配置搭建,其中需要一个可以外部访问的域名 实现技术: www.ngrok.cc 实现方式: 在该网站最下方下载需要的ngrok文件,在最上方点击注册,获取token,之后 ...
- Struts2的类型转换(上)
传统的类型转换.(略) Struts2中提供了内置的基本的类型转换器,可以实现基本类型的自动转换,包括: Integer, Float, Double, Decimal Date and Dateti ...
- vue.js如何在标签属性中插入变量参数
html的标签的属性,比如id.class.href需要动态传递参数,拼接字符串,查了一些资料,并没有找到合适的解决方法,琢磨了一上午,终于试出了方法: v-bind:属性=" '字符串'+ ...
- 老李推荐:第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
老李推荐:第14章3节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer实例化 poptest是国内唯一一家培养测试开发工程师的培 ...
- DC平衡双向控制串行器 转接IC GM8913:LVTTL转FPD-LINK III芯片
1 概述 GM8913型DC平衡双向控制串行器,其主要功能是实现将10或12位并行控制信号和一路时钟信号串行为一路2.8Gbps高速串行数据:同时接收低速通道信号实现模式配对的功能.芯片内部集 ...
- [编织消息框架][JAVA核心技术]动态代理应用5-javassist
基础部份: 修改class我们用到javassist,在pom.xml添加 <properties> <javassist.version>3.18.2-GA</java ...
- 【转】DHCP的请求过程
首先你得清楚DHCP的请求过程:1.client向server发送请求,发向广播地址2.server向client回应一个IP,发向单播地址3.client向server回应一个确认,发向广播地址,表 ...
- 浩哥解析MyBatis源码(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6705769.html 1.回顾 前面几篇讲了数据源模块,这和之前的事务模块都是enviro ...
- 深度学习入门实战(二)-用TensorFlow训练线性回归
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...