1、面向对象的特性和对这些特性的理解

默认情况下面向对象有3大特性:封装、继承、多态,如果非要说出四大特性,那么就把抽象加上去。

  • 封装:通常认为,封装就是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写的的一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可以隐藏的东西,只向外界提供最简单的编程接口。
  • 继承:继承是从已有的类中得到继承信息,并且创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类称为子类(派生类)。继承让变化中的软件系统具有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。
  • 多态性:多态性是指允许不同子类型的对象对同一消息做出不同的响应。简单地说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时多态和运行时的多态。如果将对象的方法看作为对象向外界提供的服务,那么运行时多态可以理解为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的。方法重载实现的是编译时多态,也称为前绑定,而方法重写实现的是运行时多态,也称为后绑定。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:第一是方法重写,子类继承父类并重写父类中已有的或者抽象的方法。第二是,对象造型,用父类型引用子类型对象,这样的引用调用同样的方法就会根据子类对象的不同而变现出不同的行为。
  • 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

2、为什么需要clone对象?

在实际编程中,我们常常会遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同的新对象B,并且此后B做的任何改动都不会再影响到A,也就是说,A与B是两个完全独立的个体,但是B的初始值是由A对象确定的。在Java中,使用简单的赋值语句并不能满足这种需求,满足这种需求是可以有许多其他途径的,但是使用clone()方法无疑是最简单最高效的手段。

3、new一个对象和clone一个对象的区别?

new操作符的本意是分配内存:程序执行到new操作符时,首先去看一下new操作符后面的类型,因为知道了类型,才可以根据类型知道需要分配多大的内存空间,分配完内存空间之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化。构造方法返回后,一个对象就算创建完毕了,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用(地址)来操纵这个对象了。clone在第一步和new是相似的,也是首先分配内存,调用clone方法时,分配的内存和原对象(即调用clone方法的那个对象)相同,然后再使用原对象中对应的各个域去填充新对象的各个域,填充完成之后,clone方法返回,一个新的相同的对象就被创建成功了,同样可以把这个新对象的引用(地址)发布到外部使用。

4、Java为什么没有goto语句?

goto是Java中的保留字,在目前的版本中Java没有使用,根据Java之父Gosling给出的Java关键字列表,其中有goto和const这两个关键字,但是目前这两个关键字无法使用,在未来版本的Java中会不会启用这两个关键字并不知道,因此有的地方也把他们成为保留字,其实保留字这个词应该是具有更加准确的含义,熟悉C语言编程的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词组合都被视为保留字。(水题,凑个数的,嘿嘿,了解即可)

5、Java中&和&&的区别?

&运算符有两种用法:按位与和逻辑与。

&&运算符是短路与运算,逻辑与和短路与的差别还是很大的,虽然二者都是要求运算符左右两边都为true整个表达式的值才是true。

&&之所以被称为短路与是因为如果&&左边的表达式为false,则右边的表达式会被直接短路掉,不会再执行了,在实际开发中,我们可能更多时候需要的是&&。例如在验证用户登录判定用户名不是null而且也不是空字符串的时候,应该写为username != null && !username.equals(""),注意:二者的顺序不能改变!更不能使用&,因为第一个条件如果不成立,根本不能进行空字符串的equals比较,否则会产生NullPointerException异常。

逻辑或|和短路或||的差别也是如此。

6、==和equals的区别?

equals和==最大的区别就是:equals是一个方法,==是一个运算符!

==:如果比较的对象是基本数据类型,则比较的是数值是否相等,如果比较的双方是引用数据类型,则比较的是引用对象的地址值是否相同。

equals():用来比较两个对象的内容是否相同,equals方法不能用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

7、抽象方法(abstract)是否可以同时是静态的?是否同时是本地的(native)?是否可以同时是synchronized?

都不能。抽象方法需要子类重写,而静态的方法都是无法被重写的,因此二者是矛盾的。本地方法由本地代码(C/C++)实现的,抽象方法是没有实现的,也是矛盾的。synchronized和方法的实现细节有关系,抽象方法不涉及具体实现细节,因此也是互相矛盾的。

8、静态变量和实例变量的区别是什么?

静态变量:被static修饰符修饰的变量就是静态变量,也称为类变量,它是属于类的,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个。静态变量可以实现让多个对象共享内存。

实例变量:实例变量必须依存于某一具体的实例,需要首先创建对象,然后通过对象才可以访问到它。

9、break和continue的区别是什么?

break和continue都是用来控制循环语句的,break用于完全结束一个循环,跳出循环体执行循环后面的语句,continue用于跳出本次循环,继续判断循环条件是否满足,满足的话继续执行下次循环。

10、抽象类(abstract)和接口(interface)之间有什么异同?

不同:

抽象类:

  • 抽象类中可以定义构造器;
  • 抽象类中可以有抽象方法和具体方法;
  • 抽象类中可以定义成员变量;
  • 有抽象方法的类必须被定义为抽象类,而抽象类中不必一定要有抽象方法;
  • 抽象类中可以包含静态方法;
  • 一个类只能继承一个抽象类;
  • 抽象类中的成员可以是private、默认、protected、public的。

接口:

  • 接口中不能定义构造器;
  • 接口中的方法全部是抽象方法,不包含具体实现;
  • 接口中的成员全部是public的;
  • 接口中定义的成员变量实际上都是常量;
  • 接口中不能有静态方法
  • 一个类可以实现多个接口。

相同:

  • 接口和抽象类都不能实例化;
  • 抽象类和接口类型都可以作为引用类型;
  • 一个类如果继承了某个抽象类或者实现了某个接口,都需要对其中的抽象方法进行全部实现,否则该类仍然需要被声明为抽象类。

Java工程师面试1000题1-10相关推荐

  1. Java工程师面试1000题51-60

    51.讲一讲ArrayList的内部实现. 回答这样的问题,不要光回答个皮毛,可以详细介绍一下ArrayList内部是如何实现数组的增加和删除的,要知道,数组在创建的时候长度是固定的,那么我们往Arr ...

  2. Java工程师面试1000题41-50

    41.什么是Java序列化?如何实现Java序列化? 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输与网络之间.序列 ...

  3. Java工程师面试1000题152-Stream API编程练习

    152.Stream API编程练习 ①给定一个数字列表,如何返回一个由每个数的平方构成的列表?给定[1,2,3,4,5]返回[1,4,9,16,25] @Testpublic void test1( ...

  4. Java面试汇总>>>初级工程师—面试1000题

    面试汇总>>> 每日刷题 001:重载和重写有什么区别?阐述二者是什么? 002:什么是线程池?线程池有什么优点? 003:线程有几种状态,他们是怎么切换的呢? 004:比较一下St ...

  5. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  6. spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...

    146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...

  7. BAT机器学习面试1000题系列(第150~279题)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat leadai的博客 RSS订阅 转 BAT机器学习面试1000 ...

  8. JAVA工程师面试题目大全_绝对值得看

    JAVA工程师面试题目大全 一.单选题 1.下列哪种说法是正确的( D) A)实例方法可直接调用超类的实例方法 B)实例方法可直接调用超类的类方法 C)实例方法可直接调用其他类的实例方法 D)实例方法 ...

  9. 【转】BAT机器学习面试1000题系列(1~50)

    BAT机器学习面试1000题系列 整理:July.元超.立娜.德伟.贾茹.王剑.AntZ.孟莹等众人.本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者 ...

最新文章

  1. [architecture]-ARM SMMU学习概念总结一篇就够了
  2. Python for Data Analysis 学习心得(二) - pandas介绍
  3. Dubbo源码解析之Zookeeper连接
  4. 【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱
  5. 51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...
  6. 对C++继承,封装,多态的理解
  7. php重定向mysql_使用.php文件生成MySQL转储
  8. CSDN 原力计划之最具技术影响力企业博客英雄榜 发布!
  9. bzoj 2434 [Noi2011]阿狸的打字机(AC自动机+fail树+dfs序+树状数组)
  10. yolov5样本处理方式
  11. springcloud如何制作一个物联网产品
  12. Scrapy+Selenium爬取动态网页:no ‘moz:firefoxOptions.binary‘ capability provided
  13. 睡前改善睡眠的简单方法有哪些,不妨试试这几个小妙招
  14. html5 canvas详解 pdf,html5 canvas教程 pdf
  15. 物联网资产暴露情况分析
  16. 音视频开发三:FFmpeg安装与常用命令
  17. 高等数学(第七版)同济大学 习题8-2 个人解答
  18. [毕业设计源码]基于springboot的线上跳蚤(二手闲置)市场平台[包运行成功]
  19. [vuluhub]-(GoldenEye)
  20. 以视频直播为牵引 企业数字化转型的又一次“大迁徙”

热门文章

  1. 不限速!免登录!百度网盘下载工具(Yixun)亲测好用
  2. 【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树
  3. 从蒙特卡洛方法计算pi值谈random模块
  4. UI设计师需要会交互设计吗
  5. 关于 Linux 输入正确账号密码显示 Sorry,that did not work的问题
  6. [美国访问学者]美国医疗保险类型简介
  7. win7中能对窗口的排列方法是_win7
  8. 技术分享|由于Nginx配置不当而导致内网资产暴漏
  9. SQL数据恢复总结 - sql server 2012数据库基础-数据恢复-实验报告
  10. 推荐一个轻便好用的随时记录的便签类app