Java面试背诵知识点总结(1)

 

1、面向对象的三大特征是什么?
答:封装、继承、多态

2、成员变量和局部变量的区别有哪些?
答:

答案一:

1.在位置上:
  成员变量 :类中方法外
  局部变量: 方法中.
2.在内存中:
  成员变量:堆中对象里
  局部变量:栈中方法里
3.生命周期:
  成员变量: 随着对象的产生而产生,随着对象的消亡而消亡
  局部变量: 随着方法的产生而产生,随着方法的消亡而消亡

答案二:

  1、从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰;

  2、从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存

  3、从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。

  4、成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

3、什么是封装?封装的好处和原则分别是什么?
答:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中读取和修改属性的访问级别。
封装的好处:

  提高了代码的复用性

  可以提高数据的安全性

  它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作

封装原则
  将不需要对外提供的内容都隐藏起来
  把属性隐藏,提供公共方法对其访问。

意义:

  防止数据被无意破坏。

如何实现:

  把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法。

封装的步骤:

  1、将需要封装的属性进行私有化,也就是使用private修饰
  2、对外提供公开的set和get方法
  3、对需要过滤的属性进行数据的过滤

4、this的作用是什么?
答:

this代表的是这个,指的是当前对象。

this关键字的用法分类:

  (1) this.
  (2)this(实际参数)

this.作用:
  this可以用来解决局部变量与成员变量重名时,访问成员变量的问题,解决:

    (1) 构造方法赋值失败问题  (2) set方法赋值失败的问题。

this(实际参数)作用:

  this(实际参数)用于本类构造方法中调用其他构造方法。

注意事项:

  (1) 构造方法之间不可以递归调用,

    (2) this()和this(参数)必须放在构造方法的第一行语句,

    (3) 一个构造方法中只能由一个this()或this(参数)语句,

    (4) this()和this(参数)只能定义在构造方法中。

 

5、什么是构造方法?
概念: 一个特殊的方法,也叫做构造器、构造函数。
特点:
  1. 方法名和类名一致(大小写必须一致)
  2. 构造方法没有返回值类型 连void 都没有
  3. 构造方法可以重载
  4. 构造方法不可以手动进行调用,只能在创建对象的时候由 jvm 自动调用
  5. 当一个类中没有定义构造方法,系统会自动为这个类提供一个无参、公开的构造方法, 但是当一旦自己定义了构造方法,这个时候,系统就不再为我们提供无参数 公开的构造方法了,在开发中一般需要将无参数的构造补写出来.
作用:
  1. 创建对象
  2. 可以实现在创建对象的同时为属性进行赋值 对于程序员比较方便

 

构造方法有哪些特性?
  1、名字与类名相同;
  2、没有返回值,但不能用void声明构造函数;
  3、生成类的对象时自动执行,无需调用。



6、创建对象步骤:
   1. 创建对象为对象分配空间
   2. 为对象的属性赋默认值
   3. 如果属性有初始值,再赋初始值
   4. 调用构造方法,如果为有参构造,会再次为属性进行赋值

 

  默认值: 属性没有进行赋值 只声明 系统赋的值叫做默认值
  初始值: 在定义属性的时候,为属性进行赋值 这个值叫做初始值
  再次赋值: 在构造方法中为属性进行赋值

 

7、引用之间的传递:

引用 :当一个对象的地址赋值给一个变量,这个变量就叫做这个对象的引用。

引用传递场景:
  1. 简单数据类型传递的数据值
  2. 引用数据类型传递的是地址值


8、创建对象的内存理解,三个初始化过程分别是什么,先后顺序?
答:

初级简化:

  1、为对象分配空间,并为属性值赋默认值
  2、为属性进行初始化,赋初始值
  3、调用构造方法并为属性再次赋值

进一步深入:

  1. 分配空间
  2. 创建父类对象
    (1) 为父类的属性赋 默认值
    (2) 为父类的属性赋初始值
    (3) 调用父类的构造方法 再次进行赋值 创建对象完毕
  3. 创建子类对象
    (1) 为子类属性赋默认值
    (2) 为子类的属性赋初始值
    (3) 调用子类的构造方法 再次进行赋值 创建子类对象
  如果存在多级继承关系的话, 2 3步重复

 

9、访问修饰符所使用的范围
(1)private 本类
(2)(默认)不写 本类+ 同包+ 同包子类
(3)protected 本类 + 同包 + 同包子类+ 不同包子类
(4)public 本类 + 同包 + 同包子类+ 不同包子类 + 不同包(没有子父类关系)

10、继承:
什么是继承:

  类与类之间满足 is a关系,这样的关系可以称为继承。子类可以去获取父类中非私有的属性和方法的使用权。
里氏代换原则:  要求必须满足 is a 关系才可以定义两个类的继承关系。

继承的好处:

  提升了代码的复用性,是多态的前提
  继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率.

注意事项:
  构造方法不可以继承

  不能去为了代码的复用去定义不符合里氏代换原则的继承关系
Java中继承的特点:
  Java是单继承的语言,只允许一个类只有一个直接父类
  Java可以多级继承,一个类在只有一个直接父类的同时可以有多个间接父类
单继承的必要性:
  可以使类和类之间的关系形成一个树状的关系,从而变得简单

语法:

关键字: extends 

语法: 

public class 子类 extends 父类{

}


10、重载和重写的异同:

答案一:
重载
  1.⽅法名相同
  2.参数列表不同
  3.和修饰符返回值类型⽆关
  4. 可以发生在 本类之间 也可以发生在子父类之间
重写
  1.⽅法名相同
  2.参数列表相同
  3.返回值类型相同
  4.访问修饰符权限子类要大于等于父类
  5. 只能发生在子父类之间

 

答案二:

1、相同点:
  方法名都是相同的


2、不同点:
(1)书写位置:
  重载:写在同一个类中
  重写:写在子父类中、或者是接口和实现类当中
(2)返回值类型:
  重载:无关
  重写:引用数据类型相容,基本数据类型相同
(3)参数列表:
  重载:不同
  重写:相同

 

 

 

posted @ 2021-04-11 22:51  泰初  阅读(177)  评论(0编辑  收藏  举报