6.关键字static

  在java中并不存在全局变量的概念,但是我们可以通过static关键字来实现一个“为全局”的概念,在java中static表示“全局”和“静态”的意思,他可以用来修饰成员变量和方法,也可以用来修饰代码块。

  Java把内存分为栈内存和堆内存,栈内存用来存放基本类型的变量、数组和对象的引用,堆内存主要存放对象。在JVM加载一个类的时候,若该类存在用static修饰的成员变量和方法,则会为这些成员变量和方法在固定的位置分配固定大小的内存区域,有了这些“固定”的特性之后,JVM就可以非常方便的访问它们了。

  注意:

  1.如果静态的成员变量和成员方法不出作用域的话,它们的句柄都会保持不变;

  2.static所蕴含的“静态”概念表示它是不可恢复的,即在那个地方,你修改了,它是不会变回原样的;你删除了,它就不会回来了;

  3.被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它是被该类的所有实例共享,所有的引用都指向同一个地方,任何一个实例的修改都会导致其他实例的变化。

  

  static可以用于修饰成员变量和成员方法,我们将其称之为静态变量和静态方法,直接通过类名来进行访问。

ClassName.propertyName

ClassName.methodName(……)

Static修饰的代码块表示静态代码块,当JVM装载类的时候,就会执行这块代码,其用处非常大。(对于代码块的使用这几天介绍,敬请关注)

      2.1、static变量

static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量,他们两者的区别是:

静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。

但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。

所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。

   2.2、static方法

static修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用。由于他在类加载的时候就存在了,它不依赖于任何实例,所以static方法必须实现,也就是说他不能是抽象方法abstract。

Static方法是类中的一种特殊方法,我们只有在真正需要他们的时候才会将方法声明为static。如Math类的所有方法都是静态static的。

  2.3、static代码块

被static修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该类的任何地方。

   Static确实是存在诸多的作用,但是它也存在一些缺陷。

    1.它只能调用static方法;

    2.它只能调用static变量;

    3.它不能以任何形式引用this、super;

    4.static修饰的成员变量在定义的时候必须进行初始化,且初始化时间要早于非静态变量

  总结:无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。

时间: 2024-10-25 14:30:58

6.关键字static的相关文章

java关键字static

static修饰符可以修饰变量.常量.方法和代码块,分别称为静态变量.静态常量.静态方法和静态代码块. 1.static变量 在java中,如果希望某个变量的值能被所有的对象共享,可以将该变量声明为静态变量(也叫类变量).静态变量在类装载时,只分配一块储存空间,所有此类的对象都可以操控此块储存空间,它为所有类实例提供共享的变量.当一个对象将该变量修改后,其他对象再使用该变量将会是改变后的数据.声明静态变量的语法如下: [权限控制符] static 成员变量类型 成员变量名: 访问静态变量的语法如

Java关键字--static

在Java中,将关键字static分为三部分进行讨论,分别为Java静态变量.Java静态方法.Java静态类 Java Static Variables Java instance variables are given separate memory for storage. If there is a need for a variable to be common to all the objects of a single java class, then the static mod

关键字static

这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区). 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用. 大多数应试者能正确回答第一部分,一部分能正确回答第二部

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

关键字static和const的作用

一.在C语言中,关键字static的作用: (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问: (3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内:(4)在类中的static成员变量意味着它为该类的所有实例所共享,也

关键字static在c与c++中的区别。

关键字--static static主要有以下三个作用: 1. 局部静态变量(c/c++)2. 外部静态变量/函数(c/c++)3. 静态数据成员/成员函数 (c++特有)1.局部静态变量 静态局部变量,在函数里面定义的,就只能在这个函数里用了.由于被static修饰的变量只存在内存的静态区.所以即使函数运行结束,这个静态变量的值不会销毁,下次调用还能调用到这个值. 在C/C++中, 局部变量按照存储形式可分为三种auto, static, register. (1). 存储空间分配和生存周期不

c中常用的关键字static const volatile

在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量.3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用.大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分.这是一个应试者的严重的缺点,因

再回首之关键字static

在刚刚学习java时接触了static,如类中主方法public static void  main(String [] args),以前也是“不求甚解”,正所谓基础不牢地动山摇啊! 现在要对基础知识做一个深刻的理解 1.static关键字 static关键字用于修饰:属性.方法.内部类.代码块. static修饰的资源属于类级别,是全体对象的共享资源 1)static修饰的属性(静态属性/类属性) 根据上面的说法静态属性应该是该类全体对象的共享属性 如下代码 package com.shxt.

JAVA基础知识(2)--关键字static的使用

在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法称为类方法或者静态方法: static修饰的语句块在其所属的类中被载入JVM时被执行一次,一般用于一次性的初始化的工作:而非static语句块是每创建一个对象就执行一次,其运行时机实在对象分配空间及实例默认和显示初始化之后和执行构造方法体中语句之前: /***static 操作使用*@author

全局变量和局部变量,关键字static的作用

全局变量和局部变量 全局变量:在函数外定义的变量成为全局变量;全局变量在静态存储区分配存储但愿,在程序运行期间都不释放,在文件中的函数均可调用该全局变量,其他文件内的函数调用全局变量,需加extern声明. 静态全局变量:在函数外定义变量时,若加上static声明,则此变量为静态全局变量. 局部变量:在一个函数中或复合语句中定义的变量,在动态存储区分配存储单元,在调用时动态分配,在函数或复合语句结束时自动释放. 静态局部变量:在一个函数中定义局部变量时,若加上statci声明,则此变量为静态局部