一、概念
static并非静态的意思,static是类的意思,有static的成员是类成员,没有static的成员属于实例成员。——static是用来修饰成员的!
static可修饰的成员包括:成员变量、方法、(不包括构造器,构造器是用来初始化对象的,new)、初始化块、内部类。(五大成员中的四个)
类变量和实例变量可以统称为成员变量**
(成员变量是在类范围内定义的变量,局部变量是在一个方法内定义的变量)
C里面的static int age = 20;是静态,是能够修饰局部变量的
但是Java里面的static不可以修饰局部变量,不是静态!static是修饰成员的! 因为Java脱胎于C,所以保留了static,但是用法不同,swift里面直接用class了。
局部变量不属于成员,因此不可以用static修饰。
static不能修饰外部类,因为外部类不属于成员。
(Java当年设计的这个static其实是错误的,但是现在很难改正了)
【小知识】class前面只能出现三个修饰符:public final | abstract class Xxx{ }
final与abstract互斥,二者只能出现一个,单独出现或者与public一起出现。
【建议】所有的类成员,都只能用类名调用!
如果遇到用对象来调用类成员的情形(虽然允许这样),建议先把对象改成类,这样更科学。
【常见考点】:
static成员不能访问非static成员,非static成员能访问static成员。
成员:成员变量、方法、初始化块、内部类
eg1:成员变量
public class 面试题1
{
int b = 20;
static int age = b;
}
调换位置就正确了!
eg2: 方法
public class 面试题1
{
public int test()
{
return 2;
}
static int age = test();
}
eg3: 内部类
public class 面试题1
{
class A
{
}
static A a = new A();
}
没有static才对!
eg4: 静态方法,使用了非静态的内部类
public class 面试题1
{
class A
{
}
public static void main(String[] args)
{
//静态方法,使用了非静态的内部类
A a = new A();
}
}
eg5:初始化块
public class 面试题1
{
int age;
static
{
age = 20;
}
}