Java面试宝典:
文中的部分例子和定义来自作者十星推荐,每个学java人都看过的
《Thinking in Java》,推荐大家看英文原版,会很大程度加深对Java的理解。另外,问题提纲的总结来自作者最近研读的机械工业出版社的《Java程序员面试笔试宝典》。文章主干,分析解释部分全部由作者手打,标明网上资料忘记出处的,希望细心人指点。
1.static的作用
static,顾名思义,静态。当类中的成员变量或方法声明为static时,无需为此类创建参照,便可对其进行操作。即,不依赖该类的实例,同时也被该类的实例所共享。下面通过两种static的使用情况进行分析:
static变量
同为成员变量,与实例变量每创建一次便为其分配一次内存不同,JVM只为static变量分配一次内存,并在加载类的过程中完成该操作。可用类名直接访问此变量或通过实例调用,前者是被推荐的,因为这样不仅强调了该变量的static属性,而且也在某种程度上使编译器更容易去进行优化。所以在对象之间有共享值或为了方便访问某种变量时一般需要使用static 变量。
static方法
对于static方法,也同时可以通过类名调用或实例调用。因此需要注意的是,static方法中不能用this或super关键字,不能直接访问此方法所在类的实例变量或实例方法,只能访问该类的静态成员变量和方法。因为实例变量和方法有特定的对象,而静态方法占据一个特定的数据区域。
举例:
Class StaticTest{
static int i = 47;
int j = 10;
}
Class Incrementable{
static void increment(){
//通过类名直接对i进行操作
StaticTest.i++;
//此处无法对j进行访问,因为其为实例变量
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2.final的作用
final,在Java中通常解释为不可变的,也就是说,final关键字是用来防止变化。一般我们在两种情况下使用:设计(design)或效率(efficiency)。下面分情况来分析final关键字的作用:
final数据——声明类中属性或变量
每种编程语言都有一种声明常量的方法,java中便是final。基本类型(Primitive Type)和引用类型(Object Reference Type)的属性在声明final后,里面存放的值都不可再改变。但有所不同的是,在基本类型中,这个值是实在的,比如100,”java”;在引用类型中存放的是地址,所以final只是使其地址不可改变,这个地址所指的对象、数组皆是可以改变的。需要注意的是,static final的基本变量命名法,全大写字母,单词之间用”_”(underscore)连接。举例:
public static final int VALUE_ONE = 9;
1
final方法
Java面试宝典



