Java 基础面试题(三)
-
Overload和Override的区别。
- Overriding和Overloading是Java多态性的不同表现;
- 方法重载在同一类中,方法重写在父类与子类之间,需要具有继承关系;
- 方法重载:
- 与重载方法具有相同的函数名称;
- 参数列表不同(个数不同,类型不同 或 排列顺序不同);
- 返回类型可以不同也可相同;
- 方法重写:
- 方法名必须相同;
- 参数列表必须相同;
- 由子类重写父类的方法;(重写只能重写方法,不能重写属性);
-
描述一下JVM加载class文件的原理机制?
-
装载:查找和导入class文件;JVM中类的装载是由ClassLoader和它的子类来实现的;
-
连接:
- Java ClassLoader 负责在运行时查找和装入类文件的类;
- 检查:检查载入的class文件数据的正确性;
- 准备:为类的静态变量分配存储空间;
- 解析:将符号引用转换成直接引用(这一步是可选的);
- 初始化:初始化静态变量,静态代码块。
注:这样的过程在程序调用类的静态成员的时候开始执行,所以静态方法main()才会成为一般程序的入口方法。类的构造器也会引发该动作。Java 编写的源程序(.java),编译后产生 字节码文件(.class) 。
-
-
char型变量中能不能存贮一个中文汉字?为什么?
- 可以存贮一个中文汉字;
- java中以unicode编码,一个char占16个位;
-
抽象类(abstract class)和接口(interface)的区别
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 接口没有构造方法。抽象类中有构造方法;
- 接口不能包含初始化快。抽象类中能包含初始化快;
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块,从java8以后就可以在接口中使用静态方法(用 static 修饰的方法,格式:public static 返回值类型 方法名称(参数列表){方法体}),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
-
Static Nested Class 和 Inner Class的不同?
注:内部类:成员内部类,局部内部类,静态内部类,匿名内部类
- Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
- 通常的内部类需要在外部类实例化后才能实例化。
-
abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不可以。
- 抽象 的方法出现在接口中,它是需要类去实现的,具体的实现类可以native和synchronized,但是对于抽象方法来说没有意义。static方法不能被覆盖,而抽象方法就是要在实现类中覆盖它,所以也没有意义。
- 抽象方法需要重载,static修饰的是静态的类方法,不需要进行重载。抽象是没有实现的方法,而native是本地实现的方法。抽象不可能实际调用,也没有必要用synchronized修饰。
-
静态变量和实例变量的区别?
- 语法角度来看,静态变量前要加static关键字,而实例变量前不加;
- 静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。
- 静态变量可通过类名直接访问,实例变量只能通过对象才能访问到它;
-
GC是什么? 为什么要有GC?
- GC是垃圾收集的意思(Gabage Collection);
- 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃;
- Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的;
- Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
- 要请求垃圾收集,可以调用下面的方法之一:
System.gc()
或Runtime.getRuntime().gc()
。
-
String s=new String(“xyz”);创建了几个String Object?
- 两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。
-
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
-
接口是可以被接口继承的,即通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和常量都是public,子接口将继承父接口中的全部方法和常量。
-
抽象类可以实现接口,当一个类声明实现一个接口而没有实现接口中所有的方法,那么这个必须是抽象类,即abstract类。
-
抽象类是可以继承实体类。抽象类中可以有静态的main方法。抽象类与普通类的唯一区别就是不能创建实例对象并且抽象类允许有abstract方法。
-