41、日期和时间:
(1)如何取得年月日、小时分钟秒/p>
创建 java.util.Calendar 实例,调用其 get()方法传入不同的参数即可获 得参数所对应的值。Java 8 中可以使用 java.time.LocalDateTimel 来获取,代码 如下所示。
(2)如何取得从 1970 年 1 月 1 日 0 时 0 分 0 秒到现在的毫秒数/p>
(3)如何取得某月的最后一天/p>
(4) 如何格式化日期/p>
利用 java.text.DataFormat 的子类(如 SimpleDateFormat 类)中的 format(Date)方法可将日期格式化。Java 8 中可以用 java.time.format.DateTimeFormatter 来格式化时间日期,代码如下所示。
Java 的时间日期 API 一直以来都是被诟病的东西,为了解决这一问题,Java 8 中引入了新的时间日期 API,其中包括 LocalDate、LocalTime、LocalDateTime、 Clock、Instant 等类,这些的类的设计都使用了不变模式,因此是线程安全的设 计。
42、打印昨天的当前时刻。
43、比较一下 Java 和 JavaSciprt。
JavaScript 与 Java 是两个公司开发的不同的两个产品。Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联 应用程序 开发;而 JavaScript 是 Netscape 公司的产品,为了扩展 Netscape 浏览器的功 能而开发的一种可以嵌入 Web 页面中运行的基于对象和事件驱动的解释性语言。 JavaScript 的前身是 LiveScript;而 Java 的前身是 Oak 语言。 下面对两种语言间的异同作如下比较:
? 基于对象和面向对象:Java 是一种真正的面向对象的语言,即使是开发 简单的程序,必须设计对象;JavaScript 是种脚本语言,它可以用来制作与 络 无关的,与用户交互作用的复杂软件。它是一种基于对象(Object-Based)和 事件驱动(Event-Driven)的编程语言,因而它本身提供了非常丰富的内部对 象供设计人员使用。
? 解释和编译:Java 的源代码在执行之前,必须经过编译。JavaScript 是 一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。(目前的浏 览器几乎都使用了 JIT(即时编译)技术来提升 JavaScript 的运行效率)
? 强类型变量和类型弱变量:Java 采用强类型变量检查,即所有变量在编 译之前必须作声明;JavaScript 中变量是弱类型的,甚至在使用变量前可以不作 声明,JavaScript 的解释器在运行时检查推断其数据类型。
? 代码格式不一样。
补充:上面列出的四点是 上流传的所谓的标准答案。其实 Java 和 JavaScript 最重要的区别是一个是静态语言,一个是动态语言。目前的编程语言的发展趋势 是函数式语言和动态语言。在 Java 中类(class)是一等公民,而 JavaScript 中 函数(function)是一等公民,因此 JavaScript 支持函数式编程,可以使用 Lambda 函数和闭包(closure),当然 Java 8 也开始支持函数式编程,提供了对 Lambda 表达式以及函数式接口的支持。对于这类问题,在面试的时候最好还是用自己的 语言回答会更加靠谱,不要背 上所谓的标准答案。
44、什么时候用断言(assert)/strong>
断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一 般来说,断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试 时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言 是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true;如果表 达式的值为 false,那么系统会 告一个 AssertionError。断言的使用如下面的代 码所示:
断言可以有两种形式: assert Expression1;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信 息的字符串消息。 要在运行时启用断言,可以在启动 JVM 时使用-enableassertions 或者-ea 标记。
要在运行时选择禁用断言,可以在启动 JVM 时使用-da 或者-disableassertions 标记。要在系统类中启用或禁用断言,可使用-esa 或-dsa 标记。还可以在包的基 础上启用或者禁用断言。
注意:断言不应该以任何方式改变程序的状态。简单的说,如果希望在不满足某 些条件时阻止代码的执行,就可以考虑用断言来阻止它。
例子:
结果:
作用:
它主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序所预期的数据,程序就提出警告或退出。
使用:
run –> run configurations –> arguments –> VM arguments : -ea 开启断言 -da关闭断言
开启后,下次运行就可以之间run了。
45、Error 和 Exception 有什么区别/strong>
Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情 况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题; 也就是说,它表示如果程序运行正常,从不会发生的情况。
2005 年摩托罗拉的面试中曾经问过这么一个问题“If a process reports a stack overflow run-time error, what’s the most possible cause,给了 四个选项 a. lack of memory; b. write on an invalid memory space; c. recursive function calling; d. array index out of boundary. Java 程序在运行时也可能会遭遇 StackOverflowError,这是一个无法恢复的错误,只能重新修改 代码了,这个面试题的答案是 c。如果写了不能迅速收敛的递归,则很有可能引发 栈溢出的错误,如下所示:
提示:用递归编写程序时一定要牢记两点:1. 递归公式;2. 收敛条件(什么时候 就不再继续递归)。
46、try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally{}里的代码会不会被执行,什么时候被执行,在 return 前还是后/strong>
会执行,在方法返回调用者前执行。
在 finally 中改变返回值的做法是不好的,因为如果存在 finally 代码块,try 中的 return 语句不会立马返回调用者,而是记录下返回值待 finally 代码块执行完 毕之后再向调用者返回其值,然后如果在 finally 中修改了返回值,就会返回修改 后的值。显然,在 finally 中返回或者修改返回值会对程序造成很大的困扰。
47、Java 语言如何进行异常处理,关键字:throws、throw、 try、catch、finally 分别如何使用/strong>
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了 良好的接口。在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类 的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。Java 的异常处理 是通过 5 个关键词来实现的:try、catch、throw、throws 和 finally。一般情况 下是用 try 来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过 它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理;try 用 来指定一块预防所有异常的程序;catch 子句紧跟在 try 块后面,用来指定你想要 捕获的异常的类型;throw 语句用来明确地抛出一个异常;throws 用来声明一个 方法可能抛出的各种异常(当然声明异常时允许无病呻吟);finally 为确保一段 代码不管发生什么异常状况都要被执行;try 语句可以嵌套,每当遇到一个 try 语 句,异常的结构就会被放入异常栈中,直到所有的 try 语句都完成。如果下一级的 try 语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这 种异常的 try 语句或者最终将异常抛给 JVM。
48、运行时异常与受检异常有何异同/strong>
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常 操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就 不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可 能因使用的问题而引发。Java 编译器要求方法必须声明抛出可能发生的受检异常, 但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对 象程序设计中经常被滥用的东西,在 Effective Java 中对异常的使用给出了以下指 导原则:
? 不要将异常处理用于正常的控制流(设计良好的 API 不应该强迫它的调 用者为了正常的控制流而使用异常)
? 对可以恢复的情况使用受检异常,对编程错误使用运行时异常
? 避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发 生)
? 优先使用标准的异常
? 每个方法抛出的异常都要有文档
? 保持异常的原子性
? 不要在 catch 中忽略掉捕获到的异常
49、列出一些你常见的运行时异常/strong>
? ArithmeticException(算术异常) ? ClassCastException (类转换异常) ? IllegalArgumentException (非法参数异常) ? IndexOutOfBoundsException (下标越界异常) ? NullPointerException (空指针异常) ? SecurityException (安全异常)
50、阐述 final、finally、finalize 的区别。
? final:修饰符(关键字)有三种用法:如果一个类被声明为 final,意味 着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。将 变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须 在声明时给定初值,而在以后的引用中只能读取不可修改。被声明为 final 的方 法也同样只能使用,不能在子类中被重写。
? finally:通常放在 try…catch…的后面构造总是执行代码块,这就意味着 程序无论正常执行还是发生异常,这里的代码只要 JVM 不关闭都能执行,可以 将释放外部资源的代码写在 finally 块中。
? finalize:Object 类中定义的方法,Java 中允许使用 finalize()方法在垃 圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收 集器在销毁对象时调用的,通过重写 finalize()方法可以整理系统资源或者执行 其他清理工作。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91437 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!