Java考试真题

先说说final的区别,最后是finalize。

决赛?Modifier (keyword)如果一个类被声明为final,就意味着它不能再派生新的子类,也不能作为父类继承。因此,一个类不能同时声明为abstract和final。将变量或方法声明为final可以确保它们在使用中不会被更改。声明为final的变量必须在声明时被赋予一个初始值,并且在以后的引用中只能读取不能修改。声明为final的方法只能使用,final不能重载。提供finally块以在异常处理期间执行任何清除操作。如果抛出异常,将执行匹配的catch子句,然后控制将进入finally块(如果有)。

敲定?方法名称。Java技术允许使用finalize()方法在垃圾收集器从内存中清除对象之前进行必要的清理。当确定对象未被引用时,垃圾回收器调用此方法。它是在Object类中定义的,所以所有的类都继承它。子类覆盖finalize()方法来组织系统资源或执行其他清理任务。在垃圾收集器删除该对象之前,会对其调用finalize()方法。

第二,匿名内部类可以扩展其他类并实现接口吗?

匿名内部类是没有名字的内部类。您不能扩展其他类,但是一个内部类可以被另一个内部类实现为接口。

三、静态嵌套类和内部类的区别,说的越多越好(有些面试问题很笼统)。

嵌套类(通常是C++),内部类(通常是JAVA)。Java内部类和C++嵌套类最大的区别就是有没有对外部的引用。请参阅/文章/服务/视图。ASP详情?id = 704 & amppage=1

注意:静态内部类是指1创建一个没有外部类对象的静态内部类的对象,2不能从静态内部类的对象访问外部类对象。

第四,&;和& & amp不同之处。

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

第五,HashMap和Hashtable的区别。

都属于Map接口的类,实现了唯一键到特定值的映射。

HashMap类没有被分类或排序。它允许一个空键和多个空值。

Hashtable类似于HashMap,但是不允许空键和空值。它也比HashMap慢,因为它是同步的。

第六,收藏与收藏的区别。

Collections是java.util下的一个类,包含了各种关于集合操作的静态方法。

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

第七,什么时候使用assert。

断言是包含布尔表达式的语句,在执行时假设为真。如果表达式的计算结果为false,则报告AssertionError。它用于调试目的:

断言(a & gt0);//如果& lt= 0

断言有两种形式:

断言表达式1;

assert expression 1:expression 2;

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

Expression2可以是任何产生值的表达式。该值用于生成显示更多调试信息的字符串消息。

默认情况下,断言是禁用的。要在编译时启用断言,您需要使用source 1.4标记:

javac-source 1.4 Test.java

要在运行时启用断言,可以使用-enableassertions或-ea标记。

要选择在运行时禁用断言,可以使用-da或-disable assessments标记。

要在系统类中启用断言,可以使用-esa或-dsa标记。您还可以在包的基础上启用或禁用断言。

断言可以放在正常情况下不会到达的任何地方。断言可以用来验证传递给私有方法的参数。但是,断言不应该用于验证传递给公共方法的参数,因为无论断言是否启用,公共方法都必须检查它们的参数。但是,您可以在公共和非公共方法中使用断言来测试后置条件。此外,断言不应该以任何方式改变程序的状态。

第八,什么是GC?为什么会有GC?(基础)。

GC是一个垃圾收集器。Java程序员不必担心内存管理,因为垃圾收集器会自动管理它。若要请求垃圾回收,可以调用下列方法之一:

System.gc()

Runtime.getRuntime()。gc()

第九,字符串s =新字符串(" XYZ ");创建了多少个stringobjects?

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

第十,Math.round(11.5)多少钱?Math.round多少钱(-11.5)?

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

第十一,短s 1 = 1;s 1 = s 1+1;怎么了?短s 1 = 1;s 1+= 1;怎么了?

短s 1 = 1;s 1 = s 1+1;不对。s1是short类型,s1+1是int类型,不能显式转换为short类型。可以修改为s1 =(短)(s1+1)。短s 1 = 1;S1 += 1是正确的。

第十二,sleep()和wait()有什么区别?制线最爱

sleep()方法是一种在一段时间内停止线程的方法。休眠间隔到期后,线程不一定会立即恢复执行。这是因为在那个时刻,其他线程可能正在运行并且没有被调度来放弃执行,除非(a)“唤醒”线程具有更高的优先级,以及(b)正在运行的线程由于其他原因被阻塞。

Wait()是一个线程交互。如果一个线程调用了一个同步对象X,那么这个线程就会挂起执行,被调用的对象就会进入等待状态,直到被唤醒或者等待时间到了。

第十三,Java有goto吗?

Goto?java里的保留字现在java里不用了。

第十四,数组有length()方法吗?String有length()方法吗?

数组没有length()的方法,但具有length的属性。

字符串的方法长度为()。

第五,超载和越权的区别。重载的方法可以改变返回值的类型吗?

方法的覆盖和重载是Java多态性的不同表现。重写是父类和子类之间多态性的表现,重载是一个类中多态性的表现。如果在子类中定义的方法与其父类具有相同的名称和参数,我们说该方法是重写的。当子类中的对象使用这个方法时,它将调用子类中的定义。对于它来说,父类中的定义似乎是“屏蔽”的。如果在一个类中定义了多个同名的方法,它们要么有不同的参数号,要么有不同的参数类型,这就是所谓的方法重载。重载的方法是改变返回值的类型。

第十六,集合中的元素不能重复,那么用什么方法来区分是否重复呢?是= =还是等于()?两者有什么区别?

集合中的元素不能重复,所以用iterator()方法来区分是否重复。Equals()是判断两个集合是否相等。

equals()和= =方法确定引用值是否指向同一个对象。equals()在类中被覆盖,以便在两个独立对象的内容和类型匹配时返回一个true值。

第十七,给我一个你最常听到的运行时异常。

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

第十八,错误和异常有什么区别?

错误表示当恢复不是不可能而是困难时,恢复是一个严重的问题。例如,内存溢出。期望程序处理这样的情况是不可能的。

异常表示设计或实现问题。换句话说,就是程序正常运行的话,永远不会发生。

第十九,list,set,map是否从集合接口继承?

列表,设置为

地图不是。

第二十,抽象类和接口有什么区别?

声明方法存在而不实现它的类称为抽象类。当你想创建一个体现一些基本行为的类,并为这个类声明一个方法,但不能在这个类中实现这个类的时候,就要用到它。您不能创建抽象类的实例。但是,您可以创建一个类型为抽象类的变量,并将其指向一个具体子类的实例。不能有抽象构造函数或抽象静态方法。抽象类的子类为其父类中的所有抽象方法提供实现,否则它们也是抽象类。相反,在子类中实现这个方法。其他知道其行为的类可以在类中实现这些方法。

接口是抽象类的变体。在接口中,所有的方法都是抽象的。通过实现这样的接口可以获得多重继承。接口中的所有方法都是抽象的,它们都没有程序体。接口只能定义静态最终成员变量。接口的实现类似于子类的实现,只是实现类不能从接口定义继承行为。当一个类实现一个特殊的接口时,它定义(也就是给程序体)所有这样的接口的方法。然后,它可以在实现接口的类的任何对象上调用接口的方法。由于抽象类,它允许使用接口名称作为引用变量的类型。通常的动态绑定将生效。引用可以与接口类型相互转换,instanceof运算符可用于确定对象的类是否实现接口。

第二十一,抽象方法可以同时是静态的、原生的和同步的吗?

都不是。

第二十二,接口可以继承接口吗?抽象类可以实现接口吗?抽象类可以继承具体类吗?

接口可以从接口继承。抽象类可以实现接口,不管抽象类是否可以继承实体类,但前提是实体类有显式的构造函数。

第二十三,你是用run()还是start()来启动一个线程?

启动一个线程就是调用start()方法,使线程所代表的虚拟处理器处于可运行状态,也就是说可以被JVM调度执行。这并不意味着线程会立即运行。run()方法可以通过生成一个必须退出的标志来停止线程。

第二十四,构造函数可以被重写吗

构造函数不能被继承,因此它不能重写重载,但可以重载。

第二十五,可以继承字符串类吗?

String类是final类,因此不能被继承。

第二十六,当一个线程进入一个对象的同步方法时,其他线程可以进入这个对象的其他方法吗?

不,一个对象的同步方法只能被一个线程访问。

第二十七,try {}中有一个return语句,那么这个try之后的finally {}中的代码是否会立即执行,什么时候执行,return之前还是之后?

将在返回之前执行。

第二十八,编程问题:用最高效的方法计算2乘8等于多少?

有C背景的程序员特别喜欢问这种问题。

2 & lt& lt三

第二十九,两个对象有相同的值(x.equals(y) == true),但是可以有不同的哈希码。这是正确的吗?

不,它有相同的散列码。

第三十,当一个对象作为参数传递给一个方法时,这个方法可以改变对象的属性,返回改变后的结果。那么,这个是值传递还是引用传递呢?

是价值转移。Java编程语言只通过值传递参数。当对象实例作为参数传递给方法时,参数的值是对该对象的引用。对象的内容可以在被调用的方法中改变,但是对象的引用永远不会改变。

第三十一,swtich可以作用于byte,long,String吗?

在switch(expr1)中,expr1是一个整数表达式。所以传递给switch和case语句的参数应该是int,short,char或者byte。绳子既不能长,也不能短。

第三十二,编程问题:写一个单体。

Singleton模式的主要功能是确保Java应用程序中只存在一个类的实例。

一般的单例模式通常有几种形式:

第一种形式:定义一个类,它的构造函数是私有的,它有这个类的静态私有变量。当类被实例化时,通过公共getInstance方法获取对它的引用,然后调用它的方法。

公共类Singleton {

私有Singleton(){}

//在自己内部定义一个自己的实例是不是很奇怪?

//注意,这是私有的,仅用于内部调用。

私有静态Singleton实例= new Singleton();

//这里有一个外部访问这个类的静态方法,可以直接访问。

公共静态Singleton getInstance() {

返回实例;

}

}

第二种形式:

公共类Singleton {

私有静态单例实例= null

公共静态同步单例getInstance() {

//这个方法比上面的好。没有每次都生成对象只是第一次。

//使用过程中生成实例,提高效率!

if (instance==null)

instance = new Singleton();

返回实例;}

}

其他形式:

定义一个类,它的构造函数是私有的,所有方法都是静态的。

一般认为第一种形式更安全。

第三十三条散列表和散列表

Hashtable继承自Dictionary类,HashMap是Java1.2引入的Map接口的实现。

HashMap允许null作为条目的键或值,而Hashtable不允许。

此外,HashMap移除了Hashtable的contains方法,将其改为containsvalue和containsKey。因为contains方法具有误导性。

最大的区别是Hashtable的方法是同步的,而HashMap不是。多线程访问Hashtable时,不需要同步自己的方法,但是HashMap必须为它们提供外部同步。

Hashtable和HashMap使用大致相同的hash/rehash算法,所以性能不会有很大差别。