一些常用关键字的用法(一.static)

 

17:36:26   2020-04-05

  又是充实的一天,刚刚开始学习不久java的我,从面向过程的语言转变到面向对象的语言,在思想上上还是需要花费很多时间转变的。今天学习到了这几个关键字了,觉得这几个关键字很重要所以,学的时候花了有一点时间进行区分理解并且记忆,感觉理解了之后豁然开朗,打算把今天所得到的劳动成果记录一下子,说不定还会有哪个小白会和我当时一样对这些用法感觉到很头疼,希望,通过我对这些的理解,今天我可以为你解决难题。(如果我说的有什么地方的话,可以在评论区告诉我,咱们一同进步嘻嘻....)

  好了好了,言归正传。关于这块相信朋友们也在参考书上看到过有关解释的,但是肯定有一些小白看了之后还是感觉懵懵懂懂的,好的,那咱们来说一说(用我小白通俗易懂的语言说道说道,给你说一说)。那好,注意听哦,我要开始讲了咯!!!🤭

  static

都说编程与英语有关,这个单词static在英语中的意思是不动的,哈哈哈😄说到英语是不是大家的硬伤呢。这个关键字其实和我们也是老相识了,在c语言中我们也学到过它。在c语言中它在不同的位置有不同的作用,不知道在看的五湖四海朋友们知不知道呢?也许会有一些忘记的,首先要知道他从两个角度进行细分的。

  1. 从作用域的角度:静态局部变量意思就是他就初始化一次,他始终就是只对定义自己的函数可见

            全局变量他就和静态局部变量不一样,他是一直对在任   的函数均可以见

  2. 从分配内存的角度:全局变量实在静态存储中分配空间,而局部变量在栈里分配空间

  

为了和面向对象语言中的区分,我举个例子系统的说一下吧!!!

 1 #include <stdio.h>
 2 static int g_x;//这里的static指的是全局变量
 3 int g_y;
 4 int main(){
 5     static int x;//局部变量
 6     printf("g_x: %d\ng_y: %d\nx: %d",g_x,g_y,x);
 7     return 0;
 8 }
运行结果为:      g_x:0
       g_y:0
 x:0

静态变量与全局变量也一样,它们都存储在静态数据区中,因此其变量的默认值为0

刚才所说的的是c语言中的static,那我再说说说java中的,也就是面向对象语言中。

我们都知道java中”万物皆对象,万物皆可编程“,java中的static的用途就是比如说你不想创建一个对象的话,那么你就可以用它,他是再好不过的了。静态变量是被类中所有对象所共享的,而静态方法是 不可以访问类中的实例成员,也可以说不可以访问对象。另外static方法其实说白了就是没有this的方法,在他的内部是不可以访问非静态变量的(也就是说没有static的变量),他的唯一的好处就是方便再没有对象的时候使用。其实殊不知,我们学习java的第一天就要学会HelloWord!那么当时你们没有好奇吗?为什么main函数要这么写呢?写那么一大串子难道不费事吗?😱,说实话当时我就纳闷,今天的我豁然开朗,感觉世界都在笑,我明白了,因为我们每一段程序都必须从他的main函数开始的 ,但是在刚开始写的时候我们还没有创建对象呢!所里我们就必须在main入口处写了个static,他就可以替代没有对象的情况了。还是我举个例子吧!有例子才具有说服性吗!

 

 这个就是错误的,我用eclipse写的,你看他报错了,不知道大家有没有看出来呢.........hhh

 

 我只是稍稍的改动了一个位置,我把第十行代码加上个static你看他就不一样了,这样大家对static关键字有了一个更深一层此的了解了吧,你们可以回去自己到IDE上去敲一下子看一下是不是出现我这个效果了(要是没有出现或者出现了些什么小问题可以在下面留言我看到后一定会第一时间回复的,等着你们哦),要多动手。😁

下面的是自己亲自做了一些小的项目的时候遇到的问题,而后来添加上的,希望可以对你们有所帮助。

  在实际开发中的用途:

1.当一个方法需要初始化加载或者经常被调用的时候可以加上static

2.被static修饰的方法可以用类名直接调用,不用实例化一个对象后才调用

3.比如person这个类里面有一个方法,public static add(){}  那么可以使用person.add();来调用,当然也可以创建对象调用  比如:person p = new person();   p.add();调用类加载器在加载这个类的时候就已经实例化了。  这个类的坏处就是:初始化加载比较占内存,所以不经常用的方法不建议加static这个关键字

注意:static 表示不属于某个实例,它是属于类的,可以修饰成员也可以修饰方法

//定义一个人

class person{

  static long totalNum;//人类的总数,不属于具体的某个实例人,它属于人类这个类的变量

}

4.static为什么要与final一起用呢?

  static 和final的意义是不同的,static修饰的时候代表对象是静态的,而final修饰的时候代表对象只能赋值一次,他们连用的时候是因为定义的那个对象既要它是静态的,也要求它的值是不能在被修改的。

举例说明  1:

  static int a=1;

  static final b=1;

这里a,b的区别在于a程序里可以重新被赋值为2或3或等等的整数,而b的程序里不能被重新赋值,b永远为1,也就是b是一个常量

      2:

  final int c=1;

  static final b=1;

这里a,b的区别在于,b存放在静态空间,不会再程序运行时被释放,它永远占着内存直到程序终止,而c在程序用完它而不会用到它的时候就会被释放出来,不用占内存

当然,如果一个常数或字符串我们需要在在程序中反反复复使用时,我们可以把它定义成static final,这样内存就不要重复申请空间和释放空间了。

            大  家  多  多  支  持  !

  

 

posted @ 2020-04-05 20:07  xxmeng  阅读(263)  评论(0编辑  收藏  举报