Java面试问题

1中异常处理机制的简单原理及应用。Java 语言(一种计算机语言,尤用于创建网站)

当一个Java程序违反了Java的语义规则时,Java虚拟机会将错误表示为异常。违反语义规则包括两种情况。一个是Java类库内置的语义检查。例如,如果数组的下标越界,就会抛出IndexOutOfBoundsException访问空对象时引发NullPointerException。另一种情况是Java允许程序员扩展这种语义检查。程序员可以创建自己的异常,并自由选择何时用throw关键字抛出异常。所有例外都是java.lang.Thowable的子类

2.Java接口与C++虚类的异同。

由于Java不支持多重继承,而且有可能一个类或对象会在几个类或对象中使用方法或属性,现有的单一继承机制无法满足要求。与继承相比,接口更加灵活,因为接口中没有实现代码。当一个类实现一个接口时,它应该实现接口中的所有方法和属性,并且接口中的属性默认都是public static,所有方法默认都是public。一个类可以实现多个接口。

3.垃圾回收的优势和原则。并考虑两种回收机制。

Java语言的一个显著特点就是引入了垃圾收集机制,解决了c++程序员最头疼的内存管理问题,让Java程序员在编写程序时不再需要考虑内存管理。因为有了垃圾收集机制,Java中的对象不再有“作用域”的概念,只有对对象的引用才有“作用域”。垃圾回收可以有效防止内存泄漏,有效利用可用内存。垃圾收集器通常作为单个低级线程运行,它在不可预知的情况下清理并回收内存堆中已经死亡或长时间未使用的对象。程序员不能实时调用垃圾收集器来从一个对象或所有对象中收集垃圾。回收机制包括分代副本垃圾回收、标记垃圾回收和增量垃圾回收。

4.线程同步的方法。

Wait():让一个线程等待并释放被持有对象的锁。

Sleep():这是一个静态方法,用于将正在运行的线程置于睡眠状态。调用此方法来捕获InterruptedException。

Notify():唤醒一个等待的线程。注意,在调用这个方法时,不能准确地唤醒一个正在等待的线程,而是由JVM决定唤醒哪个线程,而不是根据优先级。

Allnotity():唤醒所有处于等待状态的线程。注意,并不是给所有被唤醒的线程一个对象的锁,而是让它们竞争。

5.错误和异常有什么区别?

错误意味着程序不必处理的系统级错误和异常。

异常是指程序需要捕捉或处理的异常。

6.在java中,类被声明为最终类型。这是什么意思?

指示该类不能被继承,并且是顶级类。

堆和栈有什么区别?

Stack是一个线性集合,添加和删除元素的操作要在同一个段落中完成。堆栈以后进先出的方式处理。堆是堆栈的一个组成部分。

8说说final,最后,finalize的区别。

Final-Modifier(关键字)如果一个类被声明为Final,就意味着它不能再派生新的子类,也不能作为父类继承。因此,一个类不能同时声明为abstract和final。将变量或方法声明为final可以确保它们在使用中不会被更改。声明为final的变量必须在声明时被赋予一个初始值,并且在以后的引用中只能读取不能修改。声明为final的方法也只能使用,不能重载。

Finally—在异常处理期间提供一个Finally块来执行任何清理操作。如果抛出异常,将执行匹配的catch子句,然后控制将进入finally块(如果有)。

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

9匿名内部类(Anonymous Inner Class)可以扩展(继承)其他类,并且可以实现接口(interface)?

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

10静态嵌套类和内部类的区别

嵌套类(通常是C++),内部类(通常是JAVA)。Java内部类和C++嵌套类最大的区别就是有没有对外部的引用。

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

11。和& & amp不同之处。

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

12 HashMap和Hashtable的区别。

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

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

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

13集合与集合的区别。

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

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

14何时使用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标记。您还可以在包的基础上启用或禁用断言。

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

15 GC是什么?为什么会有GC?(基础)。

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

System.gc()

Runtime.getRuntime()。gc()

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

两个对象,一个是“xyz”,另一个是指向“xyz”的参考对象S。

17数学是什么?圆(11.5)?Math.round多少钱(-11.5)?

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

18短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是正确的。

19 sleep()和wait()有什么区别?制线最爱

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

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

20 Java里有goto吗?

Goto—java中的java保留字,现在java中已经不用了。

21数组有length()方法吗?String有length()方法吗?

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

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

22过载和超驰的区别。重载的方法可以改变返回值的类型吗?

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

重载的方法是改变返回值的类型。

23集合中的元素不能重复,那么用什么方法来区分是否重复呢?是= =还是e

quals()?两者有什么区别?

集合中的元素不能重复,所以用iterator()方法来区分是否重复。等于(

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

24最常见的运行时异常。

ArithmeticException、ArrayStoreException、BufferOverflowException、BufferUnderflowException、CannotUndoException、ClassCastException、CMMException、ConcurrentModificationException、DOMException、EmptyStackException、IllegalMonitorStateException、IllegalPathStateException、IllegalStateException、ImagingOpException、IndexOutOfBoundsException、MissingResourceException、NegativeArraySizeException、NoSuchElementException、NullPointerException、ProfileDataException

ityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException

错误和异常有什么区别?

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

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

26列表、集合和映射是否继承自集合接口?

列表,设置为

地图不是

抽象类和接口有什么区别?

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

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

抽象方法可以同时是静态的、原生的和同步的吗?

都不是。

接口可以继承接口吗?抽象类可以实现接口吗?抽象类可以继承具体类吗?

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

你用run()还是start()来启动一个线程?

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

31构造函数可以被重写吗?

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

我可以继承字符串类吗?

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

当一个线程进入一个对象的同步方法时,其他线程可以进入该对象的其他方法吗?

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

在33 try {}中有一个return语句,所以在finally {}中跟在这个try后面的代码不会

会不会执行,什么时候执行,回归前还是回归后?

将在返回之前执行。

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

2 & lt& lt三

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

不,它有相同的散列码。

当一个对象作为参数传递给一个方法时,该方法可以更改该对象的属性

可以返回改变后的结果,那么这个是值传递还是引用传递呢?

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

37 swtich可以作用于byte,long,String吗?

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

38哈希表和哈希表

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

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

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

最大的区别是Hashtable的方法是Synchronize,而HashMap不是。

多线程访问Hashtable时,不需要同步自己的方法,但是HashMap必须为其提供外部同步。

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