栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础面试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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),如果线程重新获得对象的锁就可以进入就绪状态

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号