Java经典面试笔试题及答案

时间:2024-01-19 20:13:26

1.什么是对象序列化,为什么要使用?

所谓对象序列化就是把一个对象以二进制流的方式保存到硬盘上。好处:方便远程调用。

2.值传递与引用传递的区别?

所谓值传递就是把一个对象的值传给一个新的变量,但是系统会给这个新的变量开辟一个新的内存空间。不会改变原有的值

所谓引用传递就是把一个对象在堆中保存的数据传递给一个变量,此时新的变量与原有的变量对应同一个内存存储空间,当新的变量修改对象的属性时,内存中的数据也会修改。

3.接口与抽象类的区别?

1:接口里面不可以实现方法体,抽象类可以实现方法体。

2:接口可以多继承接口,抽象类不可以。

3:接口需要被子类实现,抽象类是要被子类继承(单一继承)。

4:接口中只能有公有的方法和属性而且必须赋初始值,抽象类中可以有私有方法和属性.

5: 接口中不能存在静态方法,但属性可以和final,抽象类中方法中可以有静态方法,属性也可以。

4.谈谈继承,为什么要使用继承?

所谓继承就是找出几个类*同的部分,提取出来作为父类。而子类只需要继承父类,就可以共享父类的方法。

使用继承能够减少重复的代码。

5.方法重载的好处?

所谓重载就是在一个类中可以定义多个相同的方法,但是方法的参数类型和参数的个数以及顺序要不同。

重载的好处就是能够让我们很快的掌握该方法的功能,我们只要要记住该方法就能很快的理解该方法的参数以及参数的作用

6.项目中印象最深的部分?

我觉得在该项目中我体现到了反射技术的强大之处,原来我一直不清楚反射是一种什么样的技术,只知道一些概念上的知识,经过这个项目之后,终于知道该怎样灵活运用反射,以及在什么时候运用。

谈谈你对面向对象的理解与认识?

我觉得使用面向对象这种思维的方式比较符合我们人类的思想,不需要去学习一些什么新的思考方式,就按照现实生活做的一些故事就能让人理解该内容的知识以及他们的作用。

我的看法就是:

1:当加入新的功能的时候不会修改原有的代码。(面向接口编程)

2: 当我们写的一个类可以重复的运用在其他项目中。(代码的复用性)

3:当写一个新类的时候要考虑到他的可扩展性。(灵活性)

7.谈谈集合框架?

集合框架分为三部分,第一部分是collection接口,第二部分是Map接口、第三部分是collections帮助类

首先说一下collection接口,collection接口下面的接口分为set接口、list接口,在往下面就是他们一些实现类。

说到实现类在分为两部分,第一部分是set的实现类有TreeSet、HashSet,第二部分是list的实现类有:    Arraylist、LinkedList、Vector。

8.再说Map接口,map接口下面有treeMap、HashMap、HashTable三个实现类。

最后说collections帮助类,collections提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。

9.什么是异常?描述下异常处理?

所谓异常就在执行程序的时发生的错误,他能终止正在执行的程序。

异常的处理:1:使用try-catch捕获异常。

2:使用throw-throws抛出异常。

10.多线程的优先级?为什么要分优先级?

因为有有一些线程可能比较重要,所以才划分优先级。

异常框架的类结构?

Throwable所有错误的超类,他下面有两个子类:error和Exception。

error代表系统级的错误能捕获,但是不能处理。

Exception代表异常主要出自于程序,可以捕获也能处理。Exception有分为两类:编译期异常、运行期异常。

区别他是运行期异常还是编译期异常就看他是不是RuntimeException的子类,如果是的话,就是运行期异常否则是编译期异常。

谈谈HashMap与Hashtable的区别。

HashMap:hashmap中可以有空值,线程不安全的类。hashmap的父类是abstractMap抽象类(效率高)

HashTable:hashtable中不允许有空值,线程安全的类.hashtable的父类是Dictionary类(效率低)

说一下iterator。

iterator是一个接口,用于实现对容器里面的元素遍历操作。

任何的遍历都可以使用iterator。

什么是泛型?它有什么样的好处?

泛型就是自己指定一种类型,以后存放的东西就只能有这一种类型。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

说一下你在项目中遇到的异常,并说出什么时候发生的,怎么解决的。

空指针异常最常见。根据异常提示找到相应的类进行处理。发生的原因很多,比如没有初始化变量,没有进行赋值等都是空指针所包含的。

你的程序遇到错时怎么解决的?

根据错误提示找到错误的API进行相应的处理。

谈谈&&和&的区别

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

System.out和System.in是什么意思?

System.out是输出。

System.in是输入

java为什么能够跨平台?

对于不同的系统平台有不同的虚拟机,虚拟机提供了硬件平台规范。

用java开发的程序被编译成由java虚拟机指令组成的字节代码,虚拟机会将这些指令翻译成操作系统特定的指令.(因为jvm屏蔽了底层操作系统的硬件)。

private变量能不能被其他类访问?如果能,怎么访问?

能。通过反射. getDeclaredField_r();

演示java项目如何打包成jar文件

1:选择导出 jar 直到输出

java的环境变量如何配置?为什么要配置?

1:在我的电脑 属性 高级 环境变量 系统变量 新建 变量名 java-Home,设置值:java的JDK目录

2:在选择新建 设置变量名 PATH 变量值 %java_home%/bin目录

为了方便在dos窗口操作。

static和非static修饰的变量哪个生命周期长?

static的生命周期长。因为他一直在内存里面。

什么是线程同步?

线程同步就是说在同一时间访问的资源的时候,资源只能被一个线程所使用.

什么是封装?封装的好处是什么?

封装:封装就是把一个已经实现好的功能的代码,放在一个方法中(实现了隐藏)。

好处:代码的重用性、好全性、只需要调用该方法不管具体的实现

在线程中wait与sleep的区别?

1:wait是Object定义的方法,而sleep是线程Thread定义的方法。

2:sleep是让当前线程睡泯,所以可以放在任何位置,而wait是让当前线程放弃资源的使用权,必须放在同步块或同步方法里面。

3:sleep他不会释放对象锁,而wait会释放对象同步锁.

4:sleep是等待一段时间后会自动醒来,而wait必须让其他的线程唤醒。

Class 和class的区别

class是java的关键字。

Class是类的名字。

awt和swing的区别?

awt是重量级的组件。

swing是轻量级的组件.

比如:(在swing组件中当我们调用repaint()方法时,会很快调用paint(),而对于重量级组件会首先调用upate()方法,然后upate()方法再调用paint()方法,在重量级组件中实现双缓冲,我们就要重写upate()方法,在重写的时候记得实现帅新屏幕).

为什么实现一个接口必须要实现接口里面所有的方法?

因为这是sun公司的规定。如果不实现它里面所有的方法那就不叫接口。

线程和进程的区别是什么?

进程是一个小的应用程序,需要分配内存空间。

线程是进程中的一个顺序控制流,也可以这样理解(线程是进程的实体).

Java基础技能中强调程序代码的读写能力,如果一个类很长,你会怎样读写?

1:类分解,每个类只做他该做的事情。

2:方法分解。

抽象方法能不能是private和static修饰符?

能。

用接口有什么好处?

1:使用接口有很好的扩展性。

2:接口可以多继承接口。

3:隐藏实现。

什么是反射?

所谓反射就是在编译的时候不知道加载什么,只有等到运行的时候才知道该执行什么。

创建对象的方式有哪些?

1:new 2:反射 3:clone 4:反序列化

transient是什么意思?

transient代表无法到达某一对象所抛出的异常。但也不代表没有该对象。

在设计类的时候,你是怎么使用静态变量和成员变量的?

如果需要一直存在于内存当中,就选择静态变量否则就选择成员变量。

定义抽象方法的意义何在?

1:为了减少重复代码。

2:抽象方法有很好的扩展性。

谈集合遍历的方式

forEach()、for()、iterator

java安全性体现在什么地方?  1:Java提供一个用于网络/分布式的计算环境。因此,Java强调安全性,如确保无病毒、小应用程序运行安全控制等等。

2:Java的验证技术是以公钥(public-key)加密算法为基础,而且从环境变量、类加载器、文件系统、网络资源和名字空间等方面实施安全策略。

谈谈线程所拥有的几种状态

就绪:线程分配了CPU以外的全部资源,等待获得CPU调度

执行:线程获得CPU,正在执行

阻塞:线程由于发生I/O或者其他的操作导致无法继续执行,就放弃处理机,转入线程就绪队列

挂起:由于终端请求,操作系统的要求等原因,导致挂起。

面向对象的特征有哪些?

封装、继承、多态

解释一下在项目里你怎么去实现多线程的。

1:一般是实现Runnable接口,new Thread().start(); 重写run();

启动线程时可以调用run()方法吗?

可以.因为run方法里面执行的代码就是线程所要执行的方法.

Java程序的执行过程是怎样的?

java源程序 编译.class字节码 类加载器 字节码校验器 解释执行

Java的引用数据类型有哪些?

对象、集合、数组、接口

变量按作用域分类分为几种?

分为两种。局部变量和全局变量.

集合里的接口有哪些?请你创建一个List类的实例。

Collection接口、set接口、list接口、map接口、iterator接口

List list = new ArrayList();

int与Integer的区别?

int是原始数据类型,integer是int的包装类,他提供转换类型的很多方法。

checked异常与unchecked异常的区别是什么?

区分他们的区别主要是看他们是不是runtime的子类,如果是runtime的子类那么就是运行期异常,否则是编译期异常。

final与finally、finalize的区别?

final用于声明属性、方法和类,分别表示属性不可更改,方法不可重写,类不可以继承。

finally是异常处理语句结构的一部分,他表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

重写与重载的区别?参数一样,返回类型不一样 是重载吗?

重载:方法名相同,参数类型不同,参数个数不同,参数顺序不同。

重写:方法名相同,参数的类型相同,返回的类型相同。

不是。因为重载是根据参数来断定的。

写一个数组的创建。

int[] i = new int[5];

int[] i={1,2,3,4,5};

什么时候用输入流,什么时候用输出流?

读取数据的时候使用输入流。

写入数据的时候使用输出流.

双缓冲如何实现的?为什么要用双缓冲?

先在内存中分配一个和我门动画窗口一样大的空间(在内存中的空间我门是看不到的),然后利用 getGraphics_r()方法去获得给空间并将它全部一次性的显示到我门的屏幕上.这样在我门的动画窗口上面是显示出来就非常的流畅了.避免了上面的闪烁效果.

举出常用的list类。哪种情况用哪种好?

arraylist、LinkedList、Vector.

arraylist是连续的空间,遍历速度快,插入和删除就比较慢。

linkedList是一个双向链表存放数据。如果删除和添加元素比较多的话,要效率高的就可以使用LinkedList。

vector和arraylist的功能一样,唯一的区别就是vector是线程安全的,而arraylist是线程不安全的。

Map、list与set的区别?里面常用的类有哪些?

map是以键值对的方式存数据。

list里面的数据可以重复,有顺序

set里面的数据不可以重复,没有顺序。

list的常用类有arraylist

set的常用类有treeset

map的常用类用hashmap

什么时候用继承Thread?什么时候实现Runnable接口?

当一个类中没有继承的时候可以使用thread。

如果一个类中已经使用了继承,就只有实现runnable接口

对对象进行比较怎么做?为什么不用“==”?

其实如果是非String的话,==与equals并没有区别。

因为String他是重写了object的方法,所以这才有了equals比较内容,==比较地址。

静态变量与成员变量的区别。

静态变量在对象加载之前初始化,而成员变量是在编译期间初始化。

静态变量可以直接通过类名点的方式进行访问,而成员变量则不行。

访问修饰符有哪几种?它们之间的区别是什么?

有四种。

前提:在一个项目中。

public可以在所有包中的所有类随意进行访问。

private只能在被当前类访问。

protected:在同一包中,或子类可以进行访问。

默认:同包下能被访问。

对象的序列化怎么实现的?

实现Serializable接口。

讲一下多态的概念。

多态就是相同的行为不同的体现方式。(比如:爱好,每个人都要自己的爱好,但是爱好都不同)

子类继承父类,父类的构造方法能被继承吗?

能。

子类中怎么调用父类的方法?

通过super.方法

this、super的用法与区别?

this的访问当前类的属性和方法。

super是访问父类的属性和方法。

什么是构造方法?构造方法的作用?(目的、意义)

构造方法是在调用的时候被new出来的,每个类都有构造方法。

作用:为对象分配内存、初始化类变量、初始化属性、返回引用。

Error和Exception的区别是什么?

Error:是系统级的错误,可以捕获,但不同处理。

exception是程序错误,可以捕获也可以进行处理。

输入输出流分几种?分别在什么时候使用?

输入流:InputStream、Read

输出流:OutputStream、writer

读取字节,使用InputStream 以字符读取用Read

输出字节,使用OutputStream 以字符输出用writer

异常捕获的流程?如果有异常发生是怎样的流程?

try{

容易发生异常的代码

}catch(错误的类型){

打印错误信息

}finally{

不管有没有异常都要执行

}

String是基本数据类型吗?基本数据类型有哪些?

不是。

基本数据类型:byte、short、int、long、float、double、char、boolean

Collection与Collections的区别?

Collection是一个接口.

collections是一个帮助类。(主要对查找、排序)

HashMap等是实现的 Collection的接口吗?

不是。

hashMap实现的是map接口。他是以键值对的形式保存。

游戏中的paint()方法从何处来的?让窗本重绘最好采用哪种方法?

NO!!!没做过。

为什么从集合中取出来的元素都是Object类型的?.

因为他们都是object的子类。

如果try块中有多种异常,在catch块中如何处理?

直接在类型catch中写一个Exception异常。

如果要抛出异常怎么做?

使用throw明确要抛出异常的代码,在方法中使用throws抛出异常类型。

实现接口使用什么关键字?在实现一个接口时必须要做什么?

使用interface关键字。

实现一个接口必须实现这个接口里面的所有方法.

GUI响应一个事件的代码如何写?

确定事件源;确定监听器,监听器需要实现监听器接口,重写其中的方法;完成事件源和监听器的注册

JVM是什么?它的作用是什么?它和java运行环境有什么区别?

Java虚拟机是一个抽象的计算机,和实际的计算机一样,它具有一个指令集并使用不同的存储区域。

它负责执行指令,还要管理数据、内存和寄存器。Java解释器负责将字节代码翻译成特定机器的机器代码

没有java虚拟机就更不要说运行环境了。

集合和数组的区别。

1:集合中可以存放不同元素的类型,而数组中只能放同一种类型的数据。

2:集合的长度可以随着元素的多少自动增长,而数据的长度一旦定义就不能更改。

3:集合中只能放置对象,数组中可以是对象也可以基本数据类型。

4:集合提供了很好的算法,而数组里面的算法有限。

final这个修饰符的用法?

final主要修饰属性、方法、类。分别代表属性的值不可更改、方法不可以重写、类不可以继承。

如何定义一个常量?定义常量的意义何在?

使用final定义常量.主要是针对一些不需要修改的数据。

谈谈算术表达式的优先级

No!

是否可以继承String类?

不可以。因为String是final

什么样的类不能被实例化?Math这个类能不能实例化?

抽象类不能被实例化。

math不能被实例化。

基本数据类型和引用数据类型的区别是什么?

基本数据类型他们代表的是元素的实际值,也就是说基本数据类型是存在栈中的。

引用数据类型是元素所代表内存中所指向的一个地址,在栈中只是保存对象的地址。而对象的具体内容是保存在堆中的。

引用数据类型作为参数传递时,传递的是什么?

传递的是所指向内存中的一个地址。

局部变量使用时候需要注意什么问题?

局部变量是定义在方法中。

一个子类能同时继承于多个父类吗?

不能,可能出现菱形错误(比如:一个儿子,他只能有一个爸爸,但是反过来说一个爸爸就可能有多个儿子)

子类继承父类时,在子类构造方法的第一行语句应该怎么写?

throw和throws的区别

throw是明确要抛出的语句代码,throws是声明此方法将抛出某类型的异常

byte的取值范围

byte最大的取值范围是+127

byte最小取值范围是-128

java中采用什么字符编码集?char类型能不能放入一个中文字?

Unicode编码。能

main方法中有个参数String[] args。这个参数的值是由谁传递给它的。

由方法传递。

java语言的特点是什么?

简单、面向对象、分布式、跨平台、健壮、解释性、安全、多线程、垃圾回收。

项目开发的流程是怎么样的?

需求分析 设计 编码 测试 维护

创建一个线程有几种方法?

有两种方法:1:extends Thread 2:implements Runnable

在Dos界面下如何编译并执行Java程序?

javac 文件名.java

java 文件名

说几个String常用的方法

比如:拆分字符串(split) trim()取出空格 length()长度

接口里可以定义变量吗?

可以定义变量,但必须是public,而且必须初始化.

接口里方法修符是什么?

接口方法的修饰符是public.

String和StringBuffer的区别?

String他的长度不可增长。

StringBuffer的长度可以增长.

断言有什么作用?

调试程序。

GUI的布局管理器常见的有哪几种?

jframe:border

jpanel:flow

请列举switch( )括号中能接受的所有数据类型。

int\double\float\long\

构造方法和方法有什么区别?构造方法能不能被重载,能不能被重写?

构造方法主要是为了调用这个类的时候用于new出这个类。

方法的作用是实现了某个功能的代码放到这个方法之中。

构造方法能被重载,不能被重写.

如果一个类实现一个接口,可不可以不实现接口里定义的所有方法?

不可以。如过不实现那就不称为接口.

类InputStream中方法read()的返回值是什么?读出的是什么?

返回的是InputStream,读取出来的是字节码。

如何将实现包装类和基本数据类型转化?

通过包装类提供的一些静态方法和方法进行转换.

什么时候类名和文件名必须一致?

在使用dos命令编译的时候。

java帮助文档是如何生成的?

在导出项目的时候选择javadoc.

游戏主界面有一个while循环,能否直接while(true)?

不能,如果是那样就是永远的循环。

什么是线程安全?

线程安全就是指在同一时间只能有一个能访问资源。比如(上厕所:一个公共厕所和一个私有是测试,那个安全性高)

线程同步化会带什么样的结果?

安全性好。

GC是什么? 为什么要有GC?

垃圾回收机制,因为有牛人帮我们做了这件事,就不需要程序员自己回收垃圾。减少了很多事情。

数组有没有length()这个方法? String有没有length()这个方法?

数组没有length(),只有length属性,String有length().

如何启动线程,它直接调用run()方法有什么区别?

Thread.start()方法启动线程,调用run方法必须启动该线程。

当一个线程进入一个对象的一个同步方法后,能否进入其它非同步方法?

不能。

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

会执行,当return返回后就执行finally里面的代码。

finally的作用是什么?一般在什么时候使用?

finally是无论try块中是否发生异常都能确保进行清理工作。一般都是在资源回收的情况下使用。

IO流操作的步骤是怎么样的?

1:建立流 操作流 关闭流

进行IO流操作时,如果操作的文件不存在会发生什么情况?

如果文件找不到,会抛出一个文件未找到异常。

什么是主线程?

一个线程必须执行的线程。

finally是不是什么时候都会执行?

不一定。比如:关闭虚拟机。

什么时候用继承,什么时候用接口?

在不是清楚业务的时候建议使用继承。如果是比较清楚业务的话就使用接口。

因为在接口中如果业务不确定,你想在这个接口中增加一个方法,那么他的子类都必须实现,不管他有没有用。

所以一般在业务很清楚的情况下,根据业务的需求进行选择。

Try块中是否所有的语句都一定会执行,为什么?

不是。因为try中只能有一个异常发生。

类的修饰符能不能是private、static、protected?

不能。如果是私有的这个类写来还有什么意义。

谈谈集合的作用

主要是存取数据元素。

如何让JFrame的初始位置居中(在不同的分辨率中)

设置它的setBounds的坐标.

如何将一个字符串转成一个基本数据类型

使用包装类进行转换。

静态变量和成员变量应该怎么访问?

静态变量可以使用类名点的方式访问。

成员变量可以用对象点的方式访问。

怎么样判断一个异常类是checked异常还是unchecked异常?

看他是否是runtime的子类,如果是runtime的子类则是运行期异常否则是编译期异常。

如何获得java当前的工作目录

使用系统类。System. getProperty_r("user.dir").

如何获得一定范围的随机整数?

使用Math类获取。Math.floor();

怎么样知道磁盘一个目录中有哪些文件?

d:/ dir

什么是包?定义包有什么好处?

包就是为了区分层次性。比如我这个包下面是业务层,另外一个包是持久层。

在IO中字节流和字符流的父类是什么?

InputStream和Reader

ArrayList和Vector的区别

ArrayList:存的元素是连续的内存空间,遍历速度比较快。在尾部插入速度也快,但是在中间插入慢,他是一个线程不安全的类。

verctor的功能和arraylist几乎一样。唯一的区别就是一个vector是线程安全的类。

列出至少5个最常见到的runtime exception并描述在什么情况下出现

答:ArithmeticException

public ArithmeticException(String s)构造具有指定详细消息的 ArithmeticException

public class AnnotationTypeMismatchExceptionextends RuntimeException若某个注释的类型在对该注释进行编译(或序列化)后发生了更改,而程序试图访问该注释的元素时,抛出此异常。

public class CannotRedoExceptionextends RuntimeException当 UndoableEdit 被通知 redo() 但无法执行时抛出。

public class CannotUndoExceptionextends RuntimeException当 UndoableEdit 被通知 undo() 但无法执行时抛出。

public class EventExceptionextends RuntimeException事件操作可以像在其方法描述中指定的那样抛出 EventException。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

是引用传递。

如何去获得字符串的长度?

String中有一个length()可以获取字符串的长度。

继承类和实现接口分别怎么做?

使用关键字:extends implements

try-catch-finally三个基本块的作用?catch里的代码是干什么的?

catch是声明异常抛出的类型。

JDK与JRE分别是什么?

jdk:开发环境

jre:运行环境

什么是变量?

变量就是一个可以改变的量.

什么是标识符?它的命名规则是什么?

标示符可以从一个字母、下划线()或美元符号,也可以跟数字。

标示符区分大小写,并且没有规定最大长度。

标示符不能有java的关键字。

在JAVA中直接写浮点常数,默认是什么类型?

默认是double类型。

if…else…和写两个if 有什么区别

if else是在两个语句中选择其中一个。

if if是两个如果都满足条件都会执行。

变量的命名规则是怎么样的?

变量名首字母小写,后面的单词大写.

变量名不能使用java关键字。

main方法是怎么写的

public static void main(String[] args){}