前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面试题1:Java基础篇

Java面试题1:Java基础篇

作者头像
程序员洲洲
发布2024-06-06 21:48:31
3090
发布2024-06-06 21:48:31
举报
文章被收录于专栏:项目文章
  • 1、什么是面向对象?面向对象和面向过程的区别?
  • 答: 面向对象是一种万物皆对象的编程思想,任何物体都可以归为一类事物,而一个个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动的。 区别: ①编程思路不同:面向过程以实现功能的函数开发为主,面向对象是首先抽象出类、属性及其方法,然后通过实例化、执行方法来完成功能。 ②封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。 ③面向对象有继承性和多态性,而面向过程没有。 —————————————————————————————————
  • 2、面向对象的三大特性?解释?
  • 答: ①封装:把数据和操作数据的方法封装起来,对数据的访问和操作只能通过定义好的接口。 ②继承:从已有类得到继承信息创建新类的过程。提供继承信息的类称为父类、超类、基类等,得到继承信息的类被叫做子类、派生类。 ③多态:多态分为编译时多态(方法重载)和运行时多态(方法重写)。 这里需要注意以下几点: (1)重写和重载的区别:

(2)⼦类拥有⽗类对象所有的属性和⽅法(包括私有属性和私有⽅法),但是⽗类中的私有属性和⽅法⼦类是⽆法 访问,只是拥有。因为在⼀个⼦类被创建的时候,⾸先会在内存中创建⼀个⽗类对象,然后在⽗类对象外部放上⼦ 类独有的属性,两者合起来形成⼀个⼦类的对象; ⼦类可以拥有⾃⼰属性和⽅法; ⼦类可以⽤⾃⼰的 ⽅式实现⽗类的⽅法。(重写) ——————————————————————————————————

  • 3、JDK,JRE,JVM三者之间的关系为:
  • 答: JDK(Java Development Kit):是 Java 开发⼯具包,是整个 Java 的核⼼,包括了 Java 运⾏环境 JRE、Java ⼯具 和 Java 基础类库。 JRE( Java Runtime Environment):是 Java 的运⾏环境,包含 JVM 标准实现及 Java 核⼼类库。 JVM(Java Virtual Machine):是 Java 虚拟机,是整个 Java 实现跨平台的最核⼼的部分,能够运⾏以 Java 语⾔写作的软件程序。所有的 Java 程序会⾸先被编译为 .class 的类⽂件,这种类⽂件可以在虚拟机上执⾏ ——————————————————————————————————
  • 4、Java 中是否可以重写⼀个 private 或者 static ⽅法?
  • 答: Java 中 static ⽅法不能被覆盖,因为⽅法覆盖是基于运⾏时动态绑定的,⽽ static ⽅法是编译时静态绑定的。 static ⽅法跟类的任何实例都不相关,所以概念上不适⽤。 Java 中也不可以覆盖 private 的⽅法,因为 private 修饰的变量和⽅法只能在当前类中使⽤, 如果是其他的类继承当前类是不能访问到 private 变量或⽅法的,当然也不能覆盖。 静态⽅法补充:静态的⽅法可以被继承,但是不能重写。如果⽗类和⼦类中存在同样名称和参数的静态⽅ 法,那么该⼦类的⽅法会把原来继承过来的⽗类的⽅法隐藏,⽽不是重写。通俗的讲就是⽗类的⽅法和⼦类的⽅法是两个没有关系的⽅法,具体调⽤哪⼀个⽅法是看是哪个对象的引⽤;这种⽗⼦类⽅法也不在存在多态的性质。 ————————————————————————————————————
  • 5、构造器是否可以被重写?
  • 答: ⽗类的私有属性和构造⽅法并不能被继承,所以 Constructor 也就不能被Override(重写),但是可以 Overload(重载),所以你可以看到⼀个类中有多个构造函数的情况。 ——————————————————————————————————————
  • 6、构造方法有哪些特性?
  • 答: (1)名字与类名相同; (2)没有返回值,但不能⽤ void 声明构造函数; (3)成类的对象时⾃动执⾏,⽆需调⽤。 ——————————————————————————————————————
  • 7、在 Java 中定义⼀个不做事且没有参数的构造⽅法有什么作⽤?
  • 答: Java 程序在执⾏⼦类的构造⽅法之前,如果没有⽤ super() 来调⽤⽗类特定的构造⽅法,则会调⽤⽗类中“没有参 数的构造⽅法”。 因此,如果⽗类中只定义了有参数的构造⽅法,⽽在⼦类的构造⽅法中⼜没有⽤ super() 来调⽤⽗类中特定的构造 ⽅法,则编译时将发⽣错误,因为 Java 程序在⽗类中找不到没有参数的构造⽅法可供执⾏。解决办法是:在⽗类 ⾥加上⼀个不做事且没有参数的构造⽅法。 ———————————————————————————————————————
  • 8、Java中创建对象的几种方式?
  • 答: 1、使⽤ new 关键字; 2、使⽤ Class 类的 newInstance ⽅法,该⽅法调⽤⽆参的构造器创建对象(反射): Class.forName.newInstance(); 3、使⽤ clone() ⽅法; 4、反序列化,⽐如调⽤ ObjectInputStream 类的 readObject() ⽅法。 ————————————————————————————————————————
  • 9、抽象类和接口有什么区别?
  • 答: (1)抽象类中可以定义构造函数,接口不能定义构造函数。 (2)抽象类中可以有抽象方法和具体方法,但是接口中只能有抽象方法。 (3)抽象类中的成员权限可以是public、默认、protected(注意抽象类中抽象方法就是为了可以重写,所以不能被private修饰),而接口中的成员只可以是public,方法默认:public abstract、成员变量默认为:public static final) (4)抽象类中可以包含静态方法,而接口中不可以。 JDK8中有所改变: JDK1.8中,允许在接口中包含带有具体实现的方法,使用default修饰,这类方法就是默认方法。 抽象类中可以包含静态⽅法,在 JDK1.8 之前接⼝中不能包含静态⽅法,JDK1.8 以后可以包含。之前不能包含 是因为,接⼝不可以实现⽅法,只可以定义⽅法,所以不能使⽤静态⽅法(因为静态⽅法必须实现)。现在可以包 含了,只能直接⽤接⼝调⽤静态⽅法。JDK1.8 仍然不可以包含静态代码块。 ——————————————————————————————————————————
  • 10、静态变量和实例变量的区别?
  • 答: 静态变量:是被 static 修饰的变量,也称为类变量,它属于类,因此不管创建多少个对象,静态变量在内存中有且 仅有⼀个拷⻉;静态变量可以实现让多个对象共享内存。 实例变量:属于某⼀实例,需要先创建对象,然后通过对象才能访问到它 ——————————————————————————————————————————
  • 11、short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
  • 答: 对于 short s1 = 1; s1 = s1 + 1; 来说,在 s1 + 1 运算时会⾃动提升表达式的类型为 int ,那么将 int 型值赋值给 short 型变量,s1 会出现类型转换错误。 对于 short s1 = 1; s1 += 1; 来说,+= 是 Java 语⾔规定的运算符,Java 编译器会对它进⾏特殊处理,因此可以正确 编译。 ——————————————————————————————————————————
  • 12、Integer和int的区别?
  • 答 (1)int 是 Java 的⼋种基本数据类型之⼀,⽽ Integer 是 Java 为 int 类型提供的封装类; (2)int 型变量的默认值是 0,Integer 变量的默认值是 null,这⼀点说明 Integer 可以区分出未赋值和值为 0 的 区分; (3)Integer 变量必须实例化后才可以使⽤,⽽ int 不需要。 详细说说两者之间的对比:

—————————————————————————————————————————

  • 13、Object 的常⽤⽅法有哪些?
  • 答:
在这里插入图片描述
在这里插入图片描述

——————————————————————————————————————————

  • 14、final、finally、finalize的区别?
  • 答: final:⽤于声明属性、⽅法和类,分别表示属性不可变、⽅法不可覆盖、被其修饰的类不可继承; finally:异常处理语句结构的⼀部分,表示总是执⾏; finallize:Object类的⼀个⽅法,在垃圾回收时会调⽤被回收对象的finalize。 ——————————————————————————————————————————
  • 15、==和equals的区别
  • 答: https://blog.csdn.net/why_youjjww/article/details/106352996?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163093356916780269844589%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163093356916780269844589&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-106352996.first_rank_v2_pc_rank_v29&utm_term=%3D%3D%E5%92%8Cequals%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187 ——————————————————————————————————————————
  • 16、两个对象的 hashCode() 相同,则 equals() 也⼀定为 true 吗?
  • 答: 两个对象的 hashCode() 相同,equals() 不⼀定为 true。因为在散列表中,hashCode() 相等即两个键值对的哈希 值相等,然⽽哈希值相等,并不⼀定能得出键值对相等【散列冲突】。 ——————————————————————————————————————————
  • 17、为什么重写 equals() 就⼀定要重写 hashCode() ⽅法?
  • 答:

——————————————————————————————————————————————

  • 18、&和&&的区别?
  • 答: Java 中 && 和 & 都是表示与的逻辑运算符,都表示逻辑运输符 and,当两边的表达式都为 true 的时候,整个运算 结果才为 true,否则为 false。 &&:有短路功能,当第⼀个表达式的值为 false 的时候,则不再计算第⼆个表达式; &:不管第⼀个表达式结果是否为 true,第⼆个都会执⾏。除此之外,& 还可以⽤作位运算符:当 & 两边的表达式 不是 Boolean 类型的时候,& 表示按位操作。 ——————————————————————————————————————————————
  • 19、Java中的参数传递是传值还是传引用。
  • 答: Java 的参数是以值传递的形式传⼊⽅法中,⽽不是引⽤传递。 当传递⽅法参数类型为基本数据类型(数字以及布尔值)时,⼀个⽅法是不可能修改⼀个基本数据类型的参数。 当传递⽅法参数类型为引⽤数据类型时,⼀个⽅法将修改⼀个引⽤数据类型的参数所指向对象的值。即使 Java 函 数在传递引⽤数据类型时,也只是拷⻉了引⽤的值罢了,之所以能修改引⽤数据是因为它们同时指向了⼀个对象, 但这仍然是按值调⽤⽽不是引⽤调⽤。 ——————————————————————————————————————————————
  • 20、Java中的Math.round(-1.5)等于多少?
  • 答: 等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃 ———————————————————————————————————————————————
  • 21、两个⼆进制数的异或结果是什么?
  • 答: 两个⼆进制数异或结果是这两个⼆进制数差的绝对值。表达式如下:a^b = |a-b|。 两个⼆进制 a 与 b 异或,即 a 和 b 两个数按位进⾏运算。如果对应的位相同,则为 0(相当于对应的算术相减), 如果不同即为 1(相当于对应的算术相加)。由于⼆进制每个位只有两种状态,要么是 0,要么是 1,则按位异或 操作可表达为按位相减取值相对值,再按位累加。 ————————————————————————————————————————————————
  • 22、深克隆和浅克隆的区别?
  • 答:

————————————————————————————————————————————————

  • 23、什么是Java的序列化,如何实序列化。
  • 答:
  • 对象序列化是⼀个⽤于将对象状态转换为字节流的过程,可以将其保存到磁盘⽂件中或通过⽹络发送到任何其他程 序。从字节流创建对象的相反的过程称为反序列化。⽽创建的字节流是与平台⽆关的,在⼀个平台上序列化的对象 可以在不同的平台上反序列化。序列化是为了解决在对象流进⾏读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现 Serializable 接⼝,该接⼝没有需要实现的⽅法,只是⽤于标注该对象是 可被序列化的,然后使⽤⼀个输出流(如:FileOutputStream)来构造⼀个 ObjectOutputStream 对象,接着使 ⽤ ObjectOutputStream 对象的 writeObject(Object obj) ⽅法可以将参数为 obj 的对象写出,要恢复的话则使⽤ 输⼊流。 什么情况下需要序列化?
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档