Java基础知识点总结--每日面试题分享

该知识点为学习总结,存在不足,仅供参考。

1.为什么要设计封装类,Integer和int有什么区别?

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问,其主要作用

增强安全性提高重用性简化编程

二者主要区别

1:Integer的初始值是null,int的初始值是0

2:Integer存储在堆内存,int直接存储在栈空间

3.integer是对象类型封装了方法和属性使用更灵活

2.Java引用数据类型:

类,接口,数组;

3.final、finally、finalize 有什么区别?

在Java中,final、finally和finalize都是关键字,但它们的含义和用法都不同。

  • final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
  • finally是异常处理语句结构的一部分,表示总是执行。
  • finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集器做最后的清理工作。
4.POJO、PO、DTO、DAO、BO、VO的概念

**POJO:**Plain Ordinary Java Object,即简单普通的java对象。一般用在数据层映射到数据库表的类,类的属性与表字段一一对应。

**PO:**Persistant Object,即持久化对象。可以理解为数据库中的一条数据即一个BO对象,也可以理解为POJO经过持久化后的对象。

**DTO:**Data Transfer Object,即数据传输对象。一般用于向数据层外围提供仅需的数据,如查询一个表有50个字段,界面或服务只需要用 到其中的某些字段,DTO就包装出去的对象。可用于隐藏数据层字段定义,也可以提高系统性能,减少不必要字段的传输损耗。

**DAO:**Data Access Object,即数据访问对象。就是一般所说的DAO层,用于连接数据库与外层之间的桥梁,并且持久化数据层对象。

**BO:**Business Object,即业务对象。一般用在业务层,当业务比较复杂,用到比较多的业务对象时,可用BO类组合封装所有的对象一并传递。

**VO:**Value Object,有的也称为View Object,即值对象或页面对象。一般用于web层向view层封装并提供需要展现的数据。

5.Java自动装箱与拆箱

以integer类型为例:

装箱:就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的 valueOf(int) 方法

拆箱:就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法:Integer的 intValue方法

6.重载和重写的区别

重载(overload) 是指在同一个类中,可以定义多个方法名相同但参数类型、个数或顺序不同的方法。

重写(override)是指子类重新定义父类中已有的方法,以达到不同的功能。

重载和重写的区别主要有以下几点:

  1. 重载是一个类中多态性的手段,而重写是父子类多态性的手段。
  2. 重载对方法的返回值没有要求,而重写要求方法的返回值必须和父类方法一致。
  3. 重载只能访问静态和非私有成员变量,而重写可以访问任意成员变量和方法。
  4. 重载不支持传递参数,而重写支持传递参数。
7.new String(“hello”)之后,创建了几个对象?

1.若hello字符串常量不存在未被创建,则创建两个对象,分别为hello字符串常量以及new String实例对象

2.若hello常量已存在,则只会创建new String实例对象。

8. equals与==的区别?

== :是一个运算符,既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值(不一定类型相同),对于引用类型比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是 否是指相同一个对象。

equals:用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所 以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object 中的equals方法返回的却是==的判断。

若使用到比较是否相等时,建议使用equals 。

9.String、StringBuffer 和 StringBuilder 的区别是什 么?

**String:**它的值被final修饰,是不可变类,因此String的线程是安全的,在三者的性能方面是最低的,String存储在字符串常量池中。每次对 String 进行操作都会生成一个新的 String 对象,这会导致性能低下并且浪费大量内存空间。

**StringBuffer:**是可变类,因为它的操作方法都增加了synchronized关键字所以它是线程安全的,其性能比String高比StringBuilder低,它存储在堆内存中。

**StringBuilder:**是可变类,它不是线程安全的,它是无阻塞的性能最高,它存储在堆内存中。

10.JDK,JRE和JVM是什么?三者有什么关系?

**JDK:**是Java开发工具包,包含了Java运行环境(JRE)、Java工具(如javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

**JRE:**是Java运行时环境,包含了Java虚拟机(JVM)和Java基础的类库(即Java API 包括rt.jar)。

**JVM:**是Java虚拟机,是一个抽象的计算机模型,可以执行字节码文件。

**关系:**JDK包含了开发和运行Java程序所需的所有工具和类库,而JRE只包含了运行Java程序所需的虚拟机和类库。因此,在使用Java开发软件时,通常需要先安装JDK,然后再安装JRE。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海湾bug

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值