栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面试笔试常见题目(持续更新)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面试笔试常见题目(持续更新)

1.封装、继承和多态

这也是面向对象语言的三大特征。

1.1 封装:封装就是隐藏对象的属性和实现细节,仅对外开放接口,控制程序中属性读和修改的访问级别,将对象和操作封装成一个抽象得类,形成一个整体。

封装的目的:增强安全性、简化编程,使用者不必了解其内部细节,只需要通过外部接口来使用类的成员。

1.2 继承(extends关键字): 就是子类继承父类的特征和行为,即可以使用现有类的特征和功能,但无需重新编写原来类的情况下进行功能的扩展。

在多个类的情况下,一个类作为子类只能有一个父类;作为父类可以有多个子类。但是可以多级继承,如a类继承b类,b类继承c类,形成一条长链。

1.3 多态:可以说成同一个行为,居有多个表现形式和形态的能力。。

多态的实现方法有重写和重载。重写就是子类重新定义父类中的方法;重载则是允许存在多个名字相同的方法,但是这些方法参数列表不同,那么调用时只需要输入不同的参数,java会自动选择构造函数。由此可见,多态实在继承的基础上进行。

2.static关键字

主要意义:创建独立于具体对象的域变量或方法,这样一来即使没有创建对象也可以使用变量或方法,(如类名.静态方法)来调用。

static还可以用来形成静态代码块以优化程序性能,因为static代码块只会在类加载的时候执行一次。

static方法只能被继承不能被重写。

3.接口与抽象类的区别

接口:
构造方法:没有构造方法
成员变量:只能是常量。默认修饰符为public static final
成员方法:jdk1.7只能是抽象的。默认修饰符为public abstract 

抽象类:
构造方法:有构造方法,用于子类实例化使用。
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象的,也可以是非抽象的。
抽象类不能用static关键字修饰

类与类只能单继承或者多级继承,但接口可以多实现。

在使用抽象类和接口类的依据是:抽象类是这个对象是什么,接口类是这个对象能做什么。。

4. 多线程创建的三种方式

4.1 继承Thread类
自定义一个类,继承java.lang包下的Thread类;
重写run方法,将要执行的代码写在run方法里面;
创建自定义类的对象,调用start方法启动线程。

4.2 实现Runable接口
自定义一个类,实现java.lang包下的Runable接口;
重写run方法,将要执行的代码卸载run方法里面;
创建自定义类的对象,创建Thread对象;
将上述自定义类对象作为参数传入Thread方法中,调用start方法启动线程。

4.3 实现Callable接口
自定义一个类,实现java.util.concurrent包下的Callable接口;
重写Call方法,将要执行的代码卸载Call方法中;
创建线程池,将自定义对象加入线程池中;
获取线程返回结果。

5. 进程和线程的区别
进程:并发执行的程序在执行过程中管理中分配和管理资源的基本单位,是竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,负责当前进程中程序的执行,线程也是处理机调度的基本单元。一个进程至少一个线程,一个进程可以拥有多个线程,多个线程可以共享数据。

区别:
(1) 地址空间:同一进程之间的线程共享地址空间,不同进程之间的线程则是独立的地址空间。
(2) 共享资源:同一进程之间的线程共享资源,不同进程之间的资源则是独立的。
(3) 一个进程崩溃不会影响到其他的进程,但是一个线程崩溃会导致整个进程崩溃,所以多进程比多线程健壮。

6.JDK和JRE

JDK:Java开发工具包,是程序员使用java语言编写Java程序所需的开发工具包。
JRE:Java运行环境,包含Java虚拟机,Java类库,是运行Java程序所需的环境

如果需要编写Java程序,需要安装jdk;如果只需要运行java程序,只需要安装jre,一般是提供给用户。

7.== 和 equals的区别

7.1 == (不能用于比较布尔类型)
如果比较的是基本数据类型变量,那么就是看两个变量的数值是否相等;
如果比较的是引用数据类型变量,那么比较的就是两个变量的地址是否相等。

7.2 equals
一般来说equals都是需要重写的,Strng、Data、File、包装类都重写了Object类中的equals。如果重写了就比较内容是否相等,如果没有重写就比较地址是否相等。

8. 两个对象的hashcode()相同,那么equals()也一定相同吗?

        首先要区分hashcode指的是对象在hash表中的位置,而不是对象的物理地址。通过对象的物理地址转化成一个整数,然后经过hash函数的算法就得到了hashcode()。hashcode()的存在可以快速地根据hash函数确定数据在表中的位置。

得出结论:
        (1)如果两个对象的equals相同,那么它们的hashcode一定相同。
        (2)如果两个对象的hashcode相同,那么它们的equals不一定相同,只能说它俩在散列存储结构中的存储位置相同。

9. HashMap底层实现原理

存储结构:JDK1.8以前是用数组+链表的结构存储;但是当链表的长度特别长的时候,查询效率将直线下降,因此,JDK1.8把他设计为达到特定的阈值之后就会将链表转化成红黑树。

红黑树:
(1)每个节点只有两种颜色:红色或者黑色2根节点必须是黑色
(2)根节点以及每个叶子节点(NIL)都是黑色的空节点
(3)从根节点到叶子节点,不能出现两个连续的红色节点
(4)从任一节点出发,到它下边的子节点的路径包含的黑色节点数目都相同

10. final在Java中的作用

final的特征就是凡是被final修饰的地方都不能修改。

(1)修饰类,表示该类不能被继承
(2)修饰方法,表示该方法不能被重写
(3)修饰变量:
                如果是基本数据类型,表示该变量不能被更改;如果修饰的是形式参数,表示一旦被赋值则不能更改。
                如果是引用数据类型,也就是修饰对象时,引用在初始化后将永远地指向一个内存地址,不可修改。但是内存地址中保存的对象是可以修改的。

11. java 中的 Math.round(-1.5) 等于多少?

Math的round方法是四舍五入,如果参数是负数,则往大的数如,Math. round(-1.5)=-1,如果是Math.round(1.5)则结果为2

这里要注意整数和负数的区别,有人会发现对于负数四舍五入可能不适用,那么试试五舍六入?
也就是将参数加上0.5再向下取整。

12. 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号