java经典面试笔试题(扫盲贴)

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

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

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

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

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

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

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

2:接口可以多个接口,抽象类不可以

3:接口需要子类实现,抽象类要需要子类单一继承

4:接口中只能有公有的方法和属性而且必须赋初值,抽象类中随意

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

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

继承就是找出几个类的共同部分,提取出来作为父类。而子类只需要继承父类,就可以共享父类的方法,使用继承能够减少重复代码。

5、方法重载的好处(overload)

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

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

6、项目中印象最深的部分

反射技术的强大之处,

1、当加入新的功能是,不会修改原有代码(面向接口编程)

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

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

7、谈谈集合框架

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

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、多线程的优先级?为什么要分优先级?

因为有一些线程很重要,所以才划分优先级

Trowable是所有错误的超类,它下面有两个子类;error和Execption

error代表系统级别的错误能捕捉,但不能处理。Exception代表异常主要自于程序,可以捕获也能处理

Exception有分为两类:编译器异常、运行期异常。

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

11、说一下iterator

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

任何遍历都可以使用iterator。

12、什么是泛型,泛型的好处?

泛型就是自己指定的一种类型,以后存放的东西就只能有这一种类型。泛型的好处是在编译的时候检查类型安全,并且所有的强制类型转换都是自动和隐式的,提高代码的重用率。

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

空指针异常最常见。根据异常的提示找到相应的类进行处理,发生的原因有很多,比如变量没有初始化,没有赋值,对android来说,activity,service等没有注册,

根据错误提示找到出错的api进行相应的处理

14、java为什么是跨平台的?

对于不同的系统有不同的虚拟机,虚拟机提供了硬件平台规范。用java开发的程序被编译成java虚拟机指令组成的字节代码,虚拟机将这些指令翻译成对应OS的指令(jvm屏蔽了底层操作系统的硬件)。

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

能,通过反射。详情请见:http://my.oschina.net/carbenson/blog/496931

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

http://blog.csdn.net/cyb_23/article/details/40341857

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

1:在我的电脑->属性->高级->环境变量->系统变量

新建变量名JAVAHOME,设置java的JDK目录(不能有中文)

2:选择系统变量PATH,前面添加%JAVAHOME%\bin;

3:运行dos,输入java -version;如果能看到版本号,说明安装成功。

使系统可以找到程序javac.exe的运行路径!方便在dos窗口操作

17、static和非static修饰的变量那个生命周期长?

static更长,因为它一直在内存

什么是线程同步?

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

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

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

好处是提高代码的重用性,安全性,只需要调用该方法不管具体实现。

19、线程中wait和sleep的区别?

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

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

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

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

20、Class和class的区别

Class是类的名称。class是java保留字

21、awt和swing的区别

awt是重量级的组件,swing是轻量级的组件。

eg:在swing组件中当我们调用repaint()方法时,会很快调用paint()。而在重量级组件中,会先调用updata()方法,然后在update()方法里面在调用paint()方法,在重量级组件中实现了双缓冲,我们就要重写update()方法,在重写的时候记得实现刷新屏幕操作。

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

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

23、线程和进程的区别

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

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

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

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

2:方法分解。

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

26、使用接口的好处?

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

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

3:隐藏实现

27、什么是反射?

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

28、创建对象的方法有哪些?

1、用new语句创建对象,这是最常见的创建对象的方法。

2、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

3、调用对象的clone()方法

4、运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法

29、transient是什么意思

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

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

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

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

1:为了减少重复代码

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

32、集合的遍历方式

forEach()、for()、interator

for、while是一样的,形式上不同,

forEach(),Iterator也是一样的,形式上不同,性能的话,肯定是迭代器好一些。迭代器能直接访问集合内部元素。而且有得集合没有索引,根本无法使用for,只能用迭代器。

33、java安全性体现在什么地方?

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

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

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

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

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

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

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

35、面向对象的特征有哪些?

封装、继承、多态(每个java码农必须熟记于心)

36、解析一下在项目里面你怎么去实现多线程的。

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

(假如MyThread已经实现了Runnable接口)

37、启动线程是可以调用run()方法吗?

可以,因为run方法里面执行的代码就是所要执行的方法。

38、java程序的执行过程是怎样的?

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

39、java程序的引用数据类型有哪些?

对象、集合、数组、接口

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

分两种:全局变量和局部变量

41、集合里面的接口有哪些?

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

42、int与Integer的区别

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

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

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

44、final,finally和finalize的区别

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

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

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

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

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

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

返回类型不相同的不是重载,重载是根据参数类判断的。

46、写一个数组的创建

int [] i = new int[5];

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

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

读写数据的时候使用输入流,写入数据的时候用输出流,相对内存来说。

48、双缓冲如何实现?为什么要双缓冲?

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

49、举出常用的list类,哪种情况用哪个

ArrayList、LinkedList、Vector

ArrayList是连续的控件,遍历速度快,插入和删除就比较慢。

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

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

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

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

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

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

list的常用类有arraylist

set的常用类有treeset

map的常用类时hashmap

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

当一个类中没有继承的时候可以继承Thread。

如果类中已经继承了别的类,只能创建一个类并实现Runnable接口,在初始化的时候必须new Thread(new MyThread());

52、对象如何进行比较,为何大多数情况下不能使用“==”?

如果对象不是String的话,==与equals并没有区别。因为String他是重写了object的方法,所以才有了equals比较内容,==比较地址。

53、静态变量与成员变量的区别

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

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

54、修饰符有哪几种?他们之间的区别?

前提:在一个项目里

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

private 只能被当前的类访问

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

默认:同包下能被访问。

55、对象序列化怎么实现?

实现Serializable接口。

56、讲一下多态的概念。

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

57、子类中怎么调用父类的方法

通过super.方法

58、this、super的用法与区别

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

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

59、什么是构造方法?构造方法的作用?

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

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

60、error和exception的区别是什么?

error是系统级别的错误,可以捕获,但不能处理。

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

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

输入流:InputStream、Read

输出流:OutputStream、Writer

读取字节,使用InputStream    

以字符读取使用Read

输出字节,使用OutputStream

以字符输出使用Writer

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

try{

容易发生异常的代码

}catch(错误的类型){

打印错误信息

}finally{

不管有没有异常都要执行

}

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

不是,基本的数据类型有:

byte  8bit

short  16bit

int   32bit

long  64bit

float  32bit

double   64bit

char   16bit

boolean  

64、Collection与Collections的区别?

Collection是一个接口

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

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

不是,HashMap是实现map接口的。

66、如果try快有多个异常,在catch中怎么处理?

直接在catch中写一个Exception异常,因为Exception是所有异常的超类

67、如何抛出异常?

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

throw关键字通常用在方法体中

eg:if(y<0)

{  throw new MyException("除数不能为负数");}

throws关键字通常被应用在声明的地方,用来指定可能抛出的异常。如果发生异常,就会将异常抛出给指定的对象。

68、GUI相应一个事件的代码如何写?

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

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

JVM就是java虚拟机,具有一个指令集并使用不同的存储区域。

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

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

70、集合和数组的区别。

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

2:集合的长度可以随元素的多少自动增长,数组不行

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

4:集合提供很好的算法,数组提供的算法有限

71、String可否被继承?

不可以,String类被final修饰

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

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

73、byte的取值范围?

-128~~+127

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

Unicode编码。能

75、java语言的特点是什么?

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

76、String的几个常用方法

http://www.cnblogs.com/crazyac/articles/2012791.html

77、接口可以定义常量吗?

可以定义,必须加上public 且初始化完毕

78、断言有什么作用?

调试程序

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

int 、double、float、long

80、如何获取String或数组的长度

String使用length(),数组使用length属性

81、JDK与JRE分别是什么?

jdk:开发环境

jre:运行环境





转载于:https://my.oschina.net/carbenson/blog/509368

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值