
本文共 2023 字,大约阅读时间需要 6 分钟。
static关键字在JAV中的主要用处 1.定义静态成员变量 2.定义静态函数 3.定义静态代码块/**************************************************华丽分割线***********************************************************/
1.静态变量静态变量和非静态变量在定义上区别是静态变量前面加了个static关键字;
静态成员变量除了用类名调用之外也可以直接用类名来调用;
静态变量和非静态变量的区别是:静态变量不在是属于对象型的变量,而是属于这个类的变量。
也就是说只要是同一个类的静态变量,所有属于该类的对象都共用这个静态变量。那么既然是共用的,当然是不论以类名调用变量或者对象调用静态变量,只要是该静态变量的值有改变,任何该类的其他对象所对应的这个静态变量也会跟着改变。其实这个静态变量就只有一个,并不是每个对象都有一个。
例如一下的测试代码:
在文件Lesson6.java中编写如下:
class Lesson6{
int i;/*非静态成员变量*/
static int j;/*静态成员变量*/}
在文件Test.java中编写如下代码:
class Test{ public static void main(String args []){ Lesson6 A = new Lesson6(); Lesson6 B = new Lesson6(); A.i = 1; B.i = 2; System.out.println("The i of A is " + A.i); System.out.println("The i of A is " + B.i); Lesson6.j = 3; System.out.println("The j of A is " + A.j); System.out.println("The j of A is " + B.j); }}
编译后测试的输出结果如下:
D:\Android\src>javac Lesson6.java D:\Android\src>javac Test.java D:\Android\src>java Test The i of A is 1 The i of A is 2 The j of A is 3 The j of A is 3 D:\Android\src>从输出结果可以看出,非静态变量i是每个对象都独立的,也就是针对对象的,不同的对象有独立的非静态变量i;
而静态变量j是公共的,也就是针对对象的。
2.静态函数
class Lesson6{ void fun1(){ } static void fun2(){ System.out.println("I am a static fun!"); }}
同样的:
静态函数在定义上也是在函数名前面加上关键字static
静态函数也是可以用类名直接来调用的
如:
class Test{ public static void main(String args []){ Lesson6.fun2(); }}
静态函数在使用的过程中不能使用非静态成员变量;
这个问题官方没有给太多的解释;大家可以讲师的说法可以这么反推:
先是假设如下代码可行:
class Lesson6{ int a; static void fun2(){ System.out.println("a = " + a); }}
在主函数中使用如下代码来调用:
Lesson6.fun2();
这就会存在一个矛盾,回到之前的笔记,可以找到this的用法
System.out.println("a = " + a);System.out.println("a = " + this.a);
上述的两行代码其实在非静态变量中功能和结果是一样的。原因就是使用的是对象调用的这个函数里面的this就是代表着调用这个函数的对象。
而静态函数是可以直接用类名来调用的,所以这样调用就肯定有问题啦,既然使用的是非静态的变量,那么这个非静态变量究竟归属于哪个对象?因为一个类可以生成很多个对
象啊。所以这个用法自然是不成立的,但是如果这里用的是静态的成员变量,那就说的通了。
3.静态代码块
静态代码块的写法如下:
class Lesson6{ static{ System.out.println("static code block"); }}
首先可以看到这个代码块并没有函数名,没有函数名怎么去使用它?在正常的机制当中,作为一个类,要去执行他需要经过两个步骤:
1.先把这个类装载到内存当中
2.然后再调用执行
其实这个静态代码块是在装载的时候经执行了
By Urien 2017年8月27日 16:49:29
发表评论
最新留言
关于作者
