本文主要是介绍Java基础面试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 谈谈对面向对象理解
1.1 封装
- 将数据和操作数据的方法封装起来,一个类对外只暴露功能接口,而不对外提供实现的细节
- 尽可能使得类中的成员变量和成员方法的可访问权限达到最小
1.2 继承
- 子类继承父类,实现对父类功能的拓展及增强
- 方法重写修改方法:可能引发线程不安全问题,所以string设计成final
- 组合优先于继承:父类修改,子类也要修改
1.3 多态
- 指允许不同子类型的对象对同一消息作出不同的响应
- 多态基于继承
- 一般多态用的比较多的是接口,这样可以通过接口定义规则,客户端负责具体的实现
2. 修饰符
- default: 当前包下
- protected: 当前包下及子类
3. 基本类型数据
- 基本类型:byte,char,short,int,long,double,float,boolean
4. 谈谈自动装箱和自动拆箱
- 装箱就是自动将基本数据转换为包装类型,拆箱就是自动将包装器类型转换为基本数据类型
- 在使用集合类的时候,只能使用引用类型,以及使用一些引用类型的操作,java5引入新特性
- 避免无意识的类型转换: 比如for循环中对包装类型的自增操作,会影响性能
5. 解释JVM存储
- 一个java进程启动后,就会开辟一个jvm虚拟机
- 栈内存: 基本类型数据,引用类型的引用
- 堆内存:new出来的对象
6. equals和==的区别
- 基本类型: 只能使用==,比较字面量
- 引用类型: ==比较地址值, 调用equals的对象如果不重写,就是调用 ==操作
7. String可以被继承吗?
- 不能,是被final修饰的,所有的属性都是final修饰的,也就是不可变类
- 线程安全: 多个线程可以同时访问,但不允许修改字符串
- 常量池:不可变才能实现常量池。如果可变,那么两个指向同一个常量池的数据,其中一个发生改变,其他的都会变化
8. String和StringBuilder、StringBuffer的区别?
- 都是用来操作字符串的
- String: 不可变类,在拼接时候每次都是创建新的对象,+ 实际也是用的StringBuilder,复杂操作时候,会创建多个StringBuilder对象,从而效率低
- StringBuffer:不会创建新对象,直接拼接,线程安全
- StringBuilder:线程不安全,但是效率高
9. 重载和重写的区别
- 重载:一个类中,同一个方法名,不同参数个数或类型,和返回值无关(JVM无法判定是否用了返回值)
- 重写:子父类,方法的扩展
10. 抽象类和接口
# 1. 来源
将相同类的属性抽取,形成抽象类,进一步抽取,形成接口,提供规范
子类通过继承或者实现的方式,实现具体的细节
多态的前提
# 2. 概念
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用(对象的某些方法必须子类完善,
所以不能直接new)
抽象类指包含一个抽象方法的,接口中都是抽象方法
抽象类遵守类的单一继承,接口可以进行多实现
# 3. 接口的不良使用
不应该定义常量: 接口应该只暴露使用规范,即导出api,而不是对外暴露
1.1 单纯在一个类中使用的,就定义为一个类的私有变量
1.2 如果一些固定值,就使用枚举(内部枚举或者公共枚举)
1.3 公共的常量,不可实例化的class的常量
11. 静态方法能否调用非静态方法
- 静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存
- 非静态方法是属于对象的,对象是在类加载之后创建的
12. String s = new String(“xyz”)
- 创建了两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象。
13. 聊聊异常
- Error: 不可恢复的异常, Exception: 用于用户处理的异常
- RuntimeException, Checked Exception
- 尽可能少的去自定义异常,假如原来的异常能够说明问题
14. sleep和wait的区别
答: sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态,请参考第66题中的线程状态转换图)。wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行),进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒等待池中的线程进入等锁池(lock pool),如果线程重新获得对象的锁就可以进入就绪状态
这篇关于Java基础面试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!