Jvav常问面试题(附解析)
01.什么是面向对象
面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),
Java 是一个支持并发、基于类和面向对象的计算机编程语言。面向对象软件开发具有以下
优点:代码开发模块化,更易维护和修改。代码复用性强。增强代码的可靠性和灵活性。增加代码的可读性。
02.面向对象的特征
四点:封装、继承、多态、抽象
03.什么是封装
封装,给对象提供了隐藏内部特性和行为的能力。
对象提供一些能被其他对象访问的方法来改变它内部的数据。
在 Java 当中,有 4 种修饰符: default、public、private 和 protected 。
每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。
下面列出了使用封装的一些好处:通过隐藏对象的属性来保护对象内部的状态。提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。禁止对象之间的不良交互提高模块化。
04.什么是继承
继承,给对象提供了从基类获取字段和方法的能力。
继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。
05.什么是多态
多态,是编程语言给不同的底层数据类型做相同的接口展示的一种能力。
一个多态类型上的操作,可以应用到其他类型的值上面。
06. 什么是抽象
抽象,是把想法从具体的实例中分离出来的步骤,因此,
要根据他们的功能而不是实现细节来创建类。
Java 支持创建只暴漏接口而不包含方法实现的抽象的类。
这种抽象技术的主要目的是把类的行为和实现细节分离开。
07.什么是重载
- 方法重载概念方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载- 多个方法在同一个类中- 多个方法具有相同的方法名- 多个方法的参数不相同,类型不同或者数量不同
- 注意:- 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式- 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
08.什么是重写
重写 override首先要有父子类之间的继承关系在子类的继承中,如果子类继承了父类的方法,那么在子类中可以重新定义一个同名的方法,这个方法的类型,名称和参数列表都相同,这样的操作即是方法的重写。同时,在子类中进行该方法的重写后,子类会隐藏与其同名且继承于父类中的方法。子类方法不能缩小父类方法的访问权限。子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。存在于父类和子类之间。方法被定义为 final 不能被重写
09.JDK、JRE、JVM 分别是什么关系?
JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE。开发工具如:
用于编译 Java 程序的 javac 命令。
用于启动 JVM 运行 Java 程序的 Java 命令。
用于生成文档的 Javadoc 命令。
用于打包的 jar 命令等等。
简单说,就是 JDK 包含 JRE 包含 JVM。
-------------------------------
JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,
包含有 Java 虚拟机(JVM)和丰富的系统类库。系统类库即为 Java 提前封装好的功能类,
只需拿来直接使用即可,可以大大的提高开发效率。
简单说,就是 JRE 包含 JVM。
-------------------------------
JVM 即为 Java 虚拟机,提供了字节码文件(.class)的运行环境支持
10.Java 中基本数据类型有几种?各自占用多少字节?
整数值型:byte(1byte)、short(2byte)、int(4byte)、long(8byte)
字符型:char(2byte)
浮点类型:float(4byte)、double(8byte)
布尔型:boolean 没有明确定义
11·数组的定义
-数组的定义:数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
-数组的基本特点:1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。2. 其元素必须是相同类型,不允许出现混合类型。元素的类型可以是java 支持的任意类型3. 数组类型可以是任何数据类型,包括基本类型和引用类型。4. 数组的元素在堆内存中被分配空间,并且是连续分配的5. 使用new 关键字对数组进行 内存的分配。每个元素都会被jvm 赋予默认值。默认规则:整数:0 浮点数:0.0 字符:\u0000 布尔:false 引用数据类型:null。6. 数组的元素都是有序号的,序号从0开始,0序的。称作数组的下标、索引、角标
-数组的声明:1. 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。2. 声明一个数组的时候并没有数组真正被创建。3. 构造一个数组,必须指定长度。
-数组格式:元素类型[ ] 数组名 = new 元素类型 [元素个数或数组长度]; // int [] arr = new int [3];[]:代表这是数组类型。数组名:一个合法的标识符,命名规范 和 局部变量 规范一致。new:是java 的关键字。用来向JVM申请内存的。
-元素类型[元素个数] :决定了向JVM申请的内存空间的大小。 大小:元素类型字节数 * 元素个数
-元素的个数:只要是一个合法的java 表达式就可以。 返回一个int 类型的值即可
12.数组的优缺点
-优点:1:可以保存若干个数据。2:随机访问的效率很高。根据下标访问元素效率高(元素连续分配空间)。
-缺点:1:数组的元素的类型必须一致。元素类型必须一致。2:连续分配空间在堆中,如果数组的元素很多,对内存的要求更加的严格。3:根据内容查找元素效率比较低,需要逐个比较个。4:删除元素、插入元素效率比较低,需要移动大量的元素。5:数组定长,不能自动扩容。6:数组没有封装,数组对象只提供了一个数组长度的属性,但是没有提供方法用来操作元素。java 提供了一整套的 针对不同需求的 对于容器的解决的方案。集合框架部分。不同的容器有不同的特点,满足不同的需求。数组的缺点都会被干掉。
13.成员变量和局部变量的区别
- 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
- 内存中位置不同:成员变量(堆内存)局部变量(栈内存)
- 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)
- 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)
14.什么是API和java中的API
- API (Application Programming Interface) :应用程序编程接口,- java中的API指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
15.java中String、StringBuffer和StringBuilder的区别
java中用于处理字符串常用的有三个类:1、java.lang.String2、java.lang.StringBuffer3、java.lang.StrungBuilder
三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。StringBuffer是线程安全,可以不需要额外的同步用于多线程中;
StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;
StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。String实现了三个接口:Serializable、Comparable<String>、CarSequence
StringBuilder只实现了两个接口Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他两个不可以。
16.ArrayList集合特点
- 优点: 底层数据结构是数组,查询快,增删慢,存储元素有序可重复。
- 缺点: 线程不安全,效率高
17.LinkedList集合特点
-优点: 底层数据结构是链表,查询慢,增删快,可以存储重复元素。
-缺点: 线程不安全,效率高
18.ArrayList和LinkList的区别
- 底层实现区别ArrayList 底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标 index 访问,只是我们需要用 get() 方法的形式, 数组支持随机访问, 查询速度快, 增删元素慢;LinkedList 底层实现是链表, LinkedList 没有实现 RandomAccess 接口,链表支持顺序访问, 查询速度慢, 增删元素快
- 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
19.Java命名约定的优点、java的驼峰命名规则讲解
Java命名约定是一个规则,决定标识符使用什么命名规则,如类,包,变量,常量,方法等的命名规则。但是,它并不是强制要求必须遵循。这称为约定不规则。java编程语言的所有类,接口,包,方法和字段都是根据java命名约定给出的。-java命名约定的优点通过使用标准的Java命名约定,可以使自己和其他程序员更容易阅读代码。Java程序的可读性非常重要。 它能让程序开发者花费更少的时间来读懂代码的作用。
java的驼峰命名规则Java遵循驼峰语法,用于命名类,接口,方法和变量。方法和变量的命名:如果就使用一个单词命名,则这个单词全部使用小写字母,例如gender,name,get();如果名称是使用两个单词组合,则第二个单词将以大写字母开头。例如:actionPerformed(),firstName,类和接口的命名规则是每个单词的首字母都要大写ActionEvent,ActionListener等。
20.Java中构造函数作用,以及注意事项
构造函数的作用:1、方便参数的传递。2、通过new调用构造函数初始化对象。是给与之格式(参数列表)相符合的对象初始化
构造函数注意事项:1、构造函数的方法名必须与类名相同。2、不能声明函数类型,没有返回类型,也不能定义为void。3、不能有任何非访问性质的修饰符修饰,例如static、final、synchronized、abstract都不能修饰构造函数。4、构造函数不能被直接调用,必须通过new关键字来调用。
Jvav常问面试题(附解析)相关推荐
- Java常问面试题整理,帮你搞定‘金9银10’(附答案纯干货)
前言: 工作做螺丝钉,面试造火箭,我想这个是每个程序员比较头疼的事情,但是又有必须经历的流程,尤其是摸不清面试官问的问题,准备不充分,导致面试的时候不知道如何回答.本文是小编个人从几十次面试中挑选的面 ...
- VUE前端常问面试题
文章目录 一.VUE前端常问面试题 二.文档下载地址 一.VUE前端常问面试题 1.MVC和MVVM 区别 MVC:MVC全名是 Model View Controller,即模型-视图-控制器的缩写 ...
- 2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机
Spring相关大厂常问面试题 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块? 3. @RestController 与 @Controller 的区别 4. 谈谈自己对于 ...
- 2020年Java常问面试题--聂
2020年Java常问面试题 打算这几天每天更新15~20题.(这样有助于你们阅读和理解!)我们先从简单的开始 加qq群:568680919,免费赠送1000道java面试题和简历模板 JDK 和 J ...
- android常问面试题及答案 经典
android常问面试题及答案 经典 转载 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity, activity 是Context的子类,同时实现了win ...
- 软件测试常问面试题【二】
软件测试常问面试题[二] 1.APP性能测试遇到什么bug没有? 性能bug:卡顿.ANR.内存泄漏 2.什么是兼容性测试?兼容性测试要测试哪些方面? 主要包括: 不同操作系统版本的兼容(Androi ...
- Spring常问面试题及答案汇总(2022版)
网上也有很多关于Spring常问问题/面试题整理的文章,我感觉大部分都是互相 copy,而且很多问题也不是很好,有些回答也存在问题.所以,自己花了一周的业余时间整理了一下,希望对大家有帮助. 1. 什 ...
- 2020最新,100道电商大厂必问面试题:附完整答案
2020,可谓是招聘面试最难季.不少大厂,如腾讯.字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言.今天不谈其它,就说说我作为面试官面试的那些事儿. 从某电商项 ...
- 并发编程面试宝典(内含69道常问面试题及答案解析)
一.开篇: 众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试的必问题,一个好的Java程序员是必须对并发编程这块有所了解的. 因此,大家不难发现 Java 并发问题一直是各个大厂面 ...
最新文章
- linux内存使用统计,Linux 中free命令检查内存使用情况
- 由wsdl生成java,这是最原始的axis1
- HoloLens开发入门
- CGContextRef学习笔记
- Spring MVC漏洞学习总结
- python 爬虫 爬取序列博客文章列表
- Java文件读取 中文乱码
- 解决:There was an unexpected error (type=Internal Server Error,..). No instances available for XXX
- windows 7系统搭建本地SVN服务器的过程
- C++笔记-using的进一步用法
- Linux yum仓库的安装
- CVPR2019,开源活体检测
- java兵临城下_再谈java事件监听机制
- scala yield入门详解
- 超详细的UI设计软件教程与资料
- 绝对中位差Median Absolute Deviation
- Vue页面跳转动画效果实现
- 武汉坚守第六十一天——运动健康相关联,牛尿神奇为哪般
- 【模型库】大卡车货车 集装箱 叉车 三维模型
- 【UVM实战】第七章:UVM中的寄存器模型(2)简单的寄存器模型
热门文章
- linux和手机通讯,在Linux的系统下使用红外进行手机通讯
- When and why vgs command can change metadata and incur old metadata to be backed up?
- 计算机教师课改先进个人,基础教育课程改革工作先进个人事迹
- ae教程 (五)滤镜特效 (五)描边光效
- Jmeter打开badboy录制的脚本报类元素错误解决方法
- scrapy-redis分布式爬虫爬取美女图片
- 2019 ICPC 上海站网络赛 K.Peekaboo (圆上整点)
- pageX/pageY、clientX/clientY、screenX/screenY的区别
- AtCoder ABC172 E - NEQ(组合数 + 容斥原理)
- 利用systemstate dump trace文件寻找dg terminated原因