关键字static用来区分成员变量、成员方法、内部类、初始化块是属于类还是对象的,有static修饰的成员属于类,否则属于对象。static关键字不能用来修饰方法中的局部变量。
1.类成员变量和对象成员变量
- 类成员变量描述了该类的所有对象的共同特征。
- 类成员变量相当于全局变量,为所有对象共享。
- 可以直接通过 类.成员变量名 访问
- 对象成员变量描述的是每个对象的独有特征。
- 对象成员变量在堆内存中分配空间。
- 在创建类对象后才能使用 对象名.成员变量 访问
2.类方法和对象方法
- 类方法指有static修饰的成员方法
- 可以通过 类名.方法名() 直接调用
- 对象方法指没有用static修饰的方法,需要先创建该类的对象后再通过 对象名.方法名() 进行调用
3.静态语句块和非静态语句块
- 静态语句块指有在类体中,方法外定义的有static修饰的语句块
- 非静态语句块指在类体中,方法外定义的语句块。
4.此方法分别定义类变量、对象变量、类方法、对象方法,在main方法中演示如何调用
public class StaticTest1 {
static String mystring = "hello";//定义了一个类变量,字符串hello
int a=10;//定义一个对象变量a
//类方法
static void stacticMethod() {
System.out.println("this is static method!");
}
//对象方法
void nostaticMethod() {
System.out.println("this is no static method!");
}
//主方法,程序入口
public static void main(String[] args) {
// TODO Auto-generated method stub
//访问类方法
StaticTest1.stacticMethod();//通过 类名.方法名 直接调用
//访问对象方法
StaticTest1 b=new StaticTest1();//先实例化一个对象
b.nostaticMethod();//通过 对象名.方法名 间接调用
//访问类属性
System.out.println(StaticTest1.mystring);//通过 类名.变量名 直接访问
//访问对象属性
StaticTest1 se=new StaticTest1();//实例化一个对象
System.out.println(se.a);//通过 对象.对象名 间接访问
}
}