1.什么是构造方法?
- 构造方法名与类名相同
- 没有返回值,且不能用void声明构造方法
- 创建对象时,使用new 关键字调用执行(显式调用)
2.构造方法的作用是什么?
主要作用是完成创建对象的初始化工作;
一个类即使没有生命构造方法,java也会提供默认的无参构造;
如果我们为类提供了构造方法,那么默认的无参构造就会消失;
3.什么是多态?
顾名思义,表示一个对象的多种状态。具体表现为父类的引用指向子类的实例。
多态的特点:不能通过父类去调用只在子类中存在而不在父类中存在的方法;对象类型和引用类型之间必须具有继承或实现关系;在多态中,如果子类重写了父类的方法,那么真正执行的是子类重写过后的方法,如果没有重写执行的是父类的。
4.什么是重载与重写?
重写:子类对父类的内部逻辑进行重新构造,外部不发生不变化
- 重写发生在运行期
- 重写必须发生在子父类之间
- 返回值类型、方法名、参数列表与父类一致,抛出的异常小于等于父类,访问权限修饰符大于等于父类
- 如果父类方法被private/final/static修饰,那么子类不能重写父类的此方法
重载:同一个类中,多个同名方法根据不同的传参,执行不同的逻辑处理
- 重载发生在编译期
- 重载发生在同一个类中
- 方法名相同、方法的参数列表不同(类型不同、顺序不同、个数不同),与方法的返回值无关
- 构造方法可以被重
5.成员变量和局部变量的区别?
(1)成员变量是属于类的,而局部变量是在代码块中或方法中定义的或是方法的参数。
(2)成员变量可以被public,private,static等修饰符修饰,而局部变量要是被控制符或static修饰是不能被访问的;但是两者都能被final修饰
(3)如果成员变量被static修饰,那就是属于类的;如果没有被修饰就属于对象的。对象存在于堆内存中,局部变量存在于栈内存中
(4)成员变量是对象的一部分,它随着对象的创建而存在;而局部变量会随着方法的调用而消失
(5)成员变量如果没有被赋值,则会自动以类型默认的值而赋值,但局部变量不会自己赋值
6.抽象类和接口有什么区别?
(1)抽象类被static定义,接口使用interface定义
(2)实现抽象类使用extends继承,实现接口用implements
(3)抽象类中可以有抽象方法和非抽象方法,而接口中只有抽象方法
(4)抽象类中有main方法,接口中没有
(5)一个类只能继承一个抽象类,但是可以实现多个接口
(6)抽象类中可以有构造方法,接口中不允许
(7)接口中的方法只能使用public修饰,但抽象类中的方法没有限制
7.什么是数组?
(1)数组是一种引用类型数据,用于保存一组相同数据类型的数据,长度固定
(2)使用连续的内存空间存储,所以元素有序,遍历速度很快
(3)下标从0开始,最后一个length-1;超出会报出ArrayindexOutOfBoundsException异常
8.static关键字的用法
(1)修饰成员变量和成员方法:被static修饰的成员变量属于静态成员变量;被static修饰的成员方法属于静态方法,可以被类中的所有对象共享,通过类名或者对象名调用
(2)静态代码块定义在类中,执行顺序是静态属性、静态代码块、实例属性、非静态代码块、构造方法;不管创建多少个对象,静态代码块只执行一次
9.静态方法和实例方法的区别
(1)静态方法属于类本身,实例方法属于类的某个对象实例
(2)在调用静态方法时,使用类名.方法名或者对象名.方法名;在调用实例方法时,使用对象名.方法名。也就是说调用静态方法无需创建对象
(3)静态方法在访问本类成员时,只能访问静态成员,不允许访问实例成员变量和实例方法;而实例方法没有限制