文章目录
🌕Java 编程基础面试题(一)
1.什么是面向对象?
面向对象包括封装、继承、和多态。
-
封装:
封装是指:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
-
继承:
继承就是:子类继承父类的方法和属性,并作出自己的改变和扩展,可以单继承也可以多重继承。
继承的特性:
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
-
多态:
**多态就是:**子类继承父类的方法和属性之后,子类的属性和方法可以具有不同于父类的数据类型和表现行为。
多态存在的三个必要条件:
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
2.Java 数据类型有哪些?
基本数据类型有四类八种:
-
整数型:byte(1字节),short(2),int(4),long(8) 数据范围:-27—27-1(以此类推)
-
浮点型:float(4),double(8)
-
字符型:char(2)
-
布尔型:boolean(1\4)
*补充:int 类型数据范围为:-231----231-1
引用类型有三种:(引用数据类型,就是对一个对象的引用,本质上就是通过指针指向堆中的内存地址)
- 数组
- 类
- 接口
3.为什么重写 equals 还要重写 hashcode?
equals 和 hashcode 是配套使用的。
equals 和 hashcode 都是 Java object类的一个方法,原生equals 用来比较两个对象的内存地址是否相等。hashcode 方法,通过对象内存地址计算出一个散列值。
由此可以得出:
equals 相等,则hashcode一定相等。
equals 不等,hashcode 可能相等。
如此–重写 equals 不重写 hashcode的话,就可能出现 equals 相等而hashcode不等。同时在这种情况下如果我们用 map 存储两个内容相同的两个对象时,那么此时map计算出来的hash值不等但是hashcode却不等
因为必须保证重写后的equals
方法认定相同的两个对象拥有相同的哈希值。
4.== 和 equals 比较的区别
-
对象不同:equals():是超类Object中的方法,==:是二元操作符。
-
比较的对象不同:equals() 方法通过重写可以比较两个对象的内容是否相等。
== 比较分为两种情况: 第一:基本数据类型比较:比较的是他们的值是否相等
第二:引用数据类型:比较的是引用的地址值是否相同
5.final 关键字的作用
使用final 关键字声明类、方法、属性
(1)使用final修饰的类不能有子类。
(2)使用final修饰的方法不能被子类重写。
(3)使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改。
6.介绍 Java 的集合类
6.1 Java集合分类?
list | List代表有序、可重复的集合 | ArryList、LinkList |
---|---|---|
set | Set代表无序、不可重复的集合 | HashSet、TreeSet、linkehashset |
map | Map代表具有映射关系的集合 | HashMap |
Queue | 队列 |
6.2 Java 集合与数组的区别?
-
数组的长度初始时就固定了,而 Java 集合的长度可以随要保存的数据长度动态增加。
-
数组元素既可以是基本类型的值,也可以是对象。而 Java 集合只能存储对象,基本数据类型的 变量要转换成对应的包装类才能放入集合类中。
6.3 Java集合类之间的继承关系?
Java的集合类主要由两个接口派生而出:Collection和Map
6.4.Map:
Map的特点是:由Key-value 映射组合构成的,key不可重复,每个key唯一标识一个数据。
7.ArrayList 和 LinkedList 的区别
-
数据结构不同:ArrayList 是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构.
-
不同操作效率不同:查找和修改操作 ArrayList 快。增加和删除 LinkedList 快。
-
开销不同:ArrayList 创建需要开辟一段存储空间,LinkedList 不需要。
8.说一说你对 Java 访问权限的了解
Java 提供了三种访问修饰符,分别是 private、protect、public。
分为四种访问权限,分别为:private、default、protect、public。
在修饰成员变量/成员方法时分为四种情况:
- private:只准许类内部成员访问。
- default:准许类内部成员、同一包下的其他类访问。
- protect:准许类内部成员、同一包下的其他类、子类访问。
- public:准许任意包下任意类访问。
在修饰类时,分为两种情况:
- default: 准许同一包下其他类访问。
- public:准许任意包下任意类访问。
9.请介绍成员变量和局部变量的区别
成员变量:
-
成员变量是在类的范围内定义的变量。
-
成员变量有默认初始值。
-
未被 static 修饰的称为实例变量,存储于堆内存中,生命周期与对象相同。
-
被 static 修饰的称为类变量,存储与方法区中,生命周期与当前类相同。
局部变量:
- 局部变量是在方法的范围内定义的变量。
- 局部变量没有默认初始值。
- 局部变量存储在栈内存中,方法调用结束,变量空间自动释放。
10.说说为什么要有包装类?
Java 语言是面向对象的语言,即“一切皆对象”。但是8中基本数据类型却出现了例外,为了解决这个问题,Java 为这8中基本数据类型都定义了一个引用类型,这就是包装类。
而且 JDK1.5提供了自动装箱和自动拆箱功能:
自动装箱:可以将基本数据类型直接赋给对应的包装类型;
自动拆箱:可以将包装类型直接赋给对应的基本数据类型;
比如:某个方法的参数是包装类型,而我们要直接传入一个基本数据类型,那么通过自动装箱就可以直接传入啦。
11.如何进行 int 和 Double 两个数判断相等?
- 不能用 == 或者 compareTo 方法比较,因为他们是不同的数据类型。
- 不能转为字符串比较,因为 int 不带小数点,double 带小数点。
- ***整数和浮点数的包装类都继承于 Number 类型,而Number 类型提供了分别转向 byte、short、int、long、folat、Double 的方法,故 int 和 double 两个类型进行比较,应该调用 Number 方法转化成相同数据类型,在进行比较。