IBM实习生笔试题目(4)

来源:互联网 发布:武清网络推广 编辑:程序博客网 时间:2024/05/17 22:22

填空题原题:

1.Java是编译型语言还是解释型语言?                    

2.在java中,跳出某一次循环的关键字是            ;跳出整个循环的关键字是           。

3.volatile关键字的含义是                                                      ;

   transient关键字的含义是                                                     。

4.Java中表示字符流的基类是                     ;表示字节流的基类是                   ;

字符流与字节流的区别是                                                           。

5.Java中获得当前时间的代码语句是                                                       ;

   Java中用于垃圾收集的代码语句是                                                       。

解答:

1、Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。(百度百科)。Java先将高级语言通过JVM编译成为字节码(.class文件),这过程是编译的过程,然后将字节码交由jvm(java虚拟机)解释执行,所以常常有人说“java是一种半编译、半解释执行”的语言。
2、continue 和 break
3、http://developer.51cto.com/art/201105/264855.htm
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

注意:声明为volatile的简单变量如果当前值由该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:
n = n + 1;
n++;
如果要想使这种情况变成原子操作,需要使用synchronized关键字,如上的代码可以改成如下的形式:

public static synchronized void inc()
{
n++;
}

将n=n+1改成了inc(),其中inc方法使用了synchronized关键字进行方法同步。因此,在使用volatile关键字时要慎重,并不是只要简单类型变量使用volatile修饰,对这个变量的所有操作都是原来操作,当变量的值由自身的上一个决定时,如n=n+1、n++等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m + 1,这个就是原级别的。所以在使用volatile关键时一定要谨慎,如果自己没有把握,可以使用synchronized来代替volatile。

transient:
先了解一下序列化:
Java的序列化(串行化)是指将一个对象的状态转为一个Byte流,以便可以持久化到数据库或者文件中,在需要的时候可以通过读取byte流重新构造对象。在实际用途中,常常利用对象的串行化来保存当前应用程序的工作状态,下次再启动的时候将自动地恢复到上次执行的状态
 
更多:http://blog.csdn.net/yakihappy/article/details/3979373
(Java作业的一道题目:若父类不实现serializable接口而子序列实现了,会出现什么情况?)
 
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。

       然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现Externalizable接口,这个接口是Serilizable的子接口,但是你必须实现readExternal和writeExternal方法,你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

注:声明为statictransient类型的成员数据不能被串行化。因为static代表类的状态,transient代表对象的临时数据;(串行化的对象是对象而不是类)
 
4、InputStream/OutputStream  Reader/Writer
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
OutputStream out = new FileOutputStream(file)//此为多态,非实例化
更多区别:http://wjheye.iteye.com/blog/1041309
 
 
5、new Date()可以获得系统当前的时间。
格式:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sysout(df.format(new Date());
(2)System.gc();
 
Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身
Bonus:
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。 finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
原创粉丝点击