java基础面试题

1.java基本数据类型及大小

基本数据类型大小(字节)
boolean1(位)
byte1
char2
short2
int4
float4
double8
long8

2.java面向对象的基本特征

特征作用
继承

1.减少冗余 2.清晰层次关系

封装

1.隐藏实现细节 2.安全性 3.复用性 4.模块化

多态

1.易扩展

3.四种访问修饰符及作用范围

修饰符作用范围
private本类
缺省包类
protected子类,包类
public全部

4.拆箱和封箱

拆箱封装类型转为基本数据类型
封箱基本数据类型转为封装类型

5.String,StringBuffer,StringBuilder 区别

类型特征初始容量
String

不可变字符串,每次使用都会产生新的对象

StringBuffer

可变字符串,线程安全,效率低

16字节
StringBuilder

可变字符串,线程不安全,效率高

16字节

6.== 和 equals 区别

类型作用
==比较的是两个值是否相等
equals

比较的是对象存放在堆中的地址是否一样

7.equals 和 hashcode区别

类型说明

equals

equals()相等的两个对象hashcode一定相等

hashcode

两个不同的对象可能产生相同的hashcode值

是否可以直接根据hashcode值判断两个对象是否相等?答: 不可以的,因为不同的对象可能会生成相同的hashcode值。虽然不能根据hashcode值判断两个对象是否相等,但是可以直接根据hashcode 值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。

8.重载和重写区别

类型区别规则
重载

子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变

1.被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);

2.被重载的方法可以改变返回类型;

3.被重载的方法可以改变访问修饰符;

4.被重载的方法可以声明新的或更广的检查异常;

5.无法以返回值类型作为重载函数的区分标准

重写

是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

1.参数类型,返回类型与被重写的方法一致

2.访问修饰符不能比被重写的方法低

3.Final,static 修饰的方法不能被重写

4.被重写的方法抛出的异常不能不能大于重写方法的异常

5.构造方法不能被重写

 

方法的重写和重是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。

9.抽象类和接口的区别

类型说明

抽象类

1.可以有默认方法

2.使用extends继承抽象类

3.可以有构造方法

4.可以使用其他修饰符

5.一个类可以继承一个抽象类

接口

1.全部是抽象方法

2.使用interface实现接口

3.不能有构造方法

4.都是public修饰符

5.一个类可以实现多个接口

10.java关键字及其意义

关键字意义

static

1.可以修饰类,方法,和变量.

2.static修饰的属性和方法只属于该类,不属于任何对象。

3.static不能修饰外部类,不能修饰局部变量

final

1.可以修饰类,方法和变量

2.Final修饰的变量不能被修改

3.Final修饰的类不能被继承如String

transient

只能修饰字段,表示该关键字修饰的字段不参与序列化

volatile

只能用来修饰变量。volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存

Synchronized

1.确保线程互斥的访问同步代码

2.保证共享变量的修改能够及时可见

3.有效解决重排序问题。

11.error 和 exception 区别

名称说明
error预先不可知,不能捕获
exception预先可知,能捕获异常,并进行处理(try catch finally)

12.throws 和 throw区别

名称说明
throws在方法外部抛出异常,抛出可能出现的异常
throw在方法内部抛出异常,抛出的异常是确定异常

13.finalize,finally,final三个关键字的区别

名称说明
finalize

finalize()方法是Object类中定义的方法,当垃圾回收器将无用对象从内存中清除时,该对象的finalize()方法被调用

finally

用在异常处理中定义总是执行代码,无论try块中的代码是否引发异常,catch是否匹配成功,finally块中的代码总是被执行

final

以作为修饰符修饰变量、方法和类,被final修饰的变量只能一次赋值;被final修饰的方法不能够在子类中被重写;被final修饰的类不能够被继承。

14.ArryaList,LinkedList,Vector区别

名称说明
ArrayList

1.底层基于数组,初始大小为10

2.查询快,增加删除慢.原因(ArrayList基于数组,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标,所以查询数据快)

3.占用内存比LinkedList少

4.线程不安全

LinkedList

1.底层基于链表

2.增加删除快,查询慢。原因(LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项前后项即可,插入数据较快)

3.占用内存比ArrayList大,因为存储了前一个值和后一个值的引用

4.线程不安全

Vector

与ArrayList类似,但是Vector是线程安全的

共同点:都实现了List接口

15.HashMap 和 HashTable区别

名称区别

HashMap

线程不安全,允许空的键值

HashTable

线程安全,不允许空键值

16.HashMap 和 TreeMap区别

名称区别
HashMap线程不安全,允许空的键值
TreeMap

线程安全,不允许空键值

17.IO流类型

类型具体类型说明
字节流InputStream OutputStream

1.字节流操作的基本单元为字节

2.字节流默认不使用缓冲区

3.字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元

 

字符流

Reader

Write

1.字符流操作的基本单元为Unicode码元

2.字符流使用缓冲区

3.字符流通常处理文本数据,它支持写入及读取Unicode码元

 

18.sleep(),wait() ,yield(),join(),notify(),notifyAll()方法区别

类型说明
sleep

sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。

wait

wait()方法会释放对象的“锁标志”。当调用某一对象的wait()方法后,会使当前线程暂停执行,并将当前线程放入对象等待池中,直到调用了notify()方法后,将从对象等待池中移出任意一个线程并放入锁标志等待池中,只有锁标志等待池中的线程可以获取锁标志,它们随时准备争夺锁的拥有权

yield

yield()方法和sleep()方法类似,也不会释放“锁标志”,区别在于,它没有参数,即yield()方法只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会,这也和sleep()方法不同

join

join()方法会使当前线程等待调用join()方法的线程结束后才能继续执行

notifynotify方法只唤醒一个等待线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现
notifyAll会唤醒所有等待(对象的)线程

19.Thread的生命周期状态

状态说明

新建状态

当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();

就绪状态

当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

运行状态

当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。

阻塞状态

处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态

死亡状态

线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

20.异常分类

异常类型具体异常

运行时异常

NullPointException NumberFormatException

检查异常

IOException FileNotFoundException

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值