[toc]
基础面试题
1、面向对象三大特征
继承、封装、多态
继承:子类继承父类过程,可以继承方法和成员变量,也可以对其进行方法重写
封装:万物皆对象,对象有属性
多态:父类引用指向子类对象,前提满足继承和重写
List lists = new ArrayList<>();
2、不能做 switch() 的参数类型是
在 switch(expression)中,expression 只能是整数表达式或者枚举常量,整数表达式可以是 int 类型,Integer 包装类型。由于 byte,short,char 都是可以隐式转换为int类型,所以这些也可以作为表达式。
另外,在 JDK1.7 以后,String 类型也可以作为表达式
原理参考:DK 1.7新特性switch
那为什么支持 String 都不支持 long 呢?String 可以通过ASCII 码形式转换为整数,但是 long 型的范围大于 int 型,不支持隐式转换
详细解释:Java中的 Switch 是如何支持 String 的
3、static 有什么用途
static 可以修饰变量和方法,修饰后称为 “全局”、“静态”
static 变量
JVM 在加载类过程就完成对静态变量的内存分配
静态代码块和静态方法
静态方法是需要被调用执行,静态代码块是自动执行的。
静态方法和静态代码块都可以定义多个,不同的是,静态代码块只在第一次new时执行一次,非静态代码块每次new都执行,普通代码块可以在普通方法执行,静态代码块不可以。
在继承中执行顺序是:父类静态内容 -> 子类静态内容-> 父类非静态代码块-> 父类构造方法-> 子类非静态代码块-> 子类构造方法
静态内部类
实际很少用,写一下测试类会用到
- 静态导包
import static java.lang.System.out;
public class Demo {
static{
out.println("hello");
}
static{
out.println("hi!");
}
}
原理参考:static的作用是什么
4、引用与指针有什么区别
Java 的引用和 C++ 的指针都是指向一块内存地址,通过引用或指针来完成对内存数据的操作。
- 类型:引用的值为地址的数据元素,java封装了地址,转换为字符串,指针是一个变量,一般都是int
- 所占内存:引用没有实体,不占内存,指针要赋值,会占
- 内存泄露:引用不会产生内存泄露,指针会哦!