Java 面试题 ------ JavaSE基础

1、short s1 = 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1; 有错吗?

short s1 = 1; s1= s1 + 1;

1 是 int 类型;s1 +1; 得到的结果是int类型经过强转short赋值给s1。

s1+=1 相当于s1 =  (short)(s1 + 1),隐含了强转int类型。可以正确编译。

2、重载和重写的区别?

重写:

1. 重写发生子类和父类之间。用extends关键字

2. 父类方法的方法名、参数个数和返回值和子类方法的方法名、参数个数和返回值必须相同。

3. 子类方法的访问修饰符的权限比父类的访问修饰符的权限大。

重载:

1. 一个类的多态表现

2. 一个类的同名方法的参数类型、参数个数、参数顺序不同。

3. 返回值类型可以不同。

3、Static 关键字有什么作用?

static关键字修饰类是静态内部类

static关键字修饰方法是静态方法,该方法只属于当前类,静态方法不能被重写,只能使用类名调用。不能使用this或super关键字。

static关键字修饰变量是静态变量。可以被实例共享,静态变量在内存中只有一份拷贝,在JVM加载类时只分配一次内存。

static修饰代码块是静态代码块,通常做程序优化,在整个类加载时候只加载一次。

4、final、finally、finalize 的区别

1. final修饰类,这个类被被继承。

final修饰方法,这个方法被子类重写

final修饰变量,这个变量不可以修改,这个变量是引用类型那么引用不可变,引用指向的内容可变。

final修饰常量,这个常量在编译阶段进入常量池。

finally通常在try...catch...后面执行,程序无论正常执行还是发生异常,finally里面的代码只要JVM不关闭,可以将释放外部的代码写在finally块中。

finalize是Object类定义的方法,使用finalize()方法在垃圾收集器将对象从内存中清除出去之前必须要做清理工作。

5、抽象类和接口的区别?

共同点:

都不能实例化。

都可以包含抽象方法。

都可以有默认实现的方法。

不同点:

接口主要用于对类的行为进行约束,实现了某个接口具有对应的行为;抽象类主要用于代码复用,强调所属关系。

一个类只能继承一个抽象类,可以实现多个接口。

接口的成员变量只能是public、static、final,不能修改必须有初始值;抽象类可在子类中重新定义或赋值。

6、Hashcode 的作用

hashcode用来获取哈希码。hashset首先调用对象的hashcode方法获取哈希码,通过哈希码确定对象在集合中的位置。

7、深拷贝和浅拷贝的区别是什么?

浅拷贝:拷贝对象和原对象共同引用同一个内部对象。

深拷贝:完全复制整个对象,包括这个对象所包含的内部对象。

8、String 和 StringBuilder、StringBuffer 的区别?

string类中包含处理字符串的方法。string保存的字符串的成员变量是final类型。String类是不可变的,一旦创建string对象对象的字符序列不可变,直到销毁。

StringBuffer代表字符序列可变的字符串,一个stringbuffer创建后通过一系列方法修改字符串。同时stringbuffer是线程安全的,stringbuild是非线程安全,但stringbuild的性能较高。要创建一个内容可变的字符串优先考虑stringbuild类。

9、 == 和 equals 的区别?

==:

用于基本数据类型,判断两个数的数值是否相等。

用于引用数据类型,判断两个对象的内存地址是否相等。

equals()

没有重写方法,判断方法内两个对象的内存地址是否相同。

发生子类重写父类方法,判断方法内的两个对象的内容是否相等。

10、hashcode和equals的比较?

hashcode是hashset首先调用对象的hashcode()获取哈希码通过哈希码判断对象在集合中的位置。equals是比较两个对象是否相等。

11、 什么是 Java 的序列化,如何实现 Java 的序列化?

序列化机制是将对象转换成字节序列,这些字节序列可以保存在磁盘上,也可以在网络上传输,允许程序将这些字节序列恢复成Java对象。Java的序列化是将一个Java对象转换成IO流,Java的反序列化从IO流中恢复Java对象。若实现序列化,需要使用对象流,在序列化时调用对象输出流的writeObject方法,输出对象序列。

12、Java 的泛型是如何工作的 ? 什么是泛型擦除 ?

泛型是将程序告诉编译器集合中需要哪些对象类型。泛型通过接口、类、方法实现。泛型擦除是当接受错误的类型自动进行擦除,并作出类型转换。

13、Java 中的反射是什么意思?有哪些应用场景

程序在运行时接收从外部传入一个对象Object,程序需要调用该对象运行时的方法发现对象和类的真实信息。

程序运行时创建任意一个类的实例并访问该实例成员。

程序运行时生成一个类的动态代理类或动态代理对象。

反射机制的应用场景:使用JDBC通过反射机制加载驱动数据库的驱动。创建目标对象的代理类。

14、Java 中的动态代理是什么?有哪些应用?

从 JVM 角度来说,动态代理是在运行时动态生成类字节码,并加载到 JVM 中的。动态代理分为JDK动态代理和cglib动态代理。

JDK 动态代理只能代理实现了接口的类或者直接代理接口,而 CGLIB 可以代理未实现任何接口的类。

15、 字节流和字符流有什么区别?

字节流:

InputStream用于从源头(通常是文件)读取数据(字节信息)到内存中,java.io.InputStream抽象类是所有字节输入流的父类。

OutputStream用于将数据(字节信息)写入到目的地(通常是文件),java.io.OutputStream抽象类是所有字节输出流的父类。

字符流:

Reader用于从源头(通常是文件)读取数据(字符信息)到内存中,java.io.Reader抽象类是所有字符输入流的父类。

Writer用于将数据(字符信息)写入到目的地(通常是文件),java.io.Writer抽象类是所有字节输出流的父类。

16、BIO、NIO、AIO 有什么区别?

IO的模型:同步阻塞 I/O同步非阻塞 I/OI/O 多路复用信号驱动 I/O 和异步 I/O

BIO 属于同步阻塞 IO 模型,同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。

 NIO 属于同步非阻塞 IO 模型,同步非阻塞 IO 模型中,应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。

AIO模型是异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

17、面向对象的四大特征

封装:首先,通过私有的数据域来获取类所拥有对象的特征、属性;其次,通过公有的域访问器方法来获取类所拥有对象的行为。

继承:一个类可以对另外一个类的特征、行为、属性进行复用。被复用的那个类称为父类或超类。

多态:这是一种置换规则,表明了超类对象的任何地方可以用子类对象来置换;一个子类对象可以赋值给超类变量。但是不可以说一个超类的引用赋给子类变量。

抽象:自下而上的继承层次结构上移,让上层的类或接口更具有通用性,这是抽象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Husp0707

你的小小点赞、关注是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值