【安卓学习笔记】JAVA基础Lesson6-关键字static

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值