Java中的关键字static

原创 2015年11月19日 23:09:51

如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量,例如:声明一个static的变量count作为new一个类实例的计数。声明为static的方法有以下几条限制: 

1、它们仅能调用其他的static 方法。

2、它们只能访问static数据。

3、它们不能以任何方式引用this super

如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

public class UserStatic {  

        static int a = 3;  

        static int b;    

        static void meth(int x) {  

            System.out.println("x = " + x);  

            System.out.println("a = " + a);  

            System.out.println("b = " + b);    

        }   

        static {  

            System.out.println("Static block initialized.");  

            b = a * 4;    

        }   

        public static void main(String args[]) {  

            meth(42);   

        }  

    }

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 12。然后调用main()main() 调用meth() ,把值42传递给x3println ( ) 语句引用两个static变量ab,以及局部变量

注意:在一个static 方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized. 
x = 42 
a = 3 
b = 12

在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号(.)运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method( )

这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。

总结:
1
static成员是不能被其所在class创建的实例访问的。

2、如果不加static修饰的成员是对象成员,也就是归每个对象所有的。

3、加static修饰的成员是类成员,就是可以由一个类直接调用,为所有对象共有的。

 

 

Java Static:作为修饰符, 可以用来修饰变量、方法、代码块(但绝对不能修饰类)


1、修饰变量:

类的所有对象共同拥有的一个属性,也称为类变量。这类似于C语言中的全局变量。类变量在类加载的时候初始化,而且只被初始化一次。在程序中任何对象对静态变量做修改,其他对象看到的是修改后的值。因此类变量可以用作计数器。另外,Java Static变量可以用类名直接访问,而不必需要对象。

2、修饰方法:

类的所有对象共同拥有的一个功能,称为静态方法。静态方法也可以用类名直接访问,而不必需要对象。所以在静态方法里不能直接访问非静态变量和非静态方法,在Static方法里不能出现this或者super等关键字。

3、修饰Java代码块:

static去修饰类里面的一个独立的代码块,称为静态代码块。静态代码块在类第一次被加载的时候执行,而且只执行一次。静态代码块没有名字,因此不能显式调用,而只有在类加载的时候由虚拟机来调用。它主要用来完成一些初始化操作。

4、类加载:

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载,连接,初始化三个步骤来对该类进行初始化,JVM将会连续完成这三个步骤,也把这三个步骤统称为类加载或类初始化。
类加载指的是将类Class文件读入内存,并为之创建一个java.lang.Class对象,也就是说程序使用任何类时,系统都会为之建立一个java.lang.Class对象
类是某一类对象的抽象,类是概念层次的东西,但类也是一种对象,每个类是一批具有相同特征的对象的抽象,而系统中所有类,它们实际上也是对象,都是java.lang.Class的实例
类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器,开发者也可以通过继承ClassLoader基类来创建自己的类加载器
通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:1.从本地文件系统来加载Class文件,这是大部分实例程序的类加载方式
2从jar包中加载class文件,如JDBC编程时用到的数据库驱动类就是放在jar文件中,JVM可以从jar文件中直接加载该Class文件
3.通过网络加载class文件
      4.把一个java源文件动态编译,并执行加载。


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

版权声明:本文为博主原创文章,未经博主允许不得转载。

MLDN魔乐JAVA_10static关键字.rar

  • 2012年08月08日 13:45
  • 13.99MB
  • 下载

Duanxx的Java学习:关键字Static详解

  • 2014年08月04日 10:49
  • 302KB
  • 下载

java定义静态变量的作用 static关键字

我们知道类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,为了节省系统内存开销、共享资源,应该将一些变量声明为静态变量。通过下面的例子,你就会发现有什么不同。 代码一: p...

魔乐JAVA10 static关键字

  • 2011年11月29日 16:54
  • 27.67MB
  • 下载

java视频 static关键字

  • 2010年05月26日 20:15
  • 13.98MB
  • 下载

Java学习笔记之深入理解关键字static

基本概念static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量这个概念。 在Java中,用static修饰的方法称为...

Java关键字final、static使用总结

  • 2011年11月19日 11:32
  • 11KB
  • 下载

Java中的static关键字详解

1.static关键字主要有2个作用: ①为某特定的数据类型或者对象分配单一的存储空间,而与创建对象的个数无关。 ②在不创建对象的情况下可以直接通过类名来直接调用方法或者使用类的属性。 2.stati...
  • dq3wrr
  • dq3wrr
  • 2014年11月05日 18:08
  • 732

关于java static 关键字

当我们创建类时会指出哪个类的对象的外观与行为。 一般的流程是用new 创建这个类的对象,然后生成数据的存储空间,并使用相应的方法。 但以下两种情况不太适合这个流程: 只想用一个存储区域来保存一个特...

Java中static关键字用法总结

Java中static关键字用法总结 标签: javaclassstring虚拟机存储jvm 2009-04-21 00:05 19251人阅读 评论(8) 收藏 举报  分类:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的关键字static
举报原因:
原因补充:

(最多只允许输入30个字)