1.静态变量(static)与实例变量(非static)
- 在语法定义上,静态变量前面要加static关键字,而实例变量前则不用加。
- 在程序运行时,实例变量属于某个对象的属性,必须先通过创建类的对象来分配存储空间,再使用“对象.属性”进行调用,且该实例变量是与当前具体对象所绑定的。静态变量不属于某个实例对象,而是属于类的,所以也可以称之为类变量,只要程序运行,不用创建任何实例化对象,静态变量就会被分配存储空间,就可以使用“类名.属性”进行调用。
package com.ashley.staticfield;
public class Test {
public static void main(String[] args) {//程序入口
System.out.println(StaticFiledClass.age);//输出静态变量,结果为0
NonStaticFiledClass n1 = new NonStaticFiledClass();//创建类的对象n1
System.out.println(n1.getAge());//输出实例变量,结果为0
NonStaticFiledClass n2 = new NonStaticFiledClass();//创建类的对象n2
n2.setAge(12);//调用实例变量,并赋值
System.out.println(n2.getAge());//输出实例变量,结果为12
NonStaticFiledClass n3 = null;
System.out.println(n3.getAge());//没有分配内存空间,抛出空指针异常
}
}
public class NonStaticFiledClass {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class StaticFiledClass {
public static int age;
}
2.静态方法(static)与实例方法(非static)
- 在语法定义上,静态方法的权限修饰符后面加static,且只能访问类中的静态方法和静态成员;实例方法不用加,它可以访问类中的其他实例方法,但必须被实例化之后才能被静态方法访问。
- 在程序运行上,它们的区别类似于变量之间的区别,静态方法一旦执行就会分配存储空间,直接通过“类名.方法”调用,而实例方法必须先声明类的对象来分配存储空间,然后再通过“对象名.方法”调用。
package com.ashley.staticfield;
public class MethodTest {
public static void main(String[] args) {
MethodTest.Sum(12, 5);//调用静态方法
MethodTest test = new MethodTest();
test.Sum(3, 9, 16);//调用实例方法
}
public static void Sum(int a, int b) {//静态方法
int s = a + b;
System.out.println(s);
}
public void Sum(int i, int j, int m) {//实例方法
int s1 = i + j + m;
System.out.println(s1);
}
}