经典java面试题集

更新时间:2024-04-03 07:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

JAVASE部分

1、Choose the three valid identifiers from those listed below. (Choose three)?

A. IDoLikeTheLongNameClass B. $byte C. const D. _ok E. 3_case

答:ABD

2、Which of the following lines of code will compile without error (Choose two)? A. int i=0; if (i) {

System.out.println(“Hi”); } B.

boolean b=true; boolean b2=true; if(b==b2) {

System.out.println(“So true”); } C.

int i=1; int j=2;

if(i==1|| j==2)

System.out.println(“OK”); D. int i=1; int j=2;

if (i==1 &| j==2)

System.out.println(“OK”);

答:BC

3、Which two demonstrate a \ A. public interface Person { }

public class Employee extends Person{ } B. public interface Shape { }

public interface Rectandle extends Shape { } C. public interface Colorable { }

public class Shape implements Colorable { }

D. public class Species{ }

public class Animal{private Species species;} E. interface Component{ }

class Container implements Component{ private Component[] children; }

答:DE

4、What will happen when you attempt to compile and run the following code? public class Static{ static { int x = 5; }

static int x,y;

public static void main(String args[]){ x--;

myMethod();

System.out.println(x + y + ++x); }

public static void myMethod(){ y = x+++++x; } }

A.compiletime error B.prints: 1 C.prints: 2 D.prints: 3 E.prints: 7 F.prints: 8

答:D

5、What is the correct ordering for the import, class and package declarations when found in a single file? A. package, import, class B. class, import, package C. import, package, class D. package, class, import 答:A

6、What will happen when you attempt to compile and run the following code. public class Pvf{

static boolean Paddy;

public static void main(String argv[]){ System.out.println(Paddy); } }

A. Compile time error B. compilation and output of false

C. compilation and output of true D. compilation and output of null 答:B

7、Given the folowing classes which of the following will compile without error?

interface IFace{}

class CFace implements IFace{} class Base{}

public class ObRef extends Base{ public static void main(String argv[]){ ObRef ob = new ObRef(); Base b = new Base();

Object o1 = new Object(); IFace o2 = new CFace(); } }

A. o1=o2; B. b=ob; C. ob=b; D. o1=b;

答:ABD

8、下面那几个函数是public void method(){...}的重载函数? A)public void method( int m){...} B)public int method(){...}

C)public void method2(){...} D)public int method(int m,float f ){...} 答:AD

9、给出如下声明: String s = “Example”;

合法的代码有哪些?

A)s>>>=3 B)s[3]= “X” C)int i = s.length() D)s = s + 10 答:CD

10、如下哪些不是java的关键字?

A)const B)NULL C) false D)this E) native 答:B

11、关于垃圾收集的哪些叙述是对的

A)程序开发者必须自己创建一个线程进行内存释放的工作 B)垃圾收集将检查并释放不在使用的内存

C)垃圾收集允许程序开发者明确指定并立即释放该内存 D)垃圾收集能够在期望的时间释放被java对象使用的内存 答:B

12、已知表达式 int m [ ] = {0,1,2,3,4,5,6}; 下面哪个表达式的值与数组下标量总数相等?

A)m.length() B)m.length C)m.length()+1 D)m.length-1

答:D

13、方法resume()负责恢复哪些线程的执行 A)通过调用stop()方法而停止的线程。 B)通过调用sleep()方法而停止的线程。 C)通过调用wait()方法而停止的线程。 D)通过调用suspend()方法而停止的线程。 答:D

14、有关线程的哪些叙述是对的

A)一旦一个线程被创建,它就立即开始运行。

B)使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运 行。

C)当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。 D)一个线程可能因为不同的原因停止并进入可运行状态。 答:BCD

15、已知如下代码: public class Test {

long a[] = new long [10];

public static void main(String arg[] ){ System.out.print(a[6]); } }

请问哪个语句是正确的?

A)Output is null. B)Output is 0

C)When compile, some error will occur. D)When running, some error will occur. 答:C

16、已知如下代码: public class Test {

public static void main(String arg[] ) {

int i = 5; do{

System.out.print(i); }while(--i>5);

System.out.print(“finished”); } }

执行后的输出是什么? A)5 B)4 C)6 D)finished

答:AD

17、已知如下代码: switch (m) {

case 0: System.out.print(“Condition 0”); case 1: System.out.print(“Condition 1”); case 2: System.out.print(“Condition 2”); case 3: System.out.print(“Condition 3”);

default: System.out.print(“Other Condition ”); }

当m的值为什么时能输出“Condition 2” A)0 B)1 C)2 D)3 E) 4 F)None 答:ABC

18、下面的哪些声明是合法的?

A)long 1 = 4990 B)int i = 4L C)float f =1.1 D)double d = 34.4 答:AD

19、给出如下代码: class Test{ private int m;

public static void fun() { //some code. } }

如何使成员变量m被函数fun()直接访问?

A)将private int m改为 protected int m B)将private int m改为 public int m

C)将private int m改为 static int m D)将private int m改为int m 答:C

20、以下哪个方法用于定义线程的执行体?

A)start() B)init() C)run() D)main() E)synchronized() 答:C

21、请看如下代码 class Person { private int a;

public int change(int m) { return m; } }

public class Teacher extends Person { public int b;

public static void main(String arg[]) { Person p = new Person(); Teacher t = new Teacher(); int i; // point x } }

下面哪些放在// point x?行是正确的? A i = m; B i = b; C i = p.a;

D i = p.change(30); E i = t.b;

答:DE

22、给出下面的代码段:( ) public class Base{ int w, x, y, z;

public Base(int a, int b) {x=a; y=b; }

public Base(int a, int b, int c, int d) {

//assignment x=a, y=b w=d;z=c; }}

在代码说明//assignment x=a, y=b处写下如下哪几个代码是正确的? A)Base(a, b); B)x=a, y=b; C)x=a; y=b; D)this(a,b); 答:CD

23、给出下面代码: public class Person{

static int arr[ ] =new int[10];

public static void main(String a [ ]){ System.out.println(arr[ 1 ]); } }

哪个选项是正确的? A. 编译时将产生错误;

B. 编译时正确,运行时将产生错误; C. 输出0; D. 输出空。 答:C

24、关于运算符>>和>>>描述正确的是

A. >>执行移动 B. >>执行翻转

C. >>执行有符号右移,>>>执行无符号右移 D. >>执行无符号右移,>>>执行有符号右移 答:C

25、下列关于栈的叙述正确的是

A栈是非线性结构 B栈是一种树状结构

C栈具有先进先出的特征 D栈具有后进先出的特征 答:D

26、选出Java语言中的关键词(多选) A. NULL B. sizeof

C. implements D. extends

答:CD

27、现有下述代码,选择出能够打印出”Test2”的数字(多选) switch(x){ case 1:

System.out.println(\ case 2: case 3:

System.out.println(\ break; }

System.out.println(\ A.0 D. 3 B.1 E. 4 C.2 答:CD

28、字符(char)的整型表示范围为

A. 0 . . . 32767 C. -256 . . . 255

B. 0 . . . 65535 D. -32768 . . . 32767

答:B

29、选择Java语言中的基本数据类型(多选) A. byte D. char B. Integer E. long C. String 答:ADE

30、从下列选项中选择正确的Java表达式(多选)

A. int k=new String(“aa”); B. String str=String(“bb”); C. char c=74; D. long j=8888;

答:CD

31、下述代码的执行结果为 public class foo { static String s;

public static void main (String[]args) { System.out.printIn (“s=” + s); } }

A.代码能够编译,打印出“s=” B.代码能够编译,打印出“s=null”

C.代码不能够编译,因为String s 没有初始化

D.代码能够编译,但是当调用toString()时抛出NullPointerException 异常 答:B

32、下述代码的执行结果是 class Super {

public int getLength() {return 4;} }

public class Sub extends Super { public long getLength() {return 5;} public static void main (String[]args) { Super sooper = new Super (); Super sub = new Sub();

System.out.println(sooper.getLength()+ “,” + sub.getLength() ); } }

A. 4, 4 B. 4, 5 C. 5, 4 D. 5, 5

E. 代码不能被编译 答:E

33、下述程序的执行结果为 int index = 1;

String [] test = new String[3]; String foo = test[index]; A. foo 的值为 “” B. foo 的值为 null

C. 抛出一个异常

D. 程序不能够被编译 答:B

34、关于Java语言,下列描述正确的是(多选) A. switch 不能够作用在String类型上 B. List, Set, Map都继承自Collection接口 C. Java语言支持goto语句

D. GC是垃圾收集器,程序员不用担心内存管理 答:AD

35、指出下列程序运行的结果 public class Example{

String str=new String(\ char[]ch={'a','b','c'};

public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch);

System.out.print(ex.str+\ System.out.print(ex.ch); }

public void change(String str,char ch[]){ str=\ ch[0]='g'; } }

A good and abc B good and gbc C test ok and abc D test ok and gbc

答:B

36、int[][] myArray=new int[][]{new int[]{5,6,2},new int[]{6,9,7,8,3},new int[]{3,2}}; myArray[2][2]的值是() A. 9 B. 2 C. 6 D. 越界 答:D

37、下列描述中,那些符合Java语言的特征(多选) A. 支持跨平台(Windows,Linux,Unix等) B. GC(自动垃圾回收),提高了代码安全性 C. 支持类C的指针运算操作

D. 不支持与其它语言书写的程序进行通讯 答:ABD

38、关于异常(Exception),下列描述正确的是(多选)

A. 异常的基类为Exception,所有异常都必须直接或者间接继承它 B. 异常可以用try{ . . .}catch(Exception e){ . . .}来捕获并进行处理 C. 如果某异常继承RuntimeException,则该异常可以不被声明 D. 异常可以随便处理,而不是抛给外层的程序进行处理 答:ABC

39、(单选)声明一个委托public int myCallBack(int x); 则用该委托产生的回调方 法的原型应该是

A. void myCallBack(int x) B. int receive(int num) C. String receive(int x) D. 不确定的 答:B

40、(单选)下面的代码实现了设计模式中的什么模式 public class A { private A instance; private A() { }

public static A getInstance { if ( A == null )

instance = new A(); return instance; } }

A. Factory

B. Abstract Factory C. Singleton D. Builder 答:C

41、class Class1 {

public static int Count = 0; public Class1() {

Count++; } }

public static void main(String args[]){

Class1 o1 = new Class1(); Class1 o2 = new Class1(); }

请问,Class1.Count的值是多少?( ) A. 1 B. 2 C. 3 D. 4

答:B

42、三种字符串判空串方法: 1: bool isEmpty = (str.length() == 0); 2: bool isEmpty = (str == String.Empty); 3: bool isEmpty = (str == \ 哪种方法正确? A. 1 B. 2 C. 3

答:A

43、MAX_LENGTH 是int 型public 成员变量,变量值保持为常量100,用简 短语句定义这个变量。

A .public int MAX_LENGTH=100; B. final int MAX_LENGTH=100;

C. final public int MAX_LENGTH=100; D. public final int MAX_LENGTH=100.

答:CD

44、 String s=new String(“hello”); String t =new String(“hello”); char c [ ] ={.h.,.e.,.l.,.l.,.o.}; 下列哪些表达式返回true ? A.s.equals(t); B.t.equals(c); C.s= =t ;

D.t.equals (new String(“hello”)); E.t= = c; 答:AD

45、类 Teacher 和 Student 是类 Person 的子类; Teacher t; Student s;

// t and s are all non-null.

if (t instanceof Person ){ s=(Student)t; } 最后一条语句的结果是:

A.将构造一个Student 对象; B.表达式是合法的; C.表达式是错误的;

D.编译时正确, 但运行时错误。 答:D

46、给出下面代码段(多选) 1、switch (m)

2、{ case 0 :System.out.println(“case 0”);

1. case 1: System.out.println(“case 1”); break; 2. case 2:

3. default : System.out.println(default”); 4. }

下列m 的哪些值将引起 “default ”的输出? A.0 B. 1 C. 2 D. 3 答:CD

47、下列哪些说法是正确的? A. Java语言只允许单一继承 B. Java语言只允许实现一个接口

C. Java语言不允许同时继承一个类并实现一个接口 D. Java语言的单一继承使得代码更加可靠. 答:AD

48、main方法的返回类型是: A.int B.void C.boolean D.static E. public 答:B

49、给定下列代码: public void test() { try {

oneMethod();

System.out.println( “condition 1”);

} catch (ArrayIndexOutOfBoundsException e){ System.out.println(“condition 2”); }catch(Exception e){

System.out.println(“condition 3”); }finally{

System.out.println(“finally”); }

}

oneMethod 正常运行, 将显示? A. condition 1 B. condition 2 C. condition 3 D. finally 答:AD

50、下列代码哪几行会出错 1) public void modify() { 2) int I, j, k; 3) I=100; 4) while(I>0){ 5) j=I*2;

6) System.out.println(“The value of j is “ +j); 7) k=k+1; 8) I--; 9) } 10) }

A. line 4 B. line 6 C. line 7 D. line 8 答:C

51、对于下列代码 public class Parent {

public int addValue (int a ,int b ){ int s; s = a + b; return s; } }

class Child extends Parent { }

下述哪些方法可以加入类Child?

A . int addValue(int a ,int b),//do something…- B. public void addValue(),//do something…- C. public int addValue(int a ),//do something…-

D. public int addValue( int a, int b )throws MyException ,//do something…- 答:BC

52、请选出下面两个类间关系描述错误的项 a. public interface A {} public class B extends A {} b. public interface A {}

public interface B extends A {}

c. public interface A {}

public class B implements A {} d. public class A {}

public class B { protected A a;} 答:A

53、下面正确的是 A)float f = 3.14; B)byte i = 225; C)long k = 33; D)int p[ ][ ]; 答:CD

54、下列创建数组的方法正确的是 A)int two Dim[ ][ ] = new int[4][ ]; B)int two Dim[ ][ ] = new int[ ][4]; C)int two Dim[ ][ ] = new int[4][5]; D)char a[ ] = {‘A’, ‘B’}; E)char c[ ] = “ABC” ; 答:ACD

55、关于线程设计,下列描述正确的是

A. 线程对象必须实现Runnable接口

B. 启动一个线程直接调用线程对象的run()方法 C. Java提供对多线程同步提供语言级的支持 D. 一个线程可以包含多个进程 答:C

56、public class X extends Thread implements Runnable{

public void run(){

System.out.println(\ }

public static void main(String args[]) { Thread t=new Thread(new X()); t.start(); } }

A 第一行会产生编译错误 B 第六行会产生编译错误 C 第六行会产生运行错误 D 程序会运行和启动

答:D

57、根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否 会引起死锁?

public void test(int i) {

lock(this) { if (i>10) { i--; test(i); } } }

A. 会锁死 B. 不会锁死

答:B

58、欲构造ArrayList类得一个实例,此类实现了List接口,下列哪个方法是正 确的:

A ArrayList myList = new Object(); B List myList = new ArrayList(); C ArraylList myList = new List(); D List myList = new List(); 答:B

59、Which of the following are methods of the Runnable interface。 A. run B. start C. yield D. stop 答:A

60、Java网络程序设计中,下列正确的描述是(多选) A. Java网络编程API建立在Socket基础之上 B. Java网络接口只支持TCP以及其上层协议 C. Java网络接口只支持UDP以及其上层协议 D. Java网络接口支持IP以上的所有高层协议 答:AD

61、Java I/O程序设计中,下列描述正确的是 A. OutputStream用于写操作 B. InputStream用于写操作

C. I/O库不支持对文件可读可写API 答:A

62、选出对于XML的评论正确的选项___

A. XML是一种语言无关平台无关的自描述语言。

B. 标签实际上包含了元素和属性两部分。用元素来描述有规律的数据,用属性 来描述系统数据。

C. XML不可跨平台,不具备扩展性。

D.XML文档中的每一个元素都处在一个名字空间中;如果没有指定的名字空间, 缺省的名字空间就是和该元素相关联的名字空间。 答:AD

63、(单选)What compiler switch creates an xml file from the xml comments in the files in an assembly? A. /text B. /doc C. /xml D. /help

答:C

64、说说下面语句是否有错误,或可能出现的缺陷,并指出错误,或缺陷在哪 里?

public class MyFile implements Runnable{ public void run(){ while (true){ try{

FileReader fr=new FileReader(new File(\ String line=fr.readLine(); System.out.println(line); }catch(IOException err) { }

Sleep(1000); } }

答: 1.fr.readLine()没有这个方法

2.Sleep(1000)需要用Thread.sleep(1000); 3.没有关闭FileReader

4.死循环,没有退出的可能

65、判断下列语句是否正确,如果有错误,请指出错误所在? List a = new ArrayList(); a.add(5);

答:错误,5的默认类型为int。

66、判断下列语句是否正确,如果有错误,请指出错误所在?

void foo(final int []arg){ if (arg.length > 1) arg[0] = 5; }

答:正确

67、判断下列语句是否正确,如果有错误,请指出错误所在? interface A{

int add(final A a); }

class B implements A{ long add(final A a){

return this.hashCode() + a.hashCode(); } }

答:错误,返回值不是long类型 68、指出下面程序的运行结果: class A{ static{

System.out.print(\ }

public A (){

System.out.print(\ } }

class B extends A{ static{

System.out.print(\ }

public B (){

System.out.print(\ } }

public class Test{

public static void main(String[] args){ A ab = new B (); ab = new B (); } }

答:abxyxy

69、下列代码的输出结果是什么? public class MyFor {

public static void main (String argv[]){ int i; int j;

outer:for(i=1;i<3;i++) inner:for(j=1;j<3;j++){ if (j==2) continue outer;

System.out .println(\

} } }

答:Value for i=1Value for j=1 Value for i=2Value for j=1

70、查看下面的代码,写出可以使程序正常执行的修改方法 1.public class MyClass { 2.static String s1; 3. String s2;

4. public static void main(String args[]) { 5. String s3;

6. System.out.println(\ 7. System.out.println(\ 8. System.out.println(\ 9. } 10.}

答:删除第7行,将第5行改为String s3 = \

71、为了显示myStr = 23 这样的结果,写出在控制台输入的命令 public class MyClass {

public static void main(String args[]) { String s1 = args[0]; String s2 = args[1]; String myStr = args[2];

System.out.printin(\ } }

答:java MyClass 1 2 3 4

72、写出下面代码的执行结果 public class MyClass {

static void aMethod(StringBuffer sf1, StringBuffer sf2) { sf1.append(sf2); sf2 = sf1; }

public static void main(String[] args){ StringBuffer sf1 = new StringBuffer(\ StringBuffer sf2 = new StringBuffer(\ aMethod(sf1,sf2);

System.out .println(sf1+ \ } }

答:AB:B

73、第3行中生成的object在第几行执行后成为garbage collection的对象? 1.public class MyClass {

2. public StringBuffer aMethod() {

3. StringBuffer sf = new StringBuffer(\ 4. StringBuffer[] sf_arr = new StringBuffer[1]; 5. sf_arr[0] = sf; 6. sf = null;

7. sf_arr[0] = null; 8. return sf; 9. } 10.}

答:第7行

74、写出执行下面的代码后的结果

public class MyClass {

public static void main(String args[]) { java.util.Vector v1 = new java.util.Vector(); v1.addElement(\

v1.addElement(new Float(3.14f)); v1.addElement(10);

System.out.println(v1.elementAt(0) + \ v1.elementAt(2)); } }

答:Hello:3.14:10

75、写出执行下面代码后的正确结果 interface MyDB {

public void getConnection(); }

class MyDBDriver implements MyDB { public void getConnection() {

System.out.println(\ } }

public class MyClass {

public static void aMethod(MyDB db) { db.getConnection(); }

public static void main(String args[]) {

MyDBDriver db_driver = new MyDBDriver(); aMethod(db_driver);

} }

答:getConnection()

76、下列程序运行的结果是 class A { class Dog {

private String name; private int age; private int step; Dog(String s, int a) { name = s; age = a; step = 0; }

public void run(Dog fast) { fast.step++; } }

public static void main(String args[]) { A a = new A();

Dog d = a.new Dog(\ d.step = 25; d.run(d);

System.out.println(d.step); } }

答:26

77、下列程序运行的结果是 public class foo {

public static void main (String args[]){ String s;

System.out.println(\ } }

答:编译出错

78、请看下列程序,运行结果是 class Super{ int i=10; Super(){ print(); i=20; }

void print(){

System.out.print(i); }

}

public class Sub extends Super{ int j=30; Sub(){ print(); j=40; }

void print(){

System.out.print(j); }

public static void main(String[] args){ System.out.print(new Sub().j); } }

答:03040

79、getSomething ()执行时发生IllegalArgumentException会出现什么样的结 果?

void makeConnection(String url) { try {

getSomething();

}catch(NullPointerException e) { System.out.printin(\ return;

}catch(Exception e) {

System.out.println(\ } }

答:打印Exception

80、有2个类Cat及WhiteCat,代码如下: public class Cat {

protected static String color = \ public Cat() { }

public void showCatColor() {

System.out.println(\ }

public static void showColor() { System.out.println(\ } }

public class WhiteCat extends Cat {

protected static String color = \ public WhiteCat() { super(); }

public void showCatColor() {

System.out.println(\ }

public static void showColor() {

System.out.println(\ } }

请分析下面各段程序的运行结果 A.WhiteCat whiteCat = new WhiteCat(); Cat cat = whiteCat; cat.showColor(); cat.showCatColor(); B.Cat cat = new Cat();

WhiteCat whiteCat = (WhiteCat) cat; cat.showColor(); cat.showCatColor();

C.Cat cat = new WhiteCat();

WhiteCat whiteCat = (WhiteCat) cat; cat.showColor(); cat.showCatColor();

答:

A段执行的结果是: Cat:random WhiteCat:white

B段执行的结果是:

会抛出java.lang.ClassCastException异常 C段执行的结果是: Cat:random WhiteCat:white

81、现有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。 要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打 印这2个数。注意:程序不用实现自然数随机放入数组的过程。 答:

int[] b = new int[]{....存入98个随机的1~100的整数}; int[] a = new int[100];

for(int t : b) a[t-1]=t;

for(int t=0; t < a.length; t++) if(a[t]==0)

System.out.println(t+1);

82、写一段程序用冒泡算法对数组int[]array内的元素有小到大重新排列 答:

pacakge com.tarena; class BubbleSort{

public static void main(String[] args) {

int[] arr = {8,4,2,3,5}; arr = sort(arr); for(int a : arr) {

System.out.print(a+\ } }

public static int[] sort(int[] array) { int cnt;

int n = array.length; do{ cnt = 0;

for( int i=1; i

if( array[i]

int temp = array[i]; array[i] = array[i-1]; array[i-1] = temp; cnt++; } } n--;

}while( cnt!=0 ); return array; } }

83、设计线程一个类WorkerThread,其构造函数接受一个message字符串作 为参数,把该字符串打印到console上,同时,在WorkThread的main函数中 启动该线程

答:

package com.tarena;

public class WorkerThread extends Thread { private String message;

public WorkerThread(String message) { this.message = message; }

public void run(){

System.out.println(message); }

public static void main(String[] args) {

new WorkerThread(\ } }

84、在web应用开发过程中经常遇到输出某种编码的字符,如从GBK到iso8859-1 等,如何输出一个某种编码的字符串? 答:public static String translate(String str) { String tempStr = \ try {

tempStr = new String(str.getBytes(\ tempStr = tempStr.trim(); } catch (Exception e) {

System.err.println(e.getMessage()); }

return tempStr; }

85、写一个单例

答:public class Singleton {

private Singleton sin = new Singleton(); private Singleton(){ }

public static Singleton init(){ return sin; } }

86、请写出一个公用方法,输入String返回该串是否含有非空字符,并写出junit 的测试用例 答:

public boolean hasBlank(String str){ if(str.endWith(\ return false;

} else{

String*+ strs=str.split(“ ”); if(strs.length()==1){ return false; } }

return true; }

@Test

public void testFun(){

System.out.println(TestString.nullString(\ }

87、JAVA实现一种排序

答:用插入法进行排序代码如下 package com.tarena; import java.util.*; class InsertSort {

ArrayList list;

public InsertSort(int num,int mod) {

list = new ArrayList(num);

Random rand = new Random();

System.out.println(\ for (int i=0;i

list.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); System.out.println(\ } }

public void SortIt() {

Integer tempInt; int MaxSize=1;

for(int i=1;i

tempInt = (Integer)list.remove(i);

if(tempInt.intValue()>=((Integer)list.get(MaxSize-1)).intValue()) {

list.add(MaxSize,tempInt); MaxSize++;

System.out.println(list.toString());

} else {

for (int j=0;j

if (((Integer)list.get(j)).intValue()>=tempInt.intValue()) {

list.add(j,tempInt); MaxSize++;

System.out.println(list.toString()); break; } } } }

System.out.println(\ for(int i=0;i

System.out.println(\ } }

public static void main(String[] args) {

InsertSort sort = new InsertSort(10,100); sort.SortIt(); } }

JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

88、创建类Person,其中存储的成员数据为:age(int),sex(boolean),weight(int), 至少有一个构造函数可以初始化这三个属性值,同时提供获取这三个属性值的 public方法 答:

public class Person { private int age;

private boolean sex; private int weight; public Person() { }

public Person(int age, boolean sex, int weight) { this.age = age; this.sex = sex;

this.weight = weight;

}

public int getAge() { return age; }

public boolean isSex() { return sex; }

public int getWeight() { return weight; } }

89、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节 截取的字符串。 但是要保证汉字不被截半个,如\我ABC\,4,应该截为\我AB\, 输入\我ABC汉DEF\,6,应该输出为\我ABC\而不是\我ABC+汉的半个\。 答:

package com.tarena; class SplitString {

public static String split(String str,int num) {

byte[] strs = str.getBytes(); if(strs[num-1]<0) {

num=num-1; }

byte[] news = new byte[num];

System.arraycopy(strs,0,news,0,num); return new String(news); }

public static void main(String[] args) {

String str = split(\我ABC\ System.out.println(str);

String str2 = split(\我ABC走DEF\ System.out.println(str2); } }

90、现有一个32位的整型变量 value和一个有32个元素的数组a[32]

要求:a.对value随机赋值;b.让数组a[n]的值等于value“位n”的值,0<=n<=31。 举例:如果value的“位0”(Bit0)=0,那么a[0]=0;如果value的“位10” (Bit10)=1,那么a[10]=1。 答:

package com.tarena;

import java.util.Random; public class TestArray {

final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

public static void main(String[] args) { Random r = new Random(); int value = r.nextInt(); System.out.println(value);

char[] cs = TestArray.test(value, 1); int[] is = new int[32];

for (int i = 0; i < cs.length; i++) { is[i]=((int)cs[i])==0? cs[i]:cs[i]-48; }

for (int i = 0; i < is.length; i++) { System.out.print(is[i]); } }

public static char[] test(int i, int shift) { char[] buf = new char[32]; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; do {

buf[--charPos] = digits[i & mask]; i >>>= shift; } while (i != 0); return buf; } }

91、编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序输出, 例如:“ABC137GMNQQ2049PN5FFF”输出结果应该为01234579 答:

package com.tarena; import java.util.Arrays;

public class NumberSplitChar {

public static void main(String[] args) { String str=\ char[] beforechars=str.toCharArray();

char[] afterchars=new char[beforechars.length]; int j=0;

for(int i=0;i

if(beforechars[i]>='0' && beforechars[i]<='9'){ afterchars[j++]=beforechars[i]; } }

Arrays.sort(afterchars);

for(int i=(afterchars.length-j);i

91、排序都有哪几种方法?用伪代码实现一个快速排序 答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排 序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱 排序、基数排序)

快速排序的伪代码:使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中

选择一个元素作为middle,该元素为支点;把余下的元素分割为两段left和 right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点; 递归地使用快速排序方法对left进行排序;递归地使用快速排序方法对right 进行排序;所得结果为left + middle + right。

92、请用JAVA实现两个类,分别实现堆栈(Stack)和队列(Queue)操作。 答:public class MyStack { private List list; public MyStack(){ list = new ArrayList(); }

public boolean isEmpty(){ return list.size() == 0; }

public void push(Object obj){ list.add(obj); }

public Object pop(){ if(list.size()>0){

Object obj = list.get(list.size()-1); list.remove(list.size()-1); return obj; }else{

return null;

}

}

public int getNumber(){ return list.size(); } }

class IntegerQueue {

public int[] integerQueue;// 用来当队列 public int tail;// 队尾

public int size;// 队的长度,也可以设置一个默认值,溢出时从新申请 public IntegerQueue(int size) { integerQueue = new int[size]; this.size = size; tail = 0; }

public void inQueue(int i) { if (tail < size) {

this.integerQueue[tail] = i; tail++; } else {

System.err.println(\溢出啦!\ } }

public int outQueue() { if (tail >= 0) {

int tmp = this.integerQueue[0]; tail--;

return tmp; } else {

System.err.println(\队列为空!\ throw new RuntimeException(); } } }

93、简述JAVA代码安全性

答:类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机 文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程 序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就 固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加

保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,

主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码 没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法 的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解 释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的 合适调用。

94、简述java中的继承

答:Java中是单继承关系,也就是说一个类只能有一个父类,但是可以同时实 现多个接口;对于接口本身而言,可以继承多个接口。这样做的目的就是为了阻 止因为多继承而造成的的业务对象本身的可读性的降低。 95、简述java中的垃圾回收

答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出 现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃, Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的 目的,Java语言没有提供释放已分配内存的显示操作方法。 Java 程序员不用 担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下 面的方法:System.gc() 或Runtime.getRuntime().gc() 。

5、一个subclass怎样调用superclass中的方法(myMethod)和构造函数? 答:用super关键字,子类去调用父类的方法,如:super.myMethod();子类去调 用父类的构造函数,如:super();。

96、String a=null; if (a!=null && a.length()>10) {...}

上面面的代码,如果你用“&”替换“&&”将发生什么错误?

答:会抛出空指针异常;&&会短路,只要遇到boolean值为false就不会再往后 执行了;而&则是会把两边的运算都执行完。 97、abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用

于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现 该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是 一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态 方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也 是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中 实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现 这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是public static final的。一个类可以实现多个接口,当类实现接口时,必须实现接口 的所有方法。抽象类在Java语言中表示的是一种单继承的关系,而接口表示的 是多继承的关系;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法, 而在接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实 现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象 方法。

98、String, StringBuffer StringBuilder的区别。

答:String是不可变的;StringBuffer是可变的,如果你对字符串中的内容经 常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要 String,那么使用StringBuffer的toString()方法,并且它是线程安全的; StringBuilder是从 JDK 5 开始提供的类,为StringBuffer该类补充了一个单 个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有 相同的操作,但由于它不执行同步,所以速度更快。 99、谈谈final, finally, finalize的区别

答:final —修饰符(关键字)如果一个类被声明为final,意味着它不能再派 生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的 ,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不 被改变。被声明为final的变量必须在声明时给定 初值,而在以后的引用中只 能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个 异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块( 如果有的话)

finalize —方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对

象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定 这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此 所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其 他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 100、屋子里面有椅子,椅子有四只腿及靠背。屋子、椅子什么关系,椅子、腿、 靠背什么关系(HAS-A,IS-A)? 答:屋子HAS-A椅子 椅子HAS-A四只腿及靠背

101、你认为java与其他(你所了解的)语言相比,有什么优点和缺点? 答:1). Java没有预处理指令。(如C中的#define , #include , #ifdef等)。 C中的常量定义在Java中用static final来取代。 2). Java中没有C中的全局变量。

3). Java中的主类型的size是确定的,而C中主类型的size跟平台相关。 4). Java中没有了指针,它使用了类似的句柄来取代指针,但是Java中不 允许对句柄进行加减,没有取地址操作符之类的东东。 5). Java有垃圾收集机制,不需要自己释放空间。

6). Java没有goto语句。Java在C提供的控制语句基础上增加了异常处理 和标签break和continue语句。这些可以替代goto的作用。

7). C要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开 始处定义,而Java允许这些定义在方法或块的任意地方出现。

8). Java不要求在调用一个函数以前已经定义了该函数,可以在调用点后 面定义。而C有这个要求。

9). Java不支持C中的strut 和 union类型。Java支持方法重载。

10). Java不支持C中的enum关键字。 11). Java不支持C中的bitfields能力。 12). Java不支持C的typedef。 13). Java不支持C的方法指针。 14). Java不支持C的可变参数表。

java和.net的都不适合做桌面程序,这两个比较适合写WEB的程序;

c++比较适合写桌面程序c++/java都是强类型的静态预编译型语言。优点是结构 性强,程序可读性好,开发效率高,适合开发大型应用。就本人的经验而言,java 的开发效率优于c++,实际上java大行其道的首要因素就是它够简单。java尤 其不适合开发桌面程序,GUI的API一直都是java的弱点;

perl/python是动态解释型语言。perl是弱类型的而python是强类型的,后 者的变量一旦赋值,就拥有了类型,不能再赋其他类型的值。不象

javascript/perl可以随便定义。perl是unix下的王牌工具,在缺乏IDE的字 符界面下,很好地弥补了unix;

shell/utility的不足,并且部分继承了面向对象语言的灵活性。适合用来 搭建大程序。

102、Java中包含哪些基本数据类型?String是最基本的数据类型吗?是否可以 继承String类?

答:基本类型包括byte、int、short、long、float、double、boolean

String不是基本数据类型,因为String类是final的,所以不能够被继承。 103、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

答:Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数 最接近的长整数,参数加1/2后求其floor。

104、Bit和 Byte是什么意思?它们之间有什么关系?

答:bit中文名称是位,是用以描述电脑数据量的最小单位。

byte(字节)是计算机信息技术用于计量存储容量和传输容量的一种计量单 位1byte=8bit

105、用最有效的方法算出2乘已8对于几? 答: 2 << 3。

106、String s=new Stirng(\创建了几个String Object? 答:创建两个,一个在堆内存(通过new得到),另一个在字符串常量池(“xyz”) 对象。

107、swtich是否能作用在byte上?是否能作用在long上? 是否能作用在char 上? 是否能作用在short上?是否能作用在String上? 答:可以用在byte、short、int、char和枚举类型。 108、char型变量中能不能存贮一个中文汉字?为什么?

答:能够定义成为一个中文的,因为java中以unicode编码,一个char占16 个字节,所以放一个中文是没问题的。

109、java语言中public、private、protected三个关键字的用法,重写和重载 的区别。 答:

作用域 当前类 同包 子类 其它 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×

重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值 相同,访问权限不能更封闭,抛出异常不能宽泛;

重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或 参数的顺序不同),返回值可以不相同。

110、说一下 “==”和equals()方法在字串变量操作中的不同? 答:”==”比较的是两个字符串对象的地址,equals()是比较的两个字符串的具 体值。

111、异常机制中try{}后一定要跟catch和finally吗?

答:一定要有catch或者finally,catch子句紧跟在try块后面,用来指定你 想要捕捉的“异常”的类型。如果有catch的话,可以没有finally。 112、能用foreach遍历访问的对象需要实现? 答:需要实现Iterable接口

113、说出一些JDK常用的类,包,接口,请各举5个 类:

HashSet 、Thread 、String 、FileInputStream 、Class 包:

java.lang 、java.io 、java.util 、java.text 、java.sql 接口:

Collection 、Set 、List 、Comparable 、Serializable

114、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是 否可以implements(实现)interface(接口)?

答:匿名内部类是可以继承其它类,同样也可以去实现接口的,用法为: JButton button = new JButton();

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e){//some mothod...} });

这样的用法在swing编程中是经常使用的,就是因为它需要用到注册监听器 机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是 最方便的。

115、Java的接口和C++的虚类的相同和不同处。

答:由于Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对 象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有 更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类 要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是public.一个类可以实现多个接口。

116、JAVA中数组有没有length()这个方法? String有没有length()这个方法? 答:数组是没有length()方法的,数组是使用数组对象.length来得到该数组的长 度;String是有length()方法的。

117、接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体 类?

答:接口是可以继承接口的并且可以继承多个其它接口;抽象类可以实现接口中 的方法;抽象类可以继承实体类。

118、java中用char型变量中能不能存放一个中文汉字?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16 个字节,所以放一个中文字符是没问题的。 119、面向对象的特征有哪些方面?

答:面向对象的特征主要有以下几个方面:

1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地 注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一 部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了 一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称 为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原 始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量, 并且类可以修改或增加新的方法使之更适合特殊的需要。

3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封 装的对象,这些对象通过一个受保护的接口访问其他对象。

4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参 数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的 优势,很好的解决了应用程序函数同名问题。 120、什么是java序列化,如何实现java序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进 行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之 间。序列化是为了解决在对对象流进行读写操作时所引发的问题;

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需实现 的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使 用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对 象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以

将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

121、什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发频 率?它能保证程序有足够的可用内存吗?

答:垃圾回收(GC)是Java语言的一个重要特性,作用是释放不再被使用的内存。 垃圾回收由系统进行管理。在系统认为需要的时候自动启动一个线程进行处理。 尽量减少垃圾内存,也就是新建对象,的数量,可以降低垃圾回收的频率。垃圾 回收机制无法保证有足够的内存。 122、什么是JAVA的反射?

答:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程 序集、模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到 现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段 和属性。

123、构造器Constructor是否可以被继承?是否可以被Override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重 载Overloading。

124、UDP和TCP连接有和异同?

答:TCP协议是面向连接的,每个数据包的传输过程是:先建立链路、数据传输、 然后清除链路。数据包不包含目的地址。受端和发端不但顺序一致,而且内容相 同。它的可靠性高;UDP协议是面向无连接的,每个数据包都有完整的源、目的 地址及分组编号,各自在网络中独立传输,传输中不管其顺序,数据到达收端后 再进行排序组装,遇有丢失、差错和失序等情况,通过请求重发来解决。它的效 率比较高。

125、程序注释的用途有哪些?带注释的程序有什么缺点?

答:注释可以说明程序,给自己或他人在阅读程序时提供帮助,使程序更容易理 解,也就是增强程序代码的可读性。过多的代码注释会使程序结构变得不清晰。 126、在程序中退出两重循环可以用哪些语句? 答:可以使用标签: loop1: for (;;) { for (;;) {

break loop1; } }

127、什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和 拆箱?什么是 重载?CTS、CLS和CLR分别作何解释?

答:应用程序域:一种边界,它由公共语言运行库围绕同一应用程序范围内创建 的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。 应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的 对象隔离,以使运行时行为可以预知。在一个单独的进程中可以存在多个应用程

序域。

托管代码:由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管 代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检 查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用 程序行为。

强类型系统:通过运行时类型识别(RTTI)(Run-Time Type Identification), 程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生 类型。

装箱、拆箱:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。 重载:是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需 要。

CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

128、Error和Exception有什么区别? 列出你见过的Exception并简要说明。 答:error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困

难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现 问题;也就是说,它表示如果程序运行正常,从不会发生的情况。 常见异常有:

NullPointerException:当操作一个空引用时会出现此错误。

NumberFormatException:数据格式转换出现问题时出现此异常。 ClassCastException:强制类型转换类型不匹配时出现此异常。

ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数 组下标时出现此异常。

129、java中会存在内存泄露吗?请简单描述。

答:内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩 溃。Java存在内存泄露。Java中的内存泄露当然是指:存在无用但是垃圾回收 器无法回收的对象。而且即使有内存泄露问题存在,也不一定会表现出来。自己 实现堆栈的数据结构时有可能会出现内存泄露。 130、Java AWT或Swing中的常用控件包括:

答:JTable,BorderLayout,GridLayout, FlowLayout,JFrame,Jlabel。 86、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。 实现同步也有两种方法:一种是同步方法,另一种是同步代码块。 同步方法是在方法返回类型前面加上synchronized关键字 同步代码块是synchronized (这里写需要同步的对象){...} 131、运行时异常与一般异常有何异同?

答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的 通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声 明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时 异常。

本文来源:https://www.bwwdw.com/article/btfr.html

Top