1:什么是java中的代码块?
Java中的代码块是{}包裹起来的内容
分类:
1)局部代码块:方法定义中 作用:限定局部变量的生命周期
构造代码块:类的成员位置定义的{}
作用:在执行构造方法之前,如果存在构造代码块,先执行构造代码块,然后在执行构造方法,就是给数据进行初始化
优先级:
静态代码块----->构造代码块----->构造方法
2:继承的概念
将多个类的共性内容抽取到一个独立的类中,这个独立的的类和这多个类产生的关系叫继承
继承的好处:
可以提高代码的复用性
可以增强代码的后期维护
类鱼类的关系:继承关系是多态的前提条件
继承的特点
在类与类之中,只支持单继承不支持多继承,但是可以多层继承
注意事项:
1:子类继承父类,可以继承父类所有东西,但是父类的私有属性和方法只能在本类中访问
2:可以通过super来访问父类的构造方法
3:子类继承父类,如果子类的成员变量名称和父类的成员变量名称一致,如何访问呢?
a)先在子类的局部位置(子类的成员方法中定义变量:局部变量)找,如果存在,就使用
b)如果子类的局部位置没有,然后才在子类的成员位置找,如果存在,就使用
c)如果子类的成员位置没有,然后在父类的成员位置找,如果存在,就使用
d)如果父类的成员位置也没有,说明当前没有这个变量,就访问报错!
一句话:就近原则!
4:static关键字
1:被static修饰的成员随着类的加载而加载,优先于对象存在
2:static不能和this共存
注意事项:
1:非静态的成员方法里面可以访问静态的变量和方法,也可以访问非静态的变量和方法
2:静态只能访问静态
5:final关键字特点
1:修饰符 改类不能被继承
2:修饰成员方法 该成员方法不能重写
3:修饰变量,此时该变量是一个常量,不能在重新赋值
6:面试题:
1)final修饰基本数据类型和修饰引用数据类型 的区别?
2)final修饰的引用数据类型,当前不能在开辟堆内存(不能重新new),里面的成员变量依然可以进行赋值
3)final修饰的基本数据类型,基本数据数据值不能在改变!
7:this和super概念区别
this:代表是当前类对象的地址值引用
super:代表父类的对象的地址值引用(父类的空间标识)
成员访问的区别:
this.变量名; 访问本类的成员变量
super.变量名; 访问父类的成员变量
this.方法名() ; 访问本类成员方法
super.方法名() ;访问的父类的成员方法
this() ; 访问本类的无参构造方法
this(xxx); 访问的本类的有参构造方法
super() ;访问的是父类的无参构造方法
super(xxx) ; 访问的是父类的有参构造方法
8:final,finalize,finally的区别?
final是一个状态修饰符.最终的,无法更改的!修饰类,该类不能被继承饰成员方法,该方法不能被重写修饰变量,此时变量是一个常量;
finalize:是一个方法名,是后面jvm当前确定堆内存中对象没有更多引用的时候,来通过垃圾器来调用进行回收的方法!
finally:是关键字,是后面Java中去处理"异常"的一种格式
9:什么是多态
一个事物体现出的不同形态
前提条件:
1:必须存在继承关系,才能使用多态
2:必须存在方法重写,子类继承父类,部分功能将父类进行重写
3:必须存在父类引用指向子类对象
10:多态的成员访问特点:
1)成员变量:编译看左,运行看左!
2) 成员方法(默认都是非静态): 如果子类重写了父类的方法,编译看左,运行看右!
3) 静态方法算不上重写,和静态的都是类成员! (访问方式都是类名来调用的)
构造方法:继承是多态的前提条件,所以在使用父类引用指向子类对象:Fu fu = new Zi() ;
11:多态的好处
可以提高代码的复用性还可以提高代码的扩展性
12:override和overload的区别
方法重载:
在定义方法的时候,为了提高功能的扩展性,同一个方法名,可以使用不同的参数进行传递!
方法名相同,参数列表不同,与返回值无关!
参数列表不同:参数个数和参数类型和类型的先后顺序
方法重写:
是在继承关系中使用的;
子类继承父类,子类的功能想沿用父类的功能,同时使用自己的功能,子类出现了和父类一模一样的方法,--方法重写(覆盖/复写)
子类继承父类,如果要重写父类的功能,访问权限不能够更低,最起码跟父类的成员方法一致,要么永远public!
13:什么是抽象类以及抽象类的特点
抽象类:
将一个事物的概括性功能,不给出具体的体现,让具体子类进行重写,需要将这个功能---抽象功能 abstract,此时必须抽象类;
特点:
1)抽象类不能实例化
2)通过抽象类的子类(具体的子类)进行实例化 :抽象类名 对象名 = new 子类名() ; 抽象类多态
抽象类的子类如果是抽象类,没有意义,一定要存在具体类,否则都无法创建对象!
14:抽象abstract关键字不能和哪些关键字共存?
private static final
15:什么是接口 以及接口和抽象类的区别
接口:
体现事物的一种额外扩展功能,事物本身具备,这个事物只要实现了接口,就具备接口暴露的功能!
接口和抽象类的区别:
1)成员的区别:
抽象类:
成员变量:可以为变量,也可以为自定义常量
构造方法:有参/无参构造方法都存在,目的为了给类的成员进行初始化,分层初始化
成员方法:即可以有抽象方法,也可以有非抽象方法
接口:
成员变量:只能是常量,存在默认的隐藏的修饰符 public final static
构造方法:没有
成员方法:只能是抽象方法
2)关系的区别:
类与类:继承关系,extends-->只支持单继承,不支持多继承,可以多层继承
类与接口:实现关系,implements-->一个类继承另一个类的同时,可以实现多个接口,接口名和接口名逗号隔开
接口与接口:继承关系,extends-->支持单继承,多继承,多层继承!
3)设计理念
抽象类:继承关系,体现核心思想"is a" 的关系,类A是类B的一种或者类B是类A的一种
接口:子实现类和接口实现关系----体现核心思想 "like a"的关系,是事物的额外的扩展功能!
16:形式参数问题
方法形式参数:
具体类:调用该方法,此时实际参数需要的是当当前类的对象!
抽象类:调用该方法,此时实际参数需要的是当前抽象类的子类对象!
接口类型:调用该方法,此时实际参数需要的是接口的子实现类对象!
开发中:方法形式参数是具体类以及接口情况居多的!
17:返回值问题
方法的返回值如果是引用类型:
具体类:需要返回该具体类的对象!
抽象类:需要返回该抽象类的子类对象!
接口:需要返回接口子实现类对象!
18:什么是内部类
在Java中,在一个类中定义另一个类,在类A中,定义一个类B,将类B成为类A的内部类,类A是类B的外部类
19:成员内部类:
在外部类中,在外部类的成员方法外
特点:
可以访问外部类的成员包括私有!
直接去访问外部类的中的成员内部类的成员方法:特有方式 (成员内部类没有private以及static修饰!)
20;局部内部类:
在外部类的成员方法中定义的类
特点:
局部内部类也是可以直接访问外部类的成员变量,包括私有!
21:面试题:
局部内部类里面的成员在访问局部变量的时候,局部变量有什么要求?
JDK8以前的版本,局部内部类在访问外部类的成员方法中的局部变量的时候,此时局部变量必须加入final修饰!
原因:
局部变量的生命周期随着方法调用而存在,随着方法调用结束而消失;
外部类的成员方法调用完毕,此时这个局部变量应该释放了,但是当前这个成员方法中创建局部内部类对象
使用局部内部类对象访问它里面的成员方法,成员方法还在使用这个局部变量,所以此时这个变量为常量,显示的加入final修饰