您的位置:首页 > 职场人生

Java面试常见的题目

2017-11-09 11:11 288 查看
Static

语法不同 静态成员需要在前面加static关键字

生命周期不同 非静态的依赖对象的生命周期 静态的依赖类的不依赖对象

作用域不同 非静态的作用在构造方法和普通成员方法 static静态的多了一个静态方法。

静态方法:静态方法内不能使用this 静态方法内只能访问静态成员或者方法不能访问非静态成员 类加载的时候定义

非静态方法:对象被实例化的时候被定义 非静态方法既能调用静态的方法 也可以调用其他的非静态成员或者方法

重载(overloading)和重写(override)

重载:方法名相同 参数列表不同 返回值类型不同 不可以根据返回值类型来判断是否构成重载。

重写:通常发生在子类和父类之间 通常是子类来重写父类的方法 方法名相同 参数列表相同 返回值类型相同

List 有序 不唯一的

ArrayList 扩容为当前的50% 尾部添加效率高 遍历效率高

LinkedList 底层有链表实现 插入,删除元素效率高 遍历效率低

Set 无序 唯一

HashSet 底层哈希表

TreeSet 底层二叉树

LinkedHashSet 用一个链表维护一个添加的顺序 效率没有HashSet高 但是是一个有顺序的

Map

HashMap key-value 键值对 继承AbstarctMap类 都实现了Map接口 线程非安全的 null可以作为键但只能有一个 扩容为2倍加1 使用了Enumeration的遍历方式

HashTable 继承Dictionary类 线程安全的 key和value都不允许出现null 扩容为2的整数次幂

LinkedHashMap

TreeMap

Integer int 包装类

int的初始值为0 Integer的初始值为1

Integer i=20和int i2=20 相比较为true;

垃圾回收:内存不足的时候进行 或者主动调用system.gc()去通知Jvm进行垃圾回收,不会立即执行,优先级很低

final 修饰符 修饰变量变常量 必须给初始值后面只能读取不可改变

finally 使用在try catch中 始终执行的

finalize 方法名 在确定一个对象没有被引用时对这个对象调用。

常用类:

String:不能被继承 也就是不能有子类 底层使用的final char[]数组实现的 一旦一个字符串创建之后 自身长度不可以改变。避免使用+ 速度慢 开辟新的内存空间 效率低

StringBuilder 线程非安全的 执行速度快 效率比较高 带缓冲区的字符串

StringBuffer 线程安全的 执行速度比StringBuffer慢

异常:

throw:用在方法内部 用于抛出对象后面跟一个对象 只能抛出一个异常对象

throws 用于方法声明处 后面跟异常的类型 可以抛出多个异常类型 用逗号分隔

线程和进程的区别:进程是包含线程的 一个进程包含多个线程或者说一个进程至少要有一个线程 运行的程序叫进程。

线程:实现Runable接口 重写Run方法 继承Thread类

线程的几种状态:

新生new的时候 就是新生 就绪调用start方法就是就绪 运行 当一个就绪状态的线程的cpu时间片来临的时候就是运行 阻塞sleep 死亡stop

优缺点

采用继承Thread类方式:

(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。

(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。

采用实现Runnable接口方式:

(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,

所以非常适合多个相同线程来处理同一份资源的情况,

从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试 对象 实例