static与非static的区别

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);
	}
}

发布了49 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ashleyjun/article/details/98869947
今日推荐