java基础面试总结

164 阅读9分钟

java初级开发--->基础面试总结

什么是面向对象?

就是把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象就是对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。
​
就是把数据和数据的操作方法放到一块,作为一个相互依赖的整体,对相同的对象抽象出共性,形成类,类中的大多数据,只能用本类的方法进行处理。
​
特点:封装,继承,多态
优势:适合用于大型复杂系统,方便复用
劣势:比较抽象,性能比面向对象过程低
总体来说:易维护,易复用,易扩展,由于面向对象的封装,继承,多态的特性,可以设计出低耦合的系统,使系统更加灵活,更加易于维护。

类与对象的主要区别

对象:对象是类的一个实例,有状态有行为   例如:一条狗它也是对象,有毛色,有名字,有品种,行为:会叫,会吃,会摇尾巴。
类:类是一个模板,它描述一类对象的行为和状态

面向对象三大主要特征

把对象的属性和行为看成一个密不可分的整体,将它们封装在一个不可分割的独立对象中,也可以把信息隐藏起来,不让外界知道,有些对象的属性及行为允许外界用户知道或使用,但是不允许更改,而另一些属性和行为,则不许外界知道,只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。

封装的优点

  • 良好的封装能减少耦合,高内聚,低耦合
  • 类内部的结构可以自由修改
  • 可以对成员变量进行更精确的控制
  • 隐藏信息实现细节

封装的使用细节

  1. 一般使用private访问权限 噗日吴特
  2. 提供相应的 get set 方法来访问属性,这些方法通常用public修饰的。以提供对象属性的赋值与读取操作。
  3. 一些只用于本类的辅助方法,可以使用private修饰,希望其他调用的方法用public修饰

继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

但是需要注意的是java不支持多继承,但支持多重继承

继承可以提高代码的复用性,提高代码的维护性,使得类和类产生了关系。

继承的特性

  1. 子类拥有了父类非private的属性和方法
  2. 子类可以拥有自己的属性和方法,子类可以对父类进行扩展
  3. 子类可以用自己的方式实现父类的方法,重写父类的方法
  4. java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是 A继承B,B继承C
  5. 继承可以使用Extends (伊克斯蛋此)和implements(en噗门此)这俩个关键字,而且所有的类默认继承Object
  6. 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

多态

多态是同一个行为具有多个不同表现形式或者形态的能力

多态它有两种表现形式

第一种:方法的多态性:重载与覆写

重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能。

覆写:同一个方法,根据操作的子类不同,所完成的功能也不同

第二种:对象的多态:父类对象的转换

向上转型:父类 父类对象 = 子类实例; 自动转型

向下转型: 子类 子类对象 = (子类)父类实例 强制转型

多态的优点

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

多态存在的必要条件 继承 重写 父类引用指向子类对象

数据类型内存默认值
byte8位

@Configuration 标识当前类是配置类 @ComponentScan 包扫描注解 扫描注解 @Bean 标识该方法的返回值交给Spring容器管理 @Scope 控制多例和单例 @Lazy 懒加载 @PostConstruct 初始化方法 @PreDestroy 销毁方法 @Component 将当前类未来的对象交给容器管理 @Autowired 按照类型进行注入 @Qualifier 按照名称进行注入

注解

集合

多线程

反射

IO流

基本类型

字节型byte,短整型short,整数型int,长整型long 分别占用 1字节 2 字节 4字节 8字节 默认值 0,0,0,0L

单精度浮点型 float(父老特) 4字节 0.0f 双精度浮点型 double 8字节 0.0D

字符型 char 2字节 ‘\u0000’

布尔型 boolean 1字节 false

访问修饰符

private (噗如爱特):在同一个类内可见 使用对象:变量,方法 不能修饰类(外部类)

default(低fao特):在同包下可见,不使用任何修饰符。使用:类,方法,变量,接口

protected(噗而插可特a特):对同一包内的类和所有子类可见,使用:变量,方法

public(帕布雷克):对所有类可见 使用:类,方法,变量,接口

运算符

&和&& 的区别

&运算符有俩种用法:按位与,逻辑与

&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端

的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表

达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

final 有什么用?

用于修饰类、属性和方法;

  • 被fifinal修饰的类不可以被继承
  • 被fifinal修饰的方法不可以被重写
  • 被fifinal修饰的变量不可以被改变,被fifinal修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的

final finally finalize区别

final : 可以修饰类,变量,方法,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量表示该变量是一个常量不能被重新赋值

fifinally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法

fifinally代码块 中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代

码。

fifinalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾

回收器来调 用,当我们调用System.gc() 方法的时候,由垃圾回收器调用fifinalize(),回收垃圾,一

个对象是否可回收的 最后判断。

this和super关键字

1、this关键字代表当前对象

2、super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

this与super对比

  • this.属性 操作当前对象的属性
  • this.方法 调用当前对象的方法
  • 引用构造函数:调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
  • 普通的直接引用:与this类似,super相当于是指向当前对象的父类,这样就可以用super.xxx来引用父类的成员。
  • 子类中的成员变量或方法与父类中的成员变量或方法名同名时,表示调用父类的成员
  • 引用构造函数:调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。默认在构造函数第一条语句是“super();”,无论写与否。
  • super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
  • this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
  • 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐地调用 super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
  • super() 和 this() 类似,区别是,super() 从子类中调用父类的构造方法,this() 在同一类内调用其它方法。
  • super() 和 this() 均需放在构造方法内第一行。
  • 尽管可以用this调用一个构造器,但却不能调用两个。
  • this 和 super 不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必
  • 也会有 super 语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  • this() 和 super() 都指的是对象,所以,均不可以在 static 环境中使用。包括:static 变量,static 方法,static 语句块。
  • 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关键字。