static是个修饰词,表示静态
类变量也叫静态变量,也就是在变量前加了static 的变量;
实例变量也叫对象变量,即没加static 的变量;
区别在于:
类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
例:
public class A{
static int a = 0; //类变量
private int b = 0; //实力变量
}
public class B{
public void main (String[] args){
A a1 = new A();
A a2 = new A();
a1.a = 3; // 等同于 A.a = 3;
a1.b = 4 ;
System.out.println(a2.a); //结果为3
//类变量是针对所有对象的,所以a1改变a,a2的a也改变
System.out.println(a2.b); //结果为0
//实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量
}
}
静态的域(数据成员)、静态的方法都是属于类一级的。
什么是类呢?把一些对象共有特征(属性或者数据成员)和行为(方法)抽象归纳起来,定义一下,取个名字,这就是类的基本含义了。既然是所有这一类对象共有东东,为什么非要创建对象才能调用了,麻烦哦,于是JAVA直接用(类名.方法)、(类名.数据成员)的形式就可以调用。也就是大家常说的,静态域相当于C语言的全局变量.既然加了static的变量是类一级数据成员,有什么理由放在一个方法里面。方法里面的应该是局部的只有本方法才会用的,在方法里面声明一个类一级的数据成员有何意义了,相反,对以后代码的查错和再读都不利。所以JAVA不允许这样做
要提醒一下,不仅静成方法中不能声明静态数据成员,就算不是静态方法,其中照样不能声明静态数据成员。道理是一样的
public 提供了最高访问权限,所有类都可访问它
static 标示为此类公共的字段
比如:
public class AA {
public static int anumber;
public static void main(String[] args) {
AA a=new AA();
a.anumber++;
AA b=new AA();
b.anumber++;
AA.anumber++;
System.out.println(a.anumber);
System.out.println(b.anumber);
System.out.println(AA.anumber);
}
}
程序最后打印出来的都是3………………
静态类也就是在别的地方不能使用,不能在别的方法,类中用,除非这个方法也是个静态方法,当然了,作用其实挺多的,静态类必须有初值,这是限制,也就是必有值,有一些个别问题中就是需要用到
域定义在类中,其作用范围是整个类,而局部变量定义在方法的参数列表、方法块或、方法体中,在方法的参数列表或方法体中定义的局部变量,有效作用范围是整个方法;在语句块中定义的局部变量,有效作用范围仅仅是该语句块。所以静态域不可能声明在方法(不管是不是静态方法)中。
访问静态域时,既可以使用类名作前缀,也可以使用对象名作前缀。类以及该类的任何一个对象都可以修改它。
静态域分配的存储空间不会变,保存在类的内存区域的公共存储单元。而且static会在装载的时候初始化,而不是每次创建新对象时都初始化。(只初始化一次)