当前位置: 首页 > news >正文

Java # Java基础八股

1、JVM、JRE、JDK之间的关系

个人理解:JVM可以帮助屏蔽底层的操作系统,使程序一次编译到处都可以运行,JVM可以运行class文件。JRE是java文件运行的环境,但不能新建程序,JRE包含JVM。JDK功能最齐全,包含了编译器和各种工具,JDK包含JRE。

2、public、protected、default、private的区别

  • default:默认,什么都不写,在同一个包内可见,不使用任何的修饰符

  • public:可以修饰类,在一个java源文件中只能有一个public,并且一旦类被public修饰,那么java的源文件名要和这个类名一致。

  • protected:受保护的,受到该类所在包所保护,被protected保护的成员会被位于同一package中的所有类访问到。同时,被protected所修饰的成员也能被该类的所有子类继承下来。

  • private:私有的,只能在当前类中被访问,作用域最小。

修饰符当前类同一包内子孙类(同一包)子孙类 (不同包)其他包
publicYYYYY
protectedYYYY/NN
defaultYYYNN
privateYNNNN

3、final、finally、finalize的区别

final:是一个修饰符,可以修饰变量、方法、类

  • 修饰变量时,变量的值不能再改变。eg: final static int i = 100;

  • 修饰方法时,方法不能重写,但不影响继承。eg: public final void test();

  • 修饰类时,这个类不能被继承。(不能用final和abtract来修饰同一个类,同样final不能修饰接口) eg:final class Parent

finally:是一个关键字,通常在try-catch块中用于处理异常,无论try中是否发生异常,finally块一定会被执行。(通常进行资源释放的工作)

try{}catch{}finally{}

finalize:指finalize()方法,时Object类的方法,是在对象被垃圾回收器回收之前调用的,可以通过重写这个finalize()方法,给对象自己最后一个复活的机会,但不能保证finalize()方法立即执行,什么时候调用具体有虚拟机决定。一个对象的finalize()方法只会被调用一次,通常情况下不需要程序猿实现fianalize()方法

4、static关键字的作用

只有new对象之后,数据存储空间才会被分配,⽅法才能供外界调⽤。 ​ 但是当没有创建对象的时候也想要调⽤⽅法或者就是想为特定分配存储空间的时候,就需要⽤ static。所以有了static,成员变量或者⽅法就可以在没有所属类的时候被访问了。

5、面向对象、面向过程

个人理解:面向过程将任务拆分成一个一个步骤分别完成

⾯向过程的性能⽐较⾼,因为没有实例化等操作,开销⽐较⼩。

⾯向对象因为有了封装继承多态的特性,可以设计出低耦合的系统,使得系统更灵活、容易维护。

1). 封装是指封装成抽象的类,并且对于可信的类或者对象,是可以操作的,对于不可信的进⾏隐藏。 2). 继承是指可以使⽤现有类的所有功能,⽽且还可以在现有功能的基础上做拓展。 3). 多态是基于继承的,他是指⽗类中定义的属性和⽅法被⼦类继承之后,可以具有不同的数据类型或者表现出不同的⾏为,使得同⼀个属性在⽗类及其⼦类中具有不同的含义。

  • 重载就是多态的⼀个例⼦,是编译时的多态。其实我们所说的多态是运⾏时多态,也就是说编 译的时候不确定调⽤哪个具体⽅法,⼀直延迟到运⾏时才可以确定,所以多态⼜叫延迟⽅法。

Java实现多态有3个必要条件:继承、重写和向上转型。只有满足这3个人条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

  • 继承:在多态中必须存在有继承关系的子类和父类

  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

重载和重写

重载是编译时多态,重写是运行时多态

  • 重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表

  • 重写发生在子类与父类之间,重写方法返回值和形参都不能改变,与方法返回值和访问修饰符无关,即重载方法

http://www.lryc.cn/news/156842.html

相关文章:

  • 【Spring Boot】SpringBoot 2.6.6 集成 SpringDoc 1.6.9 生成swagger接口文档
  • 【算法】快速排序 详解
  • 架构师spring boot 面试题
  • 电商系统架构设计系列(十一):在电商的交易类系统中,如何正确地使用 Redis 这样的缓存系统呢?需要考虑哪些问题?
  • MySQL数据库和表的操作
  • DAY-01--分布式微服务基础概念
  • 记:一次关于paddlenlp、python、版本之间的兼容性问题
  • MyBatis配置及单表操作
  • python基础教程:深浅copy的详细用法
  • 【算法篇】动态规划(二)
  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询
  • pytorch-构建卷积神经网络
  • 点云从入门到精通技术详解100篇-点云滤波算法及单木信息提取(续)
  • Gartner发布中国科技报告:数据编织和大模型技术崭露头角
  • java八股文面试[数据库]——explain
  • Kafka3.0.0版本——增加副本因子
  • 升级iOS 17出现白苹果、不断重启等系统问题怎么办?
  • 6. `Java` 并发基础之`ReentrantReadLock`
  • float浮动布局大战position定位布局
  • 算法 数据结构 递归插入排序 java插入排序 递归求解插入排序算法 如何用递归写插入排序 插入排序动图 插入排序优化 数据结构(十)
  • OpenCV(二十二):均值滤波、方框滤波和高斯滤波
  • 二叉树的递归遍历和非递归遍历
  • JDK17:未来已来,你准备好了吗?
  • K8s和Docker
  • 使用物理机服务器应该注意的事项
  • py脚本解决ArcGIS Server服务内存过大的问题
  • Go语言Web开发入门指南
  • 保姆级教程——VSCode如何在Mac上配置C++的运行环境
  • Java 操作FTP服务器进行下载文件
  • 物理机服务器应该注意的事