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代表的是这个,指的是当前对象。
(1) this.
(2)this(实际参数)
this.作用:
this可以用来解决局部变量与成员变量重名时,访问成员变量的问题,解决:
(1) 构造方法赋值失败问题 (2) set方法赋值失败的问题。
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)参数列表:
重载:不同
重写:相同