1、基本数据类型
基本数据类型包括整形、浮点型、字符型、布尔型,其中布尔型占1个字节.
可能问到的问题:
1、switch(expr)的表达式中可以是哪种基本数据类型
switch(expr)中,expr可以是char、byte、short、int等类型。同时expr还可以是enum(枚举类型)及String(字符串)。
2、基本数据类型转换
小转大,自动!自动类型转换(也叫隐式类型转换)
大转小,强转!强制类型转换(也叫显式类型转换)
byte,short,char → int → long → float → double
byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。
这里的小和大,指的是基本数据类型的范围大小。
2、访问修饰符及关键字
可能问到的问题:
1、final finally finalize区别
final:可以修饰类、变量、方法;修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量,不能被重新赋值。
finally:一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
finalize:属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾。
2、this用法、super用法及他们之间的区别
**this用法:**指向当前对象
在构造函数中,形参与成员名字重名,用this来区分;
引用本类的构造函数,如:this(name);
**super用法:**指向当前对象的父类引用
一般用于在子类构造器中调用父类构造器,super(参数)
区别:
1、super()在子类中调用父类的构造方法,this()在本类内调用本类的其它构造方法。
2、this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,编译不通过。
3、this()和super()都指的是对象,所以,均不可以在static环境中使用。(共同点)
3、static关键字的应用场景
创建独立于具体对象的域变量或者方法。其次,用来形成静态代码块以优化程序性能。
修饰成员变量 、修饰成员方法、静态代码块、修饰内部类(静态内部类)、静态导包
3、 面向对象
1、面向对象的特征?描述一下。
**继承:**使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类(继承即继承所有)。继承是多态的前提。
**封装:**隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
**多态性:**父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
多态机制:一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
**多态的实现:**继承、重写、向上转型。
2、面向对象五大基本原则是什么?
单一职责原则:顾名思义。
开放封闭原则:对于拓展是开放的,对于修改是封闭的。
里式替换原则:子类可以替换父类出现的位置。
依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
接口分离原则:尽可能多的创建接口,让接口也具备单一职责。
3、抽象类和接口的异同
同:
- 接口和抽象类都不能实例化
- 都位于继承的顶端,用于被其他实现或继承
- 都包含抽象方法
异:
-
声明方式和实现不同(abstract,interface)&&(extends、implements)
-
抽象类可以有构造器
-
抽象类中的方法可以是任意访问修饰符,接口(public 、static、final默认)
-
一个类只能继承一个抽象类,但可以实现多个接口
两者的选择?
- 行为模型,优先选用接口。
- 需要定义子类的行为,又要为子类提供通用的功能,则选用抽象类
4、描述四种内部类
- 静态内部类:可以访问外部类所有的静态变量,new Outer.StaticInner();
- 成员内部类:成员内部类可以访问外部类所有的变量和方法,包括静态和非静态,私有和公有。
Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); - 局部内部类:定义在实例方法中,可以访问外部类的所有变量和方法,定义在静态方法中的局部类只能访问外部类的静态变量和方法。在对应方法内,
new 内部类() - 匿名内部类:没有名字的内部类,匿名内部类必须继承一个抽象类或者实现一个接口。
内部类的优点:
- 一个内部类对象可以访问创建它的外部类对象的内容,包括私有数据!
- 内部类不为同一包的其他类所见,具有很好的封装性;
- 内部类有效实现了“多重继承”,优化 java 单继承的缺陷。
局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?
- 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。
5、重写和重载的区别
- 方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载:发生在同一个类中的两个方法中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同)
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则)