zoukankan      html  css  js  c++  java
  • java 中的静态方法和静态成员变量

      在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。例如:public static int maximum(int n1,int n2)使用类的静态方法时,

    注意:a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。b)静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

    静态方法中不可能再定义静态变量的,所以也不会导致里面的变量为静态的
    楼主需要明白的是JVM对每种类型的变量有自己的存储区,static有专门的存储区,局域也是
    所以局部和静态的概念其实是相冲的,不可能同时作为标识符去指定一个变量
    你只要做个简单的例子就知道了,方法中声明的都是局部变量,如果你强行加上静态呢? public static void f(){ static init j=0; }
    根本就无法通过编译,因为JVM不知道把变量往那个存储区域放

    所谓静态方法,就是通过类名来调用(当然通过类对象来调用一样是可以的,就像core java里说的一样,容易让人混淆!)的方法, 而静态变量它是一种共享变量(VB.net里面如此称呼,比较容易理解).,任何通过类名来调用,都可以改变其值.
    关于静态方法(通过类产生的对象)调用静态方法,调用非静态方法(通过类名或都是对象调用)都是可以的,但是,静态方法可以调用静态变量而不可以调用非静态变量(Error(12,30): non-static variable a cannot be referenced from a static context)

    有些面向对象的语言使用了"类数据"和"类方法"这两个术语。它们意味着数据和方法只是为作为一个整体的类而存在的,并不是为那个类的任何特定对象。有时,您会在其他一些Java书刊里发现这样的称呼。 为了将数据成员或方法设为static,只需在定义前置和这个关键字即可。例如,下述代码能生成一个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方法作为一个"领头羊"使用,用它生成一系列自己类型的"实例"。

  • 相关阅读:
    Show me the Template
    WPF中的Style(风格,样式)
    像苹果工具条一样平滑连续地缩放
    为窗体添加 "最大化","最小化","还原"等 事件
    [CHM]果壳中的XAML(XAML in a Nutshell)
    我的简约播放器
    很好玩的滚动效果
    项目经验分享(上)
    通过mongodb客户端samus代码研究解决问题
    记录数据库执行情况来分析数据库查询性能问题
  • 原文地址:https://www.cnblogs.com/hao02171990/p/3318599.html
Copyright © 2011-2022 走看看