该知识点为学习总结,存在不足,仅供参考。
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)是指子类重新定义父类中已有的方法,以达到不同的功能。
重载和重写的区别主要有以下几点:
- 重载是一个类中多态性的手段,而重写是父子类多态性的手段。
- 重载对方法的返回值没有要求,而重写要求方法的返回值必须和父类方法一致。
- 重载只能访问静态和非私有成员变量,而重写可以访问任意成员变量和方法。
- 重载不支持传递参数,而重写支持传递参数。
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。