java试卷

Python016

java试卷,第1张

第一,谈谈final,

finally,

finalize的区别。

final

修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为

abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally

再异常处理时提供

finally

块来执行任何清除操作。如果抛出一个异常,那么相匹配的

catch

子句就会执行,然后控制就会进入

finally

块(如果有的话)。

finalize?方法名。java

技术允许使用

finalize()

方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在

object

类中定义的,因此所有的类都继承了它。子类覆盖

finalize()

方法以整理系统资源或者执行其他清理工作。finalize()

方法是在垃圾收集器删除对象之前对这个对象调用的。

第二,anonymous

inner

class

(匿名内部类)

是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承)

其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

第三,static

nested

class

inner

class的不同,说得越多越好(面试题有的很笼统)。

nested

class

(一般是c++的说法),inner

class

(一般是java的说法)。java内部类与c++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http:

//

www.frontfree.net/articles/services/view.asp?id=704&page=1

注:

静态内部类(inner

class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

第五,hashmap和hashtable的区别。

都属于map接口的类,实现了将惟一键映射到特定的值上。

hashmap

类没有分类或者排序。它允许一个

null

键和多个

null

值。

hashtable

类似于

hashmap,但是不允许

null

键和

null

值。它也比

hashmap

慢,因为它是同步的。

第六,collection

collections的区别。

collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为

true。如果表达式计算为

false,那么系统会报告一个

assertionerror。它用于调试目的:

assert(a

>

0)

//

throws

an

assertionerror

if

a

<=

0

断言可以有两种形式:

assert

expression1

assert

expression1

:

expression2

expression1

应该总是产生一个布尔值。

expression2

可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的

string

消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用

source

1.4

标记:

javac

-source

1.4

test.java

要在运行时启用断言,可使用

-enableassertions

或者

-ea

标记。

要在运行时选择禁用断言,可使用

-da

或者

-disableassertions

标记。

要系统类中启用断言,可使用

-esa

或者

-dsa

标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

第八,gc是什么?

为什么要有gc?

(基础)。

gc是垃圾收集器。java

程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

system.gc()

runtime.getruntime().gc()

第九,string

s

=

new

string("xyz")创建了几个string

object?

两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

第十,math.round(11.5)等於多少?

math.round(-11.5)等於多少?

math.round(11.5)返回(long)12,math.round(-11.5)返回(long)-11

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

三、填空题

1、Java 2 platform分成三个版本套件____51_J2SE_____、_____52____J2EE__、_______53___J2ME______。

4、Arrays类的_______54__sort____方法可以对数组进行排序。

5、______55____Interface___关键字用来定义一个接口。

6、在java中,把数据类型分为两大类为_______56____基本类型_______和__________57______对象类型___。

8、若在java程序中设置包语句,则使用关键字_______58___package______。若要导入其他包中的类则需要使用关键字_________59______import_______。

9、设x、k均为int型变量,x已经赋值。用三目条件运算符,求变量x的绝对值,并赋给变量k的赋值语句是__60___k=x>0?x:(-1)*x__________。

10、(在同一包中)子类不能继承父类中的 61____private__ 成员,除此之外,其它所有的成员都可以通过继承变为子类的成员。

11、下面是以命令行参数形式输入double型数据的程序,并对出现的数组越界异常(IndexOutOfBoundsException异常)和数据格式错误异常(NumberFormatException异常)进行捕获处理。请将程序补

充完整。

class Catch2Demo{

public static void main(String args[]){

(_______62_ throws __IndexOutOfBoundsException,__NumberFormatException____){

String s=args[0]

double d=Double.parseDouble(s)

System.out.println("d的平方为:"+d*d)

}

catch(IndexOutOfBoundsException e){

System.out.println("没有输入命令行参数")

e.printStackTrace()

}

( ______63____catch(NumberFormatException e)______){

System.out.println("没有输入正确的数据")

e.printStackTrace()return

}

}

}

五、编程题

一)按照以下要求编写程序

1、编写一个矩形类Rect,包含:

两个protected属性:矩形的宽width;矩形的高height。

两个构造器方法:

(1)一个带有两个参数的构造器方法,用于将width和height属性初化;

(2)一个不带参数的构造器,将矩形初始化为宽和高都为10。

两个方法:

(1)求矩形面积的方法area()

(2)求矩形周长的方法perimeter()

答:

public class Rect{

protected double width

protected double height

public Rect(double width,double height){

this.width=width

this.height=height

}

public Rect(){

this.width=10

this.height=10

}

public double area(){

return width*height

}

public double perimeter() {

return 2*(width+height)

}

}

2、通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用矩形的左上角坐标来标识,包含:

添加两个属性:矩形左上角坐标startX和startY。

两个构造器方法:

(1)带4个参数的构造器方法,用于对startX、startY、width和height属性初始化;

(2)不带参数的构造器方法,将矩形初始化为左上角坐标、长和宽都为0的矩形;

添加一个方法:

判断某个点是否在矩形内部的方法isInside(double x,double y)。如在矩形内,返回true, 否则,返回false。

提示:点在矩形类是指满足条件:

x>=startX&&x<=(startX+width)&&y>startY&&y<=(startY+height)

答:

public class PlainRect extends Rect{

private double startX

private double startY

public PlainRect(double startX,double startY,double width,double height){

this.width=width

this.height=height

this.startX=startX

this.startY=startY

}

public PlainRect(){

this.width=0

this.height=0

this.startX=0

this.startY=0

}

public isInside(double x,double y){

if(x>=startX&&x<=(startX+width)&&y>startY&&y<=(startY+height) ){

return true

}else{

return false

}

}

}

3、编写PlainRect类的测试程序

(1)创建一个左上角坐标为(10,10),长为20,宽为10的矩形对象;

(2)计算机并打印输出矩形的面积和周长;

(3)判断点(25.5,13)是否在矩形内,并打印输出相关信息。

public class TestPlainRect{

public static void main(String[] args){

PlainRect plainRect=new PlainRect(10,10,20,10)

System.out.println("矩形面积:"+area())

System.out.println("矩形周长:"+perimeter())

System.out.println("判断点(25.5,13)是否在矩形内:"+isInside(25.5,13))

}

}

二)按照以下要求编写程序

定义一个类A,类中有一个private的整型变量data一个private的字符串对象str。类中有两个构造函数,一个不含参数,初始化data 和str为其缺省值;另一个有两个参数,分别用来初始化data 和str

。类中还定义三个方法,方法头的定义和其功能如下:

1)public A add(int k,String s):该方法把data和str的值分别加上k和s。

2)public A clearA():该方法把data和str的值分别清除为其缺省值。

3)public String toString():该方法把data和str的值转变为字符串返回,便于显示。

编写测试类TestA,创建类A对象并使用类A中的三个方法。并写出输出结果。

答:

public class A{

private int data

private String str

public A(){

this.data=0

this.str=""

}

public A(int data,String str){

this.data=data

this.str=str

}

public A add(int k,String s){

this.data+=k

this.str+=s

}

public A clearA(){

this.data=0

this.str=""

}

public String toString(){

retrun "整型值:"+data+",字符串值:"+str

}

}

public class TestA{

public static void main(String[] args){

A a=new A(123,"Java")

// 输出结果为:整型值:123,字符串值:Java

System.out.println(a.toString())

a.add(456,"World")

// 输出结果为:整型值:579,字符串值:JavaWorld

System.out.println(a.toString())

a.clearA()

// 输出结果为:整型值:0,字符串值:

System.out.println(a.toString())

}

}

一、判断题 1.×2.√ 3.× 4.× 5.×6.×7.×8.×9. √ 10.√

二、选择题 1.A 2.B 3.B 4.B 5.C 6.C 7.D 8.C 9.D 10.D

三、程序分析

public class example{

public static void main(String args[]){

int x=1

if (x>0) x=2

switch(x){

case 1: System.out.println(1)

case 0: System.out.println(0) break

case 2: System.out.println(2)

case 3: System.out.println(3) break

default:System.out.println(4) break }

输出2,3

2.以下语句输出的结果是 。

String str=”123”

int x=4,y=5

str=str+(x+y)

System.out.println(str)

输出1239