c# 网站开发实例教程,企业开展网站建设,wordpress背景图片,网站编辑内容简答题#xff1a; 1、try{}里有一个return语句#xff0c;那么紧跟在这个try后的finally{}里的代码会不会被执行#xff0c;什么时候被执行#xff0c;在return前还是后? 答#xff1a;会执行#xff0c;在方法返回调用者前执行。注意#xff1a;在finally中改变返回值…简答题 1、try{}里有一个return语句那么紧跟在这个try后的finally{}里的代码会不会被执行什么时候被执行在return前还是后? 答会执行在方法返回调用者前执行。注意在finally中改变返回值的做法是不好的因为如果存在finally代码块try中的return语句不会立马返回调用者而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值然后如果在finally中修改了返回值就会返回修改后的值。 显然在finally中返回或者修改返回值会对程序造成很大的困扰 C#中直接用编译错误的方式来阻止程序员干这种龌龊的事情 Java中也可以通过提升编译器的语法检查级别来产生警告或错误 Eclipse中可以在如图所示的地方进行设置强烈建议将此项设置为编译错误。 2、Java语言如何进行异常处理关键字throws、throw、try、catch、finally分别如何使用? 答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。 3、什么时候用断言(assert)? 答断言在软件开发中是一种常用的调试方式很多开发语言中都支持这种机制。 一般来说断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试时开启。 为了保证程序的执行效率在软件发布后断言检查通常是关闭的。 断言是一个包含布尔表达式的语句在执行这个语句时假定该表达式为true;如果表达式的值为false那么系统会报告一个AssertionError。 断言的使用如下面的代码所示1.assert(a 0); // throws an AssertionError if a 0 断言可以有两种形式assert Expression1;assert Expression1 : Expression2 ; Expression1 应该总是产生一个布尔值。 Expression2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信息的字符串消息。 要在运行时启用断言可以在启动JVM时使用-enableassertions或者-ea标记。要在运行时选择禁用断言可以在启动JVM时使用-da或者-disableassertions标记。 要在系统类中启用或禁用断言可使用-esa或-dsa标记。 还可以在包的基础上启用或者禁用断言。 注意断言不应该以任何方式改变程序的状态。简单的说如果希望在不满足某些条件时阻止代码的执行就可以考虑用断言来阻止它。 4、Error和Exception有什么区别? 答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。 如果写了不能迅速收敛的递归则很有可能引发栈溢出的错误如下所示class StackOverflowErrorTest { public static void main(String[] args) { main(null); }} 提示用递归编写程序时一定要牢记两点1. 递归公式;2. 收敛条件(什么时候就不再继续递归)。 5、打印昨天的当前时刻。 import java.util.Calendar;class YesterdayCurrent {public static void main(String[] args){Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());}
} 在Java 8中可以用下面的代码实现相同的功能。 import java.time.LocalDateTime;class YesterdayCurrent {public static void main(String[] args) {LocalDateTime today LocalDateTime.now();LocalDateTime yesterday today.minusDays(1);System.out.println(yesterday);}
} 6、比较一下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表达式以及函数式接口的支持。 7、Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行它们有什么区别? 答sleep()方法(休眠)是线程类(Thread)的静态方法调用此方法会让当前线程暂停执行指定的时间将执行机会(CPU)让给其他线程但是对象的锁依然保持因此休眠时间结束后会自动恢复。 wait()是Object类的方法调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行)进入对象的等待池(wait pool)只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool)如果线程重新获得对象的锁就可以进入就绪状态。 补充可能不少人对什么是进程什么是线程还比较模糊对于为什么需要多线程编程也不是特别理解。 简单的说进程是具有-一定独立功能的程序关于某个数据集合上的一次运行活动是操作系统进行资源分配和调度的一个独立单位;线程是进程的一个实体是CPU调度和分派的基本单位是比进程更小的能独立运行的基本单位。 线程的划分尺度小于进程这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元而线程之间可以共享内存。 使用多线程的编程通常能够带来更好的性能和用户体验但是多线程的程序对于其他程序是不友好的因为它可能占用了更多的CPU资源。 当然也不是线程越多程序的性能就越好因为线程之间的调度和切换也会浪费CPU时间。 时下很时髦的Node.js就采用了单线程异步I/O的工作模式。 8、线程的sleep()方法和yield()方法有什么区别? 答① sleep()方法给其他线程运行机会时不考虑线程的优先级因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会; ② 线程执行sleep()方法后转入阻塞(blocked)状态而执行yield()方法后转入就绪(ready)状态; ③ sleep()方法声明抛出InterruptedException而yield()方法没有声明任何异常; ④ sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性。 转载于:https://www.cnblogs.com/Mus-Li/p/6734956.html