热门的高级Java面试题
热门的高级Java面试题
可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等都是Java核心问题。下面就由学习啦小编为大家介绍一下热门的高级Java面试题的文章,欢迎阅读。
热门的高级Java面试题篇1
学习啦在线学习网 什么是可变参数?
断言的用途?
什么时候使用断言?
什么是垃圾回收?
学习啦在线学习网 用一个例子解释垃圾回收?
什么时候运行垃圾回收?
学习啦在线学习网 垃圾回收的最佳做法?
什么是初始化数据块?
热门的高级Java面试题篇2
什么是初始化数据块?
学习啦在线学习网 什么是静态初始化器?
什么是实例初始化块?
什么是正则表达式?
什么是令牌化?
给出令牌化的例子?
学习啦在线学习网 如何使用扫描器类(Scanner Class)令牌化?
学习啦在线学习网 如何添加小时(hour)到一个日期对象(Date Objects)?
如何格式化日期对象?
Java中日历类(Calendar Class)的用途?
热门的高级Java面试题篇3
1、什么是可变参数?
学习啦在线学习网 可变参数允许调用参数数量不同的方法。请看下面例子中的求和方法。此方法可以调用1个int参数,或2个int参数,或多个int参数。
学习啦在线学习网 //int(type) followed ... (three dot's) is syntax of a variable argument. public int sum(int... numbers) { //inside the method a variable argument is similar to an array. //number can be treated as if it is declared as int[] numbers; int sum = 0; for (int number: numbers) { sum += number; } return sum; } public static void main(String[] args) { VariableArgumentExamples example = new VariableArgumentExamples(); //3 Arguments System.out.println(example.sum(1, 4, 5));//10 //4 Arguments System.out.println(example.sum(1, 4, 5, 20));//30 //0 Arguments System.out.println(example.sum());//0 }
2、断言的用途?
学习啦在线学习网 断言是在Java 1.4中引入的。它能让你验证假设。如果断言失败(即返回false),就会抛出AssertionError(如果启用断言)。基本断言如下所示。
private int computerSimpleInterest(int principal,float interest,int years){ assert(principal>0); return 100; }
3、什么时候使用断言?
断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好的选择。在public方法中,只用断言来检查它们根本不应该发生的情况。
学习啦在线学习网 4、什么是垃圾回收?
垃圾回收是Java中自动内存管理的另一种叫法。垃圾回收的目的是为程序保持尽可能多的可用堆(heap)。 JVM会删除堆上不再需要从堆引用的对象。
5、用一个例子解释垃圾回收?
比方说,下面这个方法就会从函数调用。
void method(){ Calendar calendar = new GregorianCalendar(2000,10,30); System.out.println(calendar); }
学习啦在线学习网 通过函数第一行代码中参考变量calendar,在堆上创建了GregorianCalendar类的一个对象。
函数结束执行后,引用变量calendar不再有效。因此,在方法中没有创建引用到对象。
学习啦在线学习网 JVM认识到这一点,会从堆中删除对象。这就是所谓的垃圾回收。
学习啦在线学习网 6、什么时候运行垃圾回收?
学习啦在线学习网 垃圾回收在JVM突发奇想和心血来潮时运行(没有那么糟糕)。运行垃圾收集的可能情况是:
堆可用内存不足
CPU空闲
学习啦在线学习网 7、垃圾回收的最佳做法?
学习啦在线学习网 用编程的方式,我们可以要求(记住这只是一个请求——不是一个命令)JVM通过调用System.gc()方法来运行垃圾回收。
当内存已满,且堆上没有对象可用于垃圾回收时,JVM可能会抛出OutOfMemoryException。
对象在被垃圾回收从堆上删除之前,会运行finalize()方法。我们建议不要用finalize()方法写任何代码。
8、什么是初始化数据块?
学习啦在线学习网 初始化数据块——当创建对象或加载类时运行的代码。
有两种类型的初始化数据块:
静态初始化器:加载类时运行的的代码
实例初始化器:创建新对象时运行的代码
9、什么是静态初始化器?
学习啦在线学习网 请看下面的例子:static{ 和 }之间的代码被称为静态初始化器。它只有在第一次加载类时运行。只有静态变量才可以在静态初始化器中进行访问。虽然创建了三个实例,但静态初始化器只运行一次。
学习啦在线学习网 public class InitializerExamples { static int count; int i; static{ //This is a static initializers. Run only when Class is first loaded. //Only static variables can be accessed System.out.println("Static Initializer"); //i = 6;//COMPILER ERROR System.out.println("Count when Static Initializer is run is " + count); } public static void main(String[] args) { InitializerExamples example = new InitializerExamples(); InitializerExamples example2 = new InitializerExamples(); InitializerExamples example3 = new InitializerExamples(); } }
示例输出
Static Initializer Count when Static Initializer is run is 0.
10、什么是实例初始化块?
让我们来看一个例子:每次创建类的实例时,实例初始化器中的代码都会运行。
学习啦在线学习网 public class InitializerExamples { static int count; int i; { //This is an instance initializers. Run every time an object is created. //static and instance variables can be accessed System.out.println("Instance Initializer"); i = 6; count = count + 1; System.out.println("Count when Instance Initializer is run is " + count); } public static void main(String[] args) { InitializerExamples example = new InitializerExamples(); InitializerExamples example1 = new InitializerExamples(); InitializerExamples example2 = new InitializerExamples(); } }
11、示例输出
Instance Initializer Count when Instance Initializer is run is 1 Instance Initializer Count when Instance Initializer is run is 2 Instance Initializer Count when Instance Initializer is run is 3