Java 编程基础面试题(一)

🌕Java 编程基础面试题(一)

1.什么是面向对象?

面向对象包括封装、继承、和多态。

  1. 封装:

    封装是指:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。

  2. 继承:

    继承就是:子类继承父类的方法和属性,并作出自己的改变和扩展,可以单继承也可以多重继承

    继承的特性:

    • 子类拥有父类非 private 的属性、方法。
    • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    • 子类可以用自己的方式实现父类的方法。
    • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
    • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
  3. 多态:

    **多态就是:**子类继承父类的方法和属性之后,子类的属性和方法可以具有不同于父类的数据类型和表现行为。

    多态存在的三个必要条件:

    • 继承
    • 重写
    • 父类引用指向子类对象: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集合分类?
listList代表有序、可重复的集合ArryList、LinkList
setSet代表无序、不可重复的集合HashSet、TreeSet、linkehashset
mapMap代表具有映射关系的集合HashMap
Queue队列
6.2 Java 集合与数组的区别?
  • 数组的长度初始时就固定了,而 Java 集合的长度可以随要保存的数据长度动态增加。

  • 数组元素既可以是基本类型的值,也可以是对象。而 Java 集合只能存储对象,基本数据类型的 变量要转换成对应的包装类才能放入集合类中。

6.3 Java集合类之间的继承关系?

Java的集合类主要由两个接口派生而出:Collection和Map

image-20220616211349838

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 方法转化成相同数据类型,在进行比较。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奥男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值