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高频面试题(面向对象)相关推荐

  1. Java高频面试题(四)

    Java高频面试题四 六. 框架部分 6.1.什么是框架? 6.2 .MVC模式 6.3. MVC框架 6.4. 简单讲一下struts2的执行流程? 6.5. Struts2中的拦截器,你都用它干什 ...

  2. 【Java】Java 高频面试题英语版(1)

      今天分享 Java 高频面试题英语版.音频文件放在下方,点击获取. [Java]Java 高频面试题英语版(1) [Java]Java 高频面试题英语版(2) [Java]Java 高频面试题英语 ...

  3. Java高频面试题汇总(2022)

    Java 1. ArrayList和LinkedList的区别 Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的. Array获取数据的时间复杂度是O(1 ...

  4. 100道Java高频面试题(阿里面试官整理)

    我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...

  5. java高频面试题(2023最新)

    目录 一.java基础 1.八大基础类型 2.java三大特性 3.重载和重写的区别 4.pubilc.protected.(dafault)不写.private修饰符的作用范围 5.==和equal ...

  6. Java高频面试题解析,直戳面试官痛点,多家互联网大厂Offer等你拿

    前言 回顾多灾多难的2021年,新冠疫情持续肆虐全球,疫情确诊曲线起伏跌宕,由此引发一系列事件:经济萎缩. 财政刺激.疫苗研发.经济复苏等等.无不牵动着市场的神经."后疫情时代"将 ...

  7. 5年大厂Java高频面试题及答案整理(二)

    31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象. ...

  8. 5年大厂Java高频面试题及答案整理

    1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建新类. 封装:将数据隐藏起来,对数据的访问只能通过特定接口. 多态性:不同子类型对象对相同消息作出不同响应 ...

  9. Java高频面试题总结

    本文目录: Java的特点 Java 与 C++ 的区别 面向对象和面向过程的区别? JKD和JRE的区别? 面向对象有哪些特性? Java的基本数据类型有哪些? 什么是值传递和引用传递? 自动装箱和 ...

最新文章

  1. 论文浅尝 | Dynamic Weighted Majority for Incremental Learning
  2. canvas笔记-文本水平垂直对齐与度量
  3. 多分类f1分数_机器学习之分类模型评估总结
  4. openlayers属性数据mysql_OpenLayers学习笔记8——使用servlet从mysql获取数据并标注
  5. html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门
  6. docker基础学习中遇到的一些问题
  7. 分布式监控系统开发【day37】:填充表配置项目(三)
  8. SpringBoot 的错误处理机制
  9. 《CRAFT:Character Region Awareness for Text Detection》论文笔记
  10. TypeScript 类型兼容性整理
  11. ABP理论学习之本地化
  12. 提取小米手机的备份数据
  13. 程序员干累了,当个培训讲师?我亲身试水,讲讲感受
  14. 余弦s=Acos(wt+φ)
  15. excel怎么添加换行符_在Excel公式中添加换行符
  16. SQLServer 查询表的列名称、说明、备注、类型等
  17. Ubuntu下搭建第一台hadoop输入start-dfs.sh出现Permission denied (publickey,password)的问题
  18. 【华为OD统一考试B卷 | 200分】服务器广播、需要广播的服务器数量( C++ Java JavaScript )
  19. 【开发工具】SVN断网续传、续下解决办法
  20. 去年,蚂蚁一面的一道笔试题,中等难度

热门文章

  1. Lower Power with CPF(一)
  2. indices[0,0] = 3046 is not in [0, 2681)
  3. vue 如何控制组件初始与销毁_vue组件什么条件下需要摧毁?
  4. 了解Python 二
  5. 分账系统原理是什么?
  6. 【TypeScript入门】TypeScript入门篇——Number
  7. 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现
  8. 360移动权重 api数据接口
  9. HiveQL的DDL操作(二)——创建、分区、查询、修改、删除表
  10. Mac版魔兽争霸3 1.24e下载