`
huanglz19871030
  • 浏览: 248888 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

static的用法

阅读更多

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

 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。


 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。


 static 变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。


 static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:

类名.静态方法名(参数列表
...)
类名.静态变量名


 用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。


1
static变量

 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:

 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。


2
、静态方法

 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用thissuper关键字,不能直接访问所属类的实例变量和实例方法 (就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!

 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract


3
static代码块

 static 代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

 

利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个staticmain方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。

4
staticfinal一块用表示什么

static final
用来修饰成员变量和成员方法,可简单理解为全局常量

对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

对于方法,表示不可覆盖,并且可以通过类名直接访问。

 

java中一切皆是对象

一个类中对象的定义一般都是分一下的两步来进行的:
1/    A a;                                     //
定义了一个类A的引用
2/    a=new A("10","2563");        //
真正地建立了对象a,也就是a指向了内存中一块连续的区域

        也就是说通常我们说的创建了一个类,只是指出了这个类的外观和行为,除非用new 创建那个类的一个对象,否则的话,实际上并未得到任何的东西。只有执行了new以后,才会正式生成数据存储空间,并可使用相应的方法。
       
但是如果我们要只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。或者我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。为满足这两方面的要求,可使用static(静态)关键字。

         一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。而非静态的方法或者变量就必须知道它们操作的具体对象

         下面是java编程思想中的例子和解释:

         例如,下述代码能生成一个static数据成员,并对其初始化:

class StaticTest {
Static int i = 47;
}

现在,尽管我们制作了两个StaticTest对象,但它们仍然只占据StaticTest.i的一个存储空间。这两个对象都共享同样的i。请考察下述代码:

StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
此时,无论st1.i还是st2.i都有同样的值47,因为它们引用的是同样的内存区域。

有两个办法可引用一个static变量。正如上面展示的那样,可通过一个对象命名它,如st2.i。亦可直接用它的类名引用,而这在非静态成员里是行不通的(最好用这个办法引用static变量,因为它强调了那个变量的"静态"本质)。

StaticTest.i++;
其中,++运算符会使变量增值。此时,无论st1.i还是st2.i的值都是48

类似的逻辑也适用于静态方法。既可象对其他任何方法那样通过一个对象引用静态方法,亦可用特殊的语法格式"类名.方法()"加以引用。静态方法的定义是类似的:

class StaticFun {
static void incr() { StaticTest.i++; }
}
从中可看出,StaticFun的方法incr()使静态数据i增值。通过对象,可用典型的方法调用incr()

StaticFun sf = new StaticFun();
sf.incr();
或者,由于incr()是一种静态方法,所以可通过它的类直接调用:

StaticFun.incr();
尽管是"静态"的,但只要应用于一个数据成员,就会明确改变数据的创建方式(一个类一个成员,以及每个对象一个非静态成员)。若应用于一个方法,就没有那么戏剧化了。对方法来说,static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法。正如以后会看到的那样,这一点是至关重要的——特别是在定义程序运行入口方法main()的时候。

和其他任何方法一样,static方法也能创建自己类型的命名对象。所以经常把static方法作为一个"领头羊"使用,用它生成一系列自己类型的"实例"

 

分享到:
评论

相关推荐

    static用法小结.doc

    《static用法小结》 在C和C++编程中,`static`关键字是一个非常重要的概念,它在不同上下文中有着不同的用途。本篇将详细阐述`static`的三种主要用法及其特性。 1. 局部静态变量 在函数内部,`static`关键字用于...

    const与static用法完整总结

    ### const与static用法完整总结 #### 一、const关键字详解 **1. 常量定义** 在C++中,`const`关键字用于声明一个常量或对象的一部分为不可变。例如: ```cpp const int max = 100; ``` 此处`max`被声明为一个...

    C语言中static用法大全

    ### C语言中static用法详解 #### 一、C程序存储空间布局 C语言程序的存储空间主要分为以下几个部分: 1. **正文段**: 包含CPU执行的机器指令部分,一个程序通常只有一个副本,这部分内容是只读的,以防止程序因...

    static用法小结

    《C语言static用法小结》 在C和C++编程中,`static`关键字扮演着重要的角色,它有三种主要的使用方式:局部静态变量、外部静态变量/函数以及静态数据成员/成员函数。本篇文章将详细阐述这三种用法,并结合实例探讨...

    static 用法

    ### static 用法详解 #### 一、局部静态变量 局部静态变量是在C/C++中常见的一种变量类型,它的特点是生存期比普通的局部变量(即`auto`类型的局部变量)要长得多。局部静态变量存储在静态存储区,这意味着在整个...

    C++ static 用法总结

    C++ static 用法总结 静态变量是 C++ 中的一个重要概念,它有多种使用方式,今天我们就来总结一下 C++ 中的静态变量用法。 一、局部静态变量 在 C/C++ 中,局部变量可以分为三种:auto、static 和 register。与 ...

    c语言中static使用方法

    ### C语言中Static使用方法详解 #### 一、C程序存储空间布局 C语言程序的存储空间主要由以下几个部分组成: 1. **正文段**:这部分存储的是CPU执行的机器指令,一个程序通常只有一个副本,并且是只读的,以防止...

    java中static用法

    ### Java中static用法详解 #### 一、概述 在Java编程语言中,`static`关键字扮演着极其重要的角色。它被广泛应用于多种场景中,包括定义静态变量、静态方法、静态代码块以及静态内部类等。通过使用`static`,...

    static用法大全

    《static用法大全》 static关键字在C和C++中都是关键的角色,它有三种主要的使用方式,分别对应局部静态变量、外部静态变量/函数以及静态数据成员/成员函数。尽管C和C++中的一些具体操作细节有所不同,但本文将主要...

    Java之static用法

    Java之static用法 在Java语言中,static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块

    c语言中static用法总结[借鉴].pdf

    "C语言中static用法总结" 一、C语言程序存储空间布局 C语言程序由五个部分组成:正文段、初始化数据段、非初始化数据段、栈和堆。其中,正文段包含 CPU 执行的机器指令,初始化数据段包含已初始化的全局变量,非...

    final和static用法详解JAVA

    static 方法只能访问 static 变量和其他 static 方法。 3. static 块 static 块是 Java 中的一种特殊的块,它用于在类加载时执行一些初始化操作。static 块只能访问 static 变量和其他 static 方法。 final 和 ...

    各种编程语言中的static用法.docx

    各种编程语言中的static用法.docx

    c语言static用法总结

    以下是对`static`关键字在C语言中用法的详细解释: 1. **全局静态变量** - 全局变量通常在程序的整个生命周期中都在内存的静态存储区中存在。如果在全局变量前加上`static`,这个变量就成为全局静态变量,其作用域...

    c中static用法

    在C语言中,static关键字的使用涉及了变量、函数的作用域以及内存管理等重要的编程概念。static关键字主要有三个作用:隐藏、保持变量内容的持久以及默认初始化为0。下面分别详细解释这三条作用: 1. 隐藏作用 在...

    java中final关键字和static关键字详细用法

    2. `static`方法:静态方法与类关联,而不是类的实例。它们不能访问非静态成员,因为它们在没有对象的情况下被调用。静态方法通常用于工具类或实用函数,如计算、排序等。 3. `static`嵌套类(内部类):这些类是类...

    c语言中static用法总结.pdf

    ### C语言中`static`关键字的深入解析 #### 一、C程序的存储空间布局 在深入了解`static`关键字之前,我们首先需要了解C程序是如何组织其存储空间的。一个典型的C程序通常由以下几个部分组成: 1. **正文段**:这...

    Static静态变量的应用(VB6.0代码编写)

    在VB6.0中,声明Static变量的方法是在变量声明语句前加上"Static"关键字。例如: ```vb Sub Test() Static count As Integer count = count + 1 MsgBox "当前计数:" & count End Sub ``` 在这个例子中,`count...

    C语言static的用法

    ### C语言中的`static`关键字用法详解 在C语言编程中,`static`关键字具有非常重要的作用。本文将从不同角度对`static`在C语言中的应用进行深入...掌握好`static`的使用方法对于编写高质量的C语言程序来说至关重要。

Global site tag (gtag.js) - Google Analytics