Java高频面试题(面向对象)
Java高频面试题(面向对象)
面向对象
2.1 类与对象的区别
类是一类事物的整体描述,是一个模板,是对象的抽象,是具有相同行为和特征的对象的描述
对象具体的一个事物,是类的实例化,万事万物皆对象
2.2 面向对象的特征是什么?
面向对象的三大特征是:封装、继承、多态
封装:是将类的实现细节以及属性进行封装,也就是私有化,之对外提供特定的方法来进行对象的调用、初始化、赋值。因为外界无法知道其具体细节,所以保证 了代码的安全性。
继承:继承是子类使用extends关键字来继承父类,子类可以继承使用父类的非私有化的属性和方法(也就是非private关键字修饰的),提高了代码的复用性,如 果父类所提供的属性与方法难以满足子类的使用情景,那么子类在不修改父类的情况下可以自己定义,提高了代码的灵活性。
多态:同一种行为对不同事物会展现出不同的表现,也就是说同一个方法在不同子类中有不同的实现,提高了代码的扩展性,对于类来说多态就是向上转型与向下 转型。对于方法来说,就是重写与重载。
2.3 public private protected default(默认)的区别
public:在任何地方都可以被调用
protected:在子类、同包、同类都可以被调用
default:在同包、同类都可以被调用
private:在同类下可以被调用
2.4 方法的重写与重载有什么去呗
方法的重载
在同一个类中,方法名相同,参数列表不同(参数的顺序、参数的个数、参数的属性),与其他因素无关。
方法的重写
重写是存在与子父类中,当父类所提供的方法不适合子类所使用的情况,子类可以将父类的此方法进行重写
重写存在父子类,方法名、参数列表相同,方法返回类型只能为父类该方法返回值的本类或子类,抛出异常类型只能为父类该方法返回值的本类或子类,但是注意子类重写的权限修饰符要大于父类方法的权限符。
2.5 什么是构造函数
构造函数简单来说就是进行类初始化的函数,构造函数没有返回值(也没有void),构造函数是我们在new一个对象的实例化类时自动调用的。在每一个类都会有一个构造函数,当我们没有明确声明构造函数的时候,类默认为无参构造器,但是当我们声明构造函数之后,默认的无参构造器就会失效。一个类可以重载任意个构造函数(只要符合重载定义就可以),但是重载是无法被继承的。
2.6 this和super有什么区别
this
this关键字就是代表当前类的引用,我们可以使用this来调用本类的其他构造器,但是this所调用的构造器必须放在首行。this也可以调用本类的属性,当方法中形参与本类属性重名之后就可以使用this.属性来进行区分。如果通过this调用的属性和方法没有在本类找到则就会从父类中继续查找。
super
super关键字就是代表当前类的父类的引用,我们可以通过super来调用父类的属性、方法以及构造器。当我们使用super来调用父类构造器的时候必须放在首行,所有子类构造器都默认调用父类的无参构造器,如果父类的构造器被重写,那么子类一定要显性调用super.构造器(也就是父类所编写的构造器)。
注意:
- 在一个类型中无法同时使用this和super来调用构造器。因为二者均为首行,虽然使用this.构造器再调用父类构造器,其实在this所调用的构造器中依旧调用了super.构造器。
- 当父类重写构造器导致无参构造器失效的,在子类构造器中只能使用super来调用构造函数或者this来简介调用。
例:
父类
public class Test {private int age;private int age123;public Test(int age) {this.age = age;}public Test(int age, int age123) {this.age = age;this.age123 = age123;}
}
子类
public class TestSon extends Test{private int ageAnInt;private String ageString;public TestSon(int age) {super(age);}public TestSon(int age, int age123) {super(age, age123);}public TestSon(int ageAnInt,String str){super(ageAnInt);this.ageAnInt=ageAnInt;this.ageString=str;}
}
兄弟们可以自行调用测试上面的例子,去理解以下我说的话。
2.7 static变量与成员变量以及局部变量的区别?
static变量也就是类变量,定义在整个类中,在整个类中都可以被访问,静态变量被所有类的实例对象多共享,在内存中只有一个副本,这个变量时在类加载时候被初始化的,有默认值,权限修饰符无限制,随着类的消失而消失,存在内存的静态存储区中,可以通过类名或对象名进行调用。
成员变量只有当类实例化的时候被初始化,成员变量随着对象的消失而消失,存在于对象所在的堆中,默认值,权限修饰符无限制,成员变量只能通过对象名来调用。
局部变量存在于方法体中所定义的变量,只在所属的区域有效,局部变量存在栈中,作用范围结束后,变量所占用的空间会自动释放,没有默认值,需要显性初始化,不能用权限修饰符修饰。
2.8 static final abstract
static修饰变量,为全局变量被该类的所有实例都可以共享,在类加载时候被分配内存空间且初始化,有默认值,存储在静态存储区中。
static修饰方法,为静态方法可以被类的所有实例对象所共享,存在于静态方法区,在类加载时候被分配内存空间且加载。
static修饰类,static只能修饰内部类,当修饰时static内部类变成了外部类。
final修饰变量,当静态为基本数据类型的时候,值无法修改,当为引用数据类型的时候,只是引用不可以修改,引用对象内的属性依旧可以修改。
final修饰类,被修饰的类为最终类无法被继承。
final修饰方法,被修饰的方法无法被重写,但是可以被继承使用。
abstract修饰类,为抽象类,抽象类必须被继承,抽象类不一定有抽象方法。
abstract修饰的方法为抽象方法,抽象方法不用写方法体,必须在子类重写,有抽象方法的类一定为抽象类。
2.9 final finally finalize有什么区别
final是关键字,可以修饰变量、方法、类。(具体同上哈)
finally是配合try来使用的,它的含义是不管try方法体中是否抛出异常,finally都会被执行(有一种特别当JVM被强行关闭finally就不会被执行了【System.exit(0)就是整个老6方法】)
finalize是在进行垃圾回收时候所调用的方法,对于垃圾回收对象前会调用finalize方法
2.10 接口和抽象类的区别
抽象类中可以有构造器,接口里不会有构造器
抽象类中可以定义非抽象方法,接口里也可以定义非抽象方法但是只能为static方法或default方法
抽象类可以定义任意权限修饰符的属性,但接口可以定义public final修饰的(也就是常量)
一个类只能继承一个抽象类,但是可以实现多个接口
一个抽象类只能继承一个抽象类,但一个接口可以继承多个接口
2.11 什么是值传递和引用传递
值传递就是对于基本数量类型,我们传递的其本身的值,是将值复制到一个新的变量中,当方法调用的时候我们只是把所传递变量的值传递给形参,形参将被赋值,所以当我们在方法体中修改形参变量的时候,原来被传递的变量不会被修改。
引用传递对于引用数据类型,我们传递的是其在栈内存指向堆内存的地址,当方法调用的时候我们是把所传递变量的地址值传递给形参,所以当我们在方法体中修改形参变量的时候,原来被传递的变量会被修改,因为我们是将栈内存所指向的堆内存中的数据修改,被传递的变量也是指向堆内存同一个位置。
2.12 Java中堆和栈的区别
Java中的堆是一个运行时数据区,类的对象从堆中分配空间,当对象被new的时候就会在堆中开辟对应的内存空间,通过建立垃圾回收器来销毁。堆的优势是可以动态的分配内存空间,需要多少内存空间不需要事先告诉编译器,因为堆实在运行时动态分配的,所以存取速度慢。
栈主要存放一些基本数据类型和指向堆内存中的地址。栈的优势时存取速度要比堆块,栈内存中的数据可以被共享。但是缺点是,存放在栈中的数据占用多大的内存空间在编译前就要确定下来,缺乏一定的灵活性。
Java高频面试题(面向对象)相关推荐
- Java高频面试题(四)
Java高频面试题四 六. 框架部分 6.1.什么是框架? 6.2 .MVC模式 6.3. MVC框架 6.4. 简单讲一下struts2的执行流程? 6.5. Struts2中的拦截器,你都用它干什 ...
- 【Java】Java 高频面试题英语版(1)
今天分享 Java 高频面试题英语版.音频文件放在下方,点击获取. [Java]Java 高频面试题英语版(1) [Java]Java 高频面试题英语版(2) [Java]Java 高频面试题英语 ...
- Java高频面试题汇总(2022)
Java 1. ArrayList和LinkedList的区别 Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的. Array获取数据的时间复杂度是O(1 ...
- 100道Java高频面试题(阿里面试官整理)
我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...
- java高频面试题(2023最新)
目录 一.java基础 1.八大基础类型 2.java三大特性 3.重载和重写的区别 4.pubilc.protected.(dafault)不写.private修饰符的作用范围 5.==和equal ...
- Java高频面试题解析,直戳面试官痛点,多家互联网大厂Offer等你拿
前言 回顾多灾多难的2021年,新冠疫情持续肆虐全球,疫情确诊曲线起伏跌宕,由此引发一系列事件:经济萎缩. 财政刺激.疫苗研发.经济复苏等等.无不牵动着市场的神经."后疫情时代"将 ...
- 5年大厂Java高频面试题及答案整理(二)
31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象. ...
- 5年大厂Java高频面试题及答案整理
1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建新类. 封装:将数据隐藏起来,对数据的访问只能通过特定接口. 多态性:不同子类型对象对相同消息作出不同响应 ...
- Java高频面试题总结
本文目录: Java的特点 Java 与 C++ 的区别 面向对象和面向过程的区别? JKD和JRE的区别? 面向对象有哪些特性? Java的基本数据类型有哪些? 什么是值传递和引用传递? 自动装箱和 ...
最新文章
- 论文浅尝 | Dynamic Weighted Majority for Incremental Learning
- canvas笔记-文本水平垂直对齐与度量
- 多分类f1分数_机器学习之分类模型评估总结
- openlayers属性数据mysql_OpenLayers学习笔记8——使用servlet从mysql获取数据并标注
- html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门
- docker基础学习中遇到的一些问题
- 分布式监控系统开发【day37】:填充表配置项目(三)
- SpringBoot 的错误处理机制
- 《CRAFT:Character Region Awareness for Text Detection》论文笔记
- TypeScript 类型兼容性整理
- ABP理论学习之本地化
- 提取小米手机的备份数据
- 程序员干累了,当个培训讲师?我亲身试水,讲讲感受
- 余弦s=Acos(wt+φ)
- excel怎么添加换行符_在Excel公式中添加换行符
- SQLServer 查询表的列名称、说明、备注、类型等
- Ubuntu下搭建第一台hadoop输入start-dfs.sh出现Permission denied (publickey,password)的问题
- 【华为OD统一考试B卷 | 200分】服务器广播、需要广播的服务器数量( C++ Java JavaScript )
- 【开发工具】SVN断网续传、续下解决办法
- 去年,蚂蚁一面的一道笔试题,中等难度
热门文章
- Lower Power with CPF(一)
- indices[0,0] = 3046 is not in [0, 2681)
- vue 如何控制组件初始与销毁_vue组件什么条件下需要摧毁?
- 了解Python 二
- 分账系统原理是什么?
- 【TypeScript入门】TypeScript入门篇——Number
- 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现
- 360移动权重 api数据接口
- HiveQL的DDL操作(二)——创建、分区、查询、修改、删除表
- Mac版魔兽争霸3 1.24e下载