java静态变量简介

问:
1:我发现静态变量怎么不能在构造方法和main方法里声明?
2:直接在类里面声明倒可以,但是紧接着在这个类里怎么修改这个静态变量?

答:

本人新手,不太懂答:以前我也很困扰因为书上讲的太专业化了,给你举个简单的例子,一个房子,房子里有很多人,房子就是类,人就是对象.房子里的家具电器什么的都是被那些人公用的就是static,他是类所拥有的东西,如果有人改动了他他就会被永久改动,比如说一个人损坏了他别人用的时候他还是损坏的.正因为这样在类创建的时候他就会被先加载进去(所以这会还没有人呢所以静态方法不能引用对象的东西),然后在创建对象什么的.而那些非静态的变量和方法就好比是人身上的衣服和人的行为,每个人的都有但是不一定一样.不是公用的是私有的,每个人可以随便改动自己的变量但不会对其他人的变量产生影响.所以说定义静态的就在类里定义就行,何必跑到方法里定义都是公用的嘛!
也可以辩证的理解,方法之间的变量是不能互相调用的,这不和static变量的功能相悖么
怎么修改,在自己的类里面直接修改就行,在其他类在前面加上类名点变量名就行,希望对你有帮助,有什么不会的可以再问

http://zhidao.baidu.com/question/328291830.html 

下面借助代码进行说明

public class StaticTest {

    public static int a = 100;//如果类的成员变量是静态的,那么在类加载时,
    //在方法区中会开辟一块空间存储该静态变量(基本类型)或者该变量的引用,
    //静态变量的这块内存空间是可以被所有的对象访问的,这也就是为什么是全局变量的原因了

    public static void main(String[] args) {
     modify(a);
     System.out.println(a);//输出100,因为a是函数内部的变量,该变量只有在方法被调用的时候才分配空间的,
     //很明显此a的被分配的空间和静态变量分配的空间是不一样的
     StaticTest.a++;//通过类名直接调用该静态变量,可以直接对其进行操作
     System.out.println(a);//输出101,所以已经改变了该静态变量
     
     StaticDemo.printA();//输出101,证明StaticTest.a的值已经被更改了
    }

    public static void modify(int a) { // 这函数参数是a
        a++; // 这个a是函数参数里的a,不是全局静态的a
             // 所以这里你改的是函数内部的a,而不是全局的静态变量a
             // 你把函数参数改个名别叫a,就行了
        System.out.println("=======modify====="+a);
    }
   }

class StaticDemo{
    public static void printA(){
        System.out.println(StaticTest.a);
    }
} 





### Java 静态变量使用指南与注意事项 Java 中的静态变量Static Variable)是类的一个重要特性,它们属于类本身而不是类的实例。因此,无论创建多少个对象,静态变量在内存中只有一个副本[^1]。以下是关于静态变量的详细说明和使用指南: #### 1. 静态变量的定义 静态变量通过 `static` 关键字修饰,声明在类中但不隶属于任何特定对象。例如: ```java public class Example { public static int count = 0; // 静态变量 } ``` 静态变量在整个程序运行期间都存在,并且可以通过类名直接访问 `Example.count`,而无需创建类的实例[^1]。 #### 2. 静态变量的作用域 静态变量的作用域与普通成员变量类似,但它们在整个类的所有实例之间共享。如果一个实例修改了静态变量的值,其他实例也会看到这一变化。例如: ```java public class Example { public static int count = 0; public Example() { count++; } public static void main(String[] args) { new Example(); new Example(); System.out.println(Example.count); // 输出:2 } } ``` #### 3. 初始化方式 静态变量可以在声明时初始化,也可以在静态代码块中初始化。静态代码块仅在类加载时执行一次。例如: ```java public class Example { public static int count; static { count = 10; // 在静态代码块中初始化 } } ``` #### 4. 注意事项 - **线程安全**:由于静态变量被所有实例共享,多线程环境下可能会引发竞争条件(Race Condition)。在这种情况下,应考虑使用同步机制或线程安全的数据结构[^1]。 - **内存管理**:静态变量在整个应用程序生命周期内都占用内存,即使没有任何对象引用该类,静态变量仍然存在。因此,应避免将大对象存储为静态变量,以免浪费内存。 - **类加载机制**:静态变量在类加载时初始化,如果类未被加载,静态变量也不会被初始化[^2]。 #### 5. 实际开发中的应用 静态变量通常用于以下场景: - 存储全局配置信息,例如数据库连接字符串、API密钥等。 - 计数器功能,例如统计创建的对象数量。 - 缓存常用数据,例如静态方法的结果或常量值。 #### 示例代码 以下是一个简单的例子,展示如何使用静态变量来统计对象的数量: ```java public class Person { private String name; public static int personCount = 0; // 静态变量 public Person(String name) { this.name = name; personCount++; // 每次创建对象时递增 } public static void printPersonCount() { System.out.println("Total persons: " + personCount); } public static void main(String[] args) { new Person("Alice"); new Person("Bob"); Person.printPersonCount(); // 输出:Total persons: 2 } } ``` ### 结论 通过合理使用静态变量,可以简化程序设计并提高代码的可维护性。然而,在使用静态变量时需要注意其线程安全性、内存消耗以及与其他类或对象的交互[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值