面向对象面试题

类和对象面试题

1. & 和 && 的区别

参考答案

    & 运算符有两种用法:(1) 按位与;(2) 逻辑与。&& 运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&& 之所以称为短路运算是因为,如果 && 左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用 && 而不是 &,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为 username != null &&!username.equals(""),二者的顺序不能交换,更不能用 & 运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。 

2. 两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hashCode,这句话对不对?

参考答案

    不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hashCode)应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1) 如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;(2) 如果两个对象的 hashCode 相同,它们并不一定相同。 

3. 构造器(constructor)是否可被重写(override)?

参考答案

   构造器不能被继承,因此不能被(子类)重写。

4. 抽象类 (abstract class) 和接口 (interface) 有什么异同?

参考答案

    不同:1. 抽象类中可以定义构造器,接口中不可以。2. 抽象类可以有抽象方法和具体方法,接口中只可以有抽象方法。3. 抽象类中的成员可以是 private、默认、protected、public,接口中的成员全都是 public 的 (1.9 后可以有私有方法)4. 抽象类中可以定义成员变量,接口中定义的成员变量实际上都是常量。5. 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法6. 抽象类中可以包含静态方法,接口中不能有静态方法(从 1.8 开始可以有)。7. 一个类只能继承一个抽象类,一个类可以实现多个接口。相同:1. 不能够实例化2. 可以将抽象类和接口类型作为引用类型3. 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类

5. ==和 equals 的区别?

参考答案

    equals 和 == 最大的区别是一个是方法一个是运算符。 ==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。equals():用来比较方法两个对象的内容是否相等。注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

6. this 和 super 区别?

参考答案

    this 是代表本类对象的引用。 super 是代表父类存储空间的标识(可以理解为父类的引用,可以操作父类的成员) 怎么用呢? A: 调用成员变量 this.成员变量 调用本类的成员变量 super.成员变量 调用父类的成员变量 B: 调用构造方法 this(...)  调用本类的构造方法 super(...)  调用父类的构造方法 C: 调用成员方法 this.成员方法  调用本类的成员方法 super.成员方法 调用父类的成员方法 

7. 说出 java.lang.Object 类的常用方法

参考答案

    (1)public boolean equals(java.lang.Object) :比较对象的地址值是否相等,如果子类重写,则比较对象的内容是否相等;(2)public native int hashCode() :获取哈希码(3)public java.lang.String toString() :把数据转变成字符串(4)public final native java.lang.Class getClass() :获取类结构信息(5)protected void finalize() throws java.lang.Throwable :垃圾回收前执行的方法(6)protected native Object clone() throws java.lang.CloneNotSupportedException: 克隆(7)public final void wait() throws java.lang.InterruptedException :多线程中等待功能(8)public final native void notify(): 多线程中唤醒功能(9)public final native void notifyAll(): 多线程中唤醒所有等待线程的功能 

8. String s=new String(“xyz”); 创建了几个 String 对象?

参考答案

    二个。“xyz”放在字符串常量池(如果池中已经存在 xyz 则不会再次创建)。new String 放在堆里。

9. 什么是字符串常量池?

参考答案

    字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串。在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用。如果不存在,则实例化一个字符串放到池中,并返回其引用。

10. String 类有那些常用方法?

参考答案

     length(): 返回字符串长度charAt(): 返回指定索引处的字符substring(): 截取字符串trim(): 去字符串两端空白split(): 分割字符串,返回一个分割后的字符串数组replace(): 字符串替换indexOf(): 返回指定字符的索引

11. StringBuffer 和 StringBuilder 区别?

参考答案

    StringBuffer 是线程安全的(synchronized),而 StringBuilder 不是,所以 StringBuilder 效率更高,锁的获取和释放会带来开销。

12. 访问控制符区别?

参考答案

访问控制符当前类同一包子类其他包
publicYYYY
protectedYYYN
defaultYYNN
privateYNNN

13. static 关键字作用?

参考答案

     1.static 变量(静态变量): 不用创建对象,通过类名直接访问2.static 方法(静态方法): 不用创建对象,通过类名直接访问3.static 代码块(静态代码块): 类加载时执行一次

14. final 关键字作用?

参考答案

    1. 修饰类:类不能被继承2. 修饰方法:方法不能被重写3. 变量:变量值不能被修改

15. 面向对象五大基本原则?

参考答案

    1. 单一职责原则:一个类,最好只做一件事,只有一个引起他的变化。2. 开放封闭原则:对扩展开放,对修改封闭。3. 里氏替换原则:子类必须能够替换父类。4. 依赖倒置原则:依赖于抽象。5. 接口隔离原则:使用多个小的专门的接口,不要使用一个大的总的接口。

16. 接口和抽象类区别?

参考答案

不同点抽象类接口
关键字abstractinterface
实现extendsimplements
构造函数
属性随意static final

17. 重载和重写区别?

参考答案

    重载:在同一个类中,方法名相同参数列表不同。与方法返回值和访问修饰符无关。重写:发生在父子类中,方法名、参数列表相同。抛出异常小于等于父类,访问修饰符大于等于父类。

18. Java 创建对象有几种方式?

参考答案

    Java 中提供了以下四种创建对象的方式:1. new 创建新对象2. 通过反射机制3. 采用 clone 机制4. 通过序列化机制

19. Java 中会存在内存泄漏吗?请简单描述。

参考答案

    理论上 Java 因为有垃圾回收机制(GC)不会存在内存泄露问题;然而在实际开发中也会。Java 中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是 Java 的内存泄露。

20. 说明内存泄漏和内存溢出的区别和联系?

参考答案

    内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory;比如申请了一个 integer, 但给它存了 long 才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak 会最终会导致 out of memory!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应对服务器CPU占用持续性变高的解决办法

​  在服务器的使用过程中,高CPU使用率是一个常见的问题,一般是由于遇到大量流量,进程需要更多时间来执行或通过网络发送和接收大量网络数据包时,CPU使用率可能会急剧增加,严重时可能会影响到网络的性能和稳定性。因…

保护Word或Excel的几种方法,总有一种满足你的需求

你已经在Microsoft Word或Excel中创建了一个重要或机密文件,你希望将其保密或至少保持安全。也许你想确保只有你和某些人可以阅读或编辑它。也许你想限制某人可以对文件进行的修改类型。你甚至可以向读者保证这是最终版本。如果你知道在Word和Excel中使用哪些工具以及它们是如…

Git:常用命令(二)

查看提交历史 1 git log 撤消操作 任何时候,你都有可能需要撤消刚才所做的某些操作。接下来,我们会介绍一些基本的撤消操作相关的命令。请注意,有些操作并不总是可以撤消的,所以请务必谨慎小心,一旦失误&#xff0c…

提前应对威胁

通过新的《2023-2028 年荷兰国际网络安全战略》,荷兰政府在面对国家和犯罪分子持续构成的网络威胁时展现了责任和机构。它渴望将民主、人权和规范放在首位,并寻求维护全球开放、自由和安全的互联网。该战略明确了政府在国内实施打击的意愿和能力&#xf…

QT、C++实验室管理系统

一、需求介绍: 题目:基于Qt的实验室管理系统的设计 项目命名以LabSystem姓名拼音首字母(例如: LabSystemwXC) 功能要求: 一,基本必要功能: 1,使用QSQLITE数据库完成数据库的设计。 2,注册功能:包含学生注册&#xff0…

itvbox二开带会员如意版影视APP源码+视频搭建教程

详细教程V:shundazy1 网站环境必须为PHP 7.3 SQL5.6 如不是可能会出现软件打不开或者闪退情况。 首先创建网站,我这是内网,我就以IP加端口为例 上传源码到网站根目录 直接访问你的域名进行安装 访问域名 出现No input file specified.则关闭网站防跨…

【SpringBoot开发】之商城项目案例(实现登陆版)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

K8S中将一个Deployment暴露出一个指定的外部端口,生成yaml

K8S中将一个Deployment暴露出一个指定的外部端口 如何固定NodePort端口 如何固定NodePort端口 - 知乎 kubectl expose deployment quickstart-kb --namekibana-svc --port5601 --target-port5601 --typeNodePort --dry-runclient -o yaml > quickstart-kb-svc.yaml [root…

msvcp140_1.dll丢失怎样修复,缺失msvcp140_1.dll是什么原因

在日常使用电脑的过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_1.dll丢失”。那么,msvcp140_1.dll究竟是什么文件?为什么会出现丢失的情况?又该如何解决这个问题呢?本文将详细介绍msvcp140_1…

力扣-206. 反转链表

文章目录 力扣题目代码 力扣题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出&#x…

SQLSERVER排查CPU占用高

操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 现象 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用不太高,只占用了30个G CPU…

Android 跨进程之间通信(IPC)方式之ContentProvider

Android 跨进程之间通信 Android 跨进程之间通信(IPC)方式之BroadcastReceiverAndroid 跨进程之间通信(IPC)方式之ContentProvider 文章目录 Android 跨进程之间通信前言一、ContentProvider 是什么?二、如何利用ContentProvider跨进程通信1.创建自定义ContentProv…

关于发展模式加入变量的问题解决

问题1描述: 编译的时候不报错,但是在运行的时候出错输出 FLDLST: ustar in fincl( 17 ) not found ENDRUN: called without a message string 问题1解决: 这是因为在cas-esm 的atm_in 中写入了某个变量,但是在F90 代码里面没…

python使用动态规划解决不同路径问题

针对二维动态规划,还有一个问题就是关于求不同路径的实例,主要是说明在实际应用的场景中,要理解透彻实际问题的真正目的,就可以灵活实现代码编写。 对于求不同路径问题描述,对于一个机器人,处在一个mxn的网…

【Java 进阶篇】Maven 使用详解:打造便捷高效的项目构建利器

在软件开发的道路上,项目构建是一个不可避免的过程。而Maven,作为一个强大的项目管理和构建工具,为开发者提供了一套标准化的项目结构和构建流程。本文将围绕Maven的使用详解,手把手地带你探索Maven的世界,让你在项目构…

XTU-OJ-1452-完全平方数-笔记

参考博客 XTU-OJ 1452-完全平方数 题意 输入一个奇数&#xff0c;使得 n*(2*an-1)/2是一个完全平方数&#xff0c;求满足条件的最小的a 1<n<1e9 先输入样例数&#xff0c;再输入n 输入 2 1 3 输出 0 2 代码 #include<stdio.h>#define N 1000000010int a…

【UnityShader入门精要学习笔记】(1)了解渲染流水线

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 渲染流水线什么是流水线什么…

【教3妹学编程-算法题】经营摩天轮的最大利润

3妹&#xff1a;“打个中国结&#xff0c;再系个红腰带&#xff0c; 愿善良的人们天天好运来, 你勤劳生活美, 你健康春常在, 你一生的忙碌为了笑逐颜开。” 2哥 : 3妹&#xff0c;元旦快乐啊。 3妹&#xff1a;2哥元旦快乐~。 2哥&#xff1a;祝新的一年&#xff0c;3妹技术突飞…

SPI通信

SPI通信 1、SPI通信概述 SPI(Serial peripheral interface)是一种同步、串行、全双工、总线制、主从工作方式。 有四线控制&#xff1a; SDO——主设备数据输出&#xff0c;从设备数据输入&#xff0c;对于MOSI output slave inputSDI——主设备数据输入&#xff0c;从事设备…

我想把我的作品转让给他人该怎么样转让?需要注意些什么问题?

作品转让是指著作权人将其作品的著作权转让给他人&#xff0c;让他人获得该作品的著作权权利。作品转让可以是全部转让&#xff0c;也可以是部分转让。 在作品转让中&#xff0c;著作权人需要与受让人签订转让合同&#xff0c;明确转让的权利种类、范围、期限、转让价款等事项…