1.变量:
变量可分为实例变量和静态变量:
区别:
1. 静态变量是属于类的,实例变量是属于对象的。
2. 类和对象均可修改静态变量;只有对象可以修改实例变量。
3. 每个实例变量都会给出相应的存储空间。静态变量存储空间只有一份。
2.方法
方法可分为实例方法和静态方法:
区别:
1. 实例方法可以访问静态变量,静态方法不能访问实例变量。
2. 实例方法可以访问静态方法,静态方法不能访问实例方法。
3. 实例方法可以使用this关键字,静态方法不能使用this关键字。
4. 对象可以访问实例方法和静态方法,类只能访问静态方法。
3.类
只有内部类可以用static修饰,即只存在静态内部类,不存在静态外部类。(外部类只能由public,abstract和final修饰,其中abstract和final不能同时出现)
静态内部类不代表成员全部是静态的。
4.接口
只有内部接口可以用static修饰,即只存在静态接口,不存在静态外部接口。 (外部接口只能由public ,abstract修饰)
测试例子:
public class Test {
private int a; /*实例变量*/
private static int b; /*静态变量*/
/**
* 静态方法
*/
public static void methodA() {
System.out.println("static method");
// int t = a; 编译错误,静态方法不能访问实例变量
// methodB(); 编译错误,静态方法不能访问实例方法
int t = b; /* 静态方法可以访问静态变量 */
methodB(); /* 静态方法可以访问静态方法 */
// t = this.a; /* 编译错误,静态方法不能使用this关键字 */
}
/**
* 静态方法
*/
public static void methodB() {}
/**
* 实例方法
*/
public void methodC() {
System.out.println("instance method");
int t = a; /* 实例方法可以访问实例变量 */
t = b; /* 实例方法可以访问静态变量 */
methodA(); /* 实例方法可以访问静态方法 */
methodD(); /* 实例方法可以访问实例方法 */
t = this.a; /* 实例方法可以使用this关键字 */
}
/**
* 实例方法
*/
public void methodD() {}
/**
* 静态内部类
*/
static class A {
}
/**
* 静态内部接口
*/
static interface B {
}
/**
* 静态main方法
* @param args
*/
public static void main(String args[]) {
Test instance = new Test(); /* 实例 */
/* 类和实例均可以访问静态变量 */
int a = Test.b;
a = instance.b;
/* 只有对象可以访问实例变量 */
a = instance.a;
// a = Test.a; 编译错误 ,类不能访问实例变量
Test.methodA(); /* 类可以访问静态变量 */
// Test.methodC(); 编译错误,类不可以访问实例方法
instance.methodA(); /* 实例可以访问静态方法 */
instance.methodC(); /* 实例可以访问静态方法 */
}
}