找工作遇到的Java疑问及答案(1)

来源:互联网 发布:淘宝怎么买盗版小说 编辑:程序博客网 时间:2024/06/06 17:29

抱歉,由于刚开始不会编辑,很多图片都没有了,可以查看word版本:http://download.csdn.net/detail/duomengwuyou/8310811

1、java异常的理解?常见的异常?

      java中异常可以分为两类:error和exception。系统已经把基本的异常都写好了。【最好看书吧】

      java程序中所有抛出的异常都必须从Throwable派生而来。类Throwable有两个直接子类:Error和Exception.

      最常见的错误有程序进入死循环、内存泄露等。这种情况下,程序运行时本身无法解决。此时Java对应的类为Error类。Error类对象由Java虚拟机生成并抛弃。

      异常是程序执行时遇到的非正常情况或意外行为。常见的错误有:代码或者调用的代码中有错误,操作系统资源不可用,数组下标越界,除数为零,无效参数。Java异常对应的类为Exception类。Java编译器要求程序必须捕获或声明所有的非运行时异常。对于运行时异常可以不做处理,也就是Runtimeexception.


2、synchronised理解

http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html 

如果有个类,里面的某个方法是同步方法,那么如果是该类的两个对象,那么两个对象调用这个方法就会自己执行自己的,不会受到同步的影响。但是如果两个线程执行同一个对象的该同步方法,那么就会存在同步的问题了。

那么可以通过对类加锁,这样即使是多个对象,在对该方法操作的时候仍然是同步的。或者通过定义一个静态成员,对该对象加锁,那么也可以实现同步。

Synchronized是不可以被继承的。


3、private和public的作用范围?



4、内部类 inner class

         http://blog.csdn.net/ilibaba/article/details/3866537

         以下假设:在类A中有内部类a和b

1、  内部类可以隐藏一些内部实现细节。比如说A中可以写方法,返回a和b的实例,而a和b都实现了某些接口,那么在外面调用的时候,都可能不知道A中的a和b具体是什么,但是仍然可以获取到对象。这样便隐藏了很多实现细节。

2、  非静态内部类对象有指向其外部类对象的引用。内部类都可以访问外部类里面的私有方法和似有变量。

3、  静态内部类:通过static修饰的类。在静态内部类里面只能访问静态的变量以及静态方法。而且也只能实例化静态的类。就当成是一种静态的方法吧,里面只能使用静态的变量。

4、  局部内部类。就是在方法里面也可以声明类。

5、  匿名内部类,就是直接newinterface(){参数和方法}

6、  类不能声明为static  public static class A

所谓的静态类是指:静态类是指在一个类的内部,又定义了一个用static修饰的类。


5、java中的关键字volatile(易变的)和transient(临时)

http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html

多线程的安全性问题,之前讲过使用synchronized,也可以使用volatile。
用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新的值。这个与内存的分配相关。多线程运行的时候,每个线程运行的时候都有一个线程栈,然后所调用的变量都会从主内存中得到其副本。而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。 

Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想   
 用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。   
 transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 

声明为static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据;


6、Java的==以及equals方法?

== :若使用该运算符比较两个对象的引用(变量),则实质上是比较两个变量是否引用了相同的对象。所谓相同的对象是指,是否是在堆栈(Heap)中开辟的同一块儿内存单元中存放的对象。
若比较两个对象的引用(变量)所引用的对象的内容是否相同,则应该使用equals()方法,该方法的返回值类型是布尔值。需要注意的是:若用类库中的类创建对象,则对象的引用调用equals()方法比较的是对象的内容;若用自定义的类来创建对象,则对象的引用调用equals()方法比较的是两个引用是否引用了同一个对象,因为第二种情况equals()方法默认的是比较引用。


7、Java中Main函数的理解

http://java.chinaitlab.com/base/800752.html

http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html

static修饰的静态方法,因为函数都是通过实例化对象来调用,但是我们还没来得及实例化呢,所以就要标记成为static.

Public static void main(String[] args) 必须是这种格式的  在一个类中可以调用另外一个类中的main方法。


8、泛型擦除?

1.虚拟机中没有泛型,只有普通类和普通方法
2.所有泛型类的类型参数在编译时都会被擦除
3.创建泛型对象时请指明类型,让编译器尽早的做参数检查(Effective Java,第23条:请不要在新代码中使用原生态类型)


9、Java externalizable

http://wxg6203.iteye.com/blog/642598
当对象实现了Externalizable这个接口时,就可以灵活的控制它的序列化和反序列过程,这个接口继承了java.io.Serializable 
Externalizable 接口定义了两个方法,writerExternal方法在序列化时被调用,可以再该方法中控制序列化内容,readExternal方法在反序列时被调用,可以在该方法中控制反序列的内容 








0 0
原创粉丝点击