如果成员变量用static 修饰,则该变量称为静态变量或者类变量( class variable),否则称为实例变量(instance variable).

        如果成员方法用static 修饰,则该方法称为静态方法或者类方法(class method),否则称为实例方法(instance method)

一.静态变量

静态变量与实例变量的区别:

1.实例变量:在Java创建类的对象时,系统为每个对象的实例变量都分配一个内存,然后可以通过该对象来访问该实例变量。不同对象的实例变量占用不同的存储空间,因此它们不同

2.静态变量:Java运行时,系统在类的装载时为每个类的每个静态变量分配一块内存,以后再生成该类的对象时,这些对象将共享同名的静态变量,且每个对象对静态变量的改变会影响到其他的对象。

package demo;

public class Welcome{
	//main方法
	public static void main(String[] args)
	{
		Teacher teacher01 = new Teacher ();
		teacher01.x =1;
		teacher01.y =2;
		Teacher teacher02 = new Teacher();
		teacher02.x =3;
		teacher02.y =4;
		System.out.println("teacher01.x is " + teacher01.x +"  "  +
				"teacher01.y is " + teacher01.y + "  " + "teacher02.x is " + teacher02.x + "  " +
				"teacher02.y is " + teacher02.y );
	}
	
}
class Teacher{
	public static int x;
	int y;
}

仔细看看代码结果,你想到了吗?

JAVA 静态变量的命名 java静态变量怎么用_学习

就是说,在任何时刻,不论有多少个Teacher 类的对象,只有一个x,

        当然啦,我们可以通过类名来直接调用静态变量,但是这种方法可能会产生混乱的代码,不推荐通过类名来访问静态变量

package demo;

public class Welcome{
	//main方法
	public static void main(String[] args)
	{
		Teacher teacher01 = new Teacher ();
		teacher01.x =1;
		teacher01.y =2;
		Teacher teacher02 = new Teacher();
		Teacher.x =5;
		teacher02.y =4;
		System.out.println("teacher01.x is " + teacher01.x +"  "  +
				"teacher01.y is " + teacher01.y + "  " + "teacher02.x is " + teacher02.x + "  " +
				"teacher02.y is " + teacher02.y );
	}
	
}
class Teacher{
	public static int x;
	int y;
}

这样的话,

JAVA 静态变量的命名 java静态变量怎么用_开发语言_02

        通常,static 与 final 一起来定义类常量。

        例如,在java 类库中的 Math 类就定义了两个类常量:

public static final double E  = 2.718281828459045;        //自然对数的底

public static final double PI = 3.141592653589793;        //圆周率

        我们可以通过类名来直接使用这些常量。

例如 你想输出半径为10的圆的面积:

System.out.println("面积为 " + Math.PI*10*10);

        java 的类库System 类也定义了三个静态变量,分别是in,out,err,分别表示 标准输入设备(通常是键盘),标准输出设备(通常是显示器),标准错误输出设备.

二.静态方法

静态方法与实例方法的区别:

1.静态方法属于类,只能访问静态变量;静态方法通常用类名调用,也可以用创建类的对象来调用(静态方法与实例方法之间调用有要求,请看我的其他文章);静态方法中不能使用this 和 super 关键字

2.实例方法可以对当前的实例变量进行操作,也可以对静态变量进行操作;实例方法必须通过实例来调用

package demo;

public class Welcome{
	public static void print() {
		System.out.println("Hello world!");
	}
	//main方法
	public static void main(String[] args)
	{
		Welcome.print();
		Teacher.print01();
	}
	
}
class Teacher{
	public static void print01() {
		System.out.println("Hello ni hao !");
	}
}

注意这两个静态方法,一个在main方法的同类里面,一个在另一个类里面,但是它们都可以通过类名进行调用。

由于可以通过类名来直接访问静态变量,所以访问静态变量之前可以不用对它进行实例化,作为应用程序执行入口点的main方法,必须用static 来修饰,也是因为Java程序在运行时,系统在开始执行程序前没有生成类的一个实例,因此必须通过类名来调用main() 方法开始执行程序

最后,再进行总结一下:

        实例方法可以调用实例方法与静态方法,访问实例变量与静态变量

        静态方法不可以调用实例方法,不能访问实例变量,只可以调用静态方法,访问静态变量