Java面试题基本知识点总结(1)

1. 面向对象:系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式。特性:封装、多态、继承。

2. 异常的匹配问题,如果有多个异常,catch只能是越来越大,意思就是说:catch的从上到下的顺序应该是:孙子异常->孩子异常->父亲异常->老祖先异常.这么个顺序

3. 接口中的int k=0虽然没有访问修饰符,但在接口中默认是staticfinal

4. which four types of objects can be thrown use "throws"? 
  A.Error 
  B.Event 
  C.Object 
  D.Excption 
  E.Throwable 
  F.RuntimeException 

5. errorException的区别

a) java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。

b) java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

c) ErrorRuntimeException 及其子类都是未检查的异常(unchecked exceptions),而所有其他的Exception类都是检查了的异常(checked exceptions.

6. checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用trycatch(或者throws)否则编译不通过。

7. unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。

8. Thread类中start()run()方法的区别:start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。

9. 关系型数据库有OracleDB2Microsoft SQL ServerMicrosoft AccessMySQL等。非关系型数据库有MongoDBmemcachedbRedis

10. GC线程是守护线程。

11. volatile关键字不能保证线程安全,也不能保证操作的原子性。多线程中修饰共享数据,保证共享。

12. JavaIO操作中有面向字节(Byte)和面向字符(Character)两种方式。

a) 面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStreamOutputStream的子类。

b) 面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是ReaderWriter的子类。16为单位

c) 由此可得不论英文还是中文,只要是char那么就占2字节。Byte占一个字节。

13. java创建对象的几种方法:new、反射、clone、反序列化。

14. 对象的初始化顺序

a) 类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;

b) static语句执行完之后,再执行main方法;

c) 如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

15. Java中代码执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。

16. JAVA程序中执行顺序为:

a)  父类静态块

b) 自身静态块

c) 父类块

d) 父类构造器

e) 自身块

f) 自身构造器 

17. 程序的赋值步骤为

a) 父类的静态变量赋值

b) 自身的静态变量赋值

c) 父类成员变量赋值

d) 父类块赋值

e) 父类构造器赋值

f) 自身成员变量赋值

g) 自身块赋值

h) 自身构造器赋值

18. 在接口中,所有的成员方法默认都是 public abstract 类型的。定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

19. 不被序列化的问题

a) 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

b) transient关键字只能修饰变量,而不能修饰方法和类。

c) transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

20. 子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。

21. StringStringbufferStringbuild的区别。

a) String不可变对象,每次都新建一个。(其实是调用了Stringbuffer然后在调用toString方法)

b) Stringbuffer,可变对象,速度快,线程安全,内部多使 synchronized修饰。

c) Stringbuild,可变对象,速度更快,因为是线程不安全的。

22. 多线程有几种实现方法,都是什么?哪一种方式比较优秀?同步有几种实现方法,都是什么?

a) 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 

b) 实现Runnable接口比较好,因为实现类可以实现多个接口,而只能继承一个类。

c) 同步的实现方面有两种,分别是synchronized,waitnotify

23. ==equals的区别

a) ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。

b) ==比较的是引用而equals方法比较的是内容。(如果没有重写的话,使用的是==比较的,String默认已经重写)

24. final: 常量声明。 finally: 处理异常。 finalize: 帮助进行垃圾回收。

a) final类无法继承,也就是没有子类。这么做是出于基础类型的安全考虑,比如StringInteger。这样也使得编译器进行一些优化,更容易保证线程的安全性。final方法无法重写。final变量的值不能改变。

b) finalize()方法在一个对象被销毁和回收前会被调用。只有finalize被重写过,或者是第一次调用,对象才可以自求。

c) finally,通常用于异常处理,不管有没有异常被抛出都会执行到。

25. Java里没有全局变量:全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。

26. 多态在Java里有三种表现方式:方法重载通过继承实现方法重写通过Java接口进行方法重写。

27. Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。


有需要的同学可以下载PDF文档查看,点击下载

备注
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51396628
作者:WSYW126

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值