Java 基础就业题库
1. 类和对象的区别? [易]
类是对象的抽象,是模型概念,而对象是实实在在存在的事物,是现实中存在的实体
2. Java类库中八个标准包分别是什么? [易]
java.lang 提供常用的类、接口、一般异常、系统等编程语言的核心内容。
java.util 包含日期、日历、向量、堆栈等实用工具。
java.io 包含输入输出流类、文件类等与输入输出I/O有关的类。
java.awt 包含窗口和屏幕元素类,事件处理接口等与图形用户界面有关的内容。
java.applet 提供为编写applet小程序所需要的类。
java.text 提供与文本有关的类。
java.net 包含url类等与网络传输有关的东西。
java.sql 提供与数据库应用相关的类和接口。
3. 接口和抽象类有什么区别? [中]
接口是公开的,不能包含私有的方法或变量,而抽象类是可以有私有方法或私有变量的,
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,
接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,
接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
4. 说说java中的内存分配? [难]
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。
引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。但是在写程序的时候,可以人为的控制
5. Character类有哪些常用方法? [难]
charValue()
equals(Object)
getNumericValue(char)
getType(char)
hashCode()
isDefined(char)
isLetter(char)
isLetterOrDigit(char)
isLowerCase(char)
isSpace(char)
isSpaceChar(char)
isTitleCase(char)
isUnicodeIdentifierPart(char)
isUnicodeIdentifierStart(char)
isUpperCase(char)
isWhitespace(char)
toLowerCase(char)
toString()
toTitleCase(char)
toUpperCase(char)
5.Boolean类有哪些方法?
booleanValue()
equals(Object)
getBoolean(String)
hashCode()
toString()
valueOf(String)
6. String s = new String("xyz");创建了几个StringObject? [中]
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
7. String与StringBuffer有什么区别? [难]
8. 是否可以继承String类? [难]
String类是final类故不可以继承。
9. throw与throws有什么区别? [中]
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
throws语句
throws用来标明一个成员函数可能抛出的各种"异常"。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的"异常"的类型。如果"异常"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这copy;在程序的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数的定义语法:type method-name(arg-list) throws exception-list { }下面是一段程序,它抛出了一个"异常",但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
10. 常见的runtime exception有哪些?。 [中]
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
NullPointException
11. 介绍JAVA中的CollectionFrameWork(包括如何写自己的数据结构)? [难]
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射
12. ArrayList和Vector的区别,HashMap和Hashtable的区别 [难]
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
13. Math.round(11.5)等於多少?Math.round(-11.5)等於多少? [难]
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回与参数最接近的长整数.
14. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [难]
switch(expr1)中,expr1是一个整数表达式。应该是int、 short、 char byte。
long,string 都不能作用于swtich。
15. GC是什么? 为什么要有GC? [难]
GC是垃圾收集的意思(GabageCollection)
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,
Java语言没有提供释放已分配内存的显示操作方法。
16. 什么叫方法重载 [中]
方法重载就是一个同名方法,有多种不同的签名
说白了就是一个同名方法可以传入不同个数或类型的参数
之间可以互相调用
17. 数组有没有length()这个方法? String有没有length()这个方法? [中]
数组没有length()这个方法,有length的属性。String有有length()这个方法
18. 什么是抽象类 [中]
仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。一个抽象类不会有实例,这些构造函数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上有其自己的实现。
19. 抽象类的用途 [中]
1) 具体类不是用来继承的。 ScottMeyers曾指出,只要有可能,不要丛具体类继承。2) 假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。3) 抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。4) 抽象类应当拥有尽可能少的数据。
20 .java中接口有什么用? [难]
java不允许多重继承,也就是说一个子类只能有一个父类,Son extends FatherA,FatherB 是错误的
为了弥补这点不足,java允许实现多个接口
21. 什么叫方法重载 [易]
方法重载就是一个同名方法,有多种不同的签名
说白了就是一个同名方法可以传入不同个数或类型的参数
之间可以互相调用
22. 垃圾回收机制的原理? [难]
在JAVA中 ,JAVA VM 每隔一段时间就会查看每一块由NEW分配的内存空间,看指向它的有效引用是否存在,如果这个引用不存在,系统会自动将这块空间归入空闲内存区.这个过程被称为垃圾收集.
23.. 什么叫面向对象? [中]
面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。
24. 面向对象的涉及方法有哪些? [中]
OOA-Object OrientedAnalysis 面向对象的分析
OOD-Object OrientedDesign 面向对象的设计
OOI-Object OrientedImplementation 面向对象的实现
27. 构造器Constructor是否可被(覆盖)override? [难]
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
28. JAVA反射机制作用是什么? [难]
可以于运行时加载、探知、使用编译期间完全未知的
classes。换句话说,Java程序可以加载一个运行时才得知名称
的class,获悉其完整构造(但不包括methods定义),并生成其
对象实体、或对其fields设值、或唤起其methods1。
29. web应用程序体系结构是怎样的? [难]
一般分为表示层、业务层、数据存取层
30. .GET和POST有什么区别? [难]
GET是明码传递,POST是暗码传递
31. HTTP协议的特点? [中]
使用端口发送和接受消息。端口是协议发送和接收数据的信道或机制,80是默认端口
通过这种协议传递数据服务器不会保存连接信息,因此又称为连接信息。
32. 静态方法有什么好处? [难]
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)
使用类的静态方法时,注意:
a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。
(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
fun()
{
static int i=0;//非法。
}
(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}
33. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? [中]
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个对象是否相等。
35. JSP中动态INCLUDE与静态INCLUDE的区别? [难]
动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp"flush="true" />它总是会检查所含文件中的变化,
适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
36. Java有没有goto?
java中的保留字,现在没有在java中使用。
37. 启动一个线程是用run()还是start()? [难]
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
38. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [易]
switch(expr1)中,expr1是一个整数表达式。应该是int、 short、 char byte。
long,string 都不能作用于swtich。
39. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? [难]
会执行,在return前执行。
40. 两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。 [易]
\
41. char型变量中能不能存贮一个中文汉字?为什么? [难]
可以,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
42. Java中的线程有四种状态分别是是什么? [难]
运行、就绪、挂起、结束。
43. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? [难]
字节流,字符流。
字节流继承于InputStream \ OutputStream,
字符流继承于InputStreamReader \ OutputStreamWriter。
44. 静态变量和实例变量的区别? [中]
static i = 10; //常量
class A a; a.i =10;//可变
45. 什么是java序列化,如何实现java序列化? [难]
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化
46. 是否可以从一个static方法内部发出对非static方法的调用? [难]
不可以,如果其中包含对象的method();不能保证对象初始化.
47. 在JAVA中,如何跳出当前的多重嵌套循环? [难]
用break; return 方法。
48. 面向对象的特征有哪些方面 [中]
1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
49. String是最基本的数据类型吗? [中]
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
50. int 和 Integer 有什么区别 [中]
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
51. 运行时异常与一般异常有何异同? [ 难]
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
52. &和&&的区别。 [ 中]
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
53. final, finally, finalize的区别。 [中]
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
34. JAVA中的静态方法有什么理解? [难]
在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)
使用类的静态方法时,注意:
a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。
(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
fun()
{
static int i=0;//非法。
}
(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}