Java中的静态变量、静态方法和Static关键字介绍与用法

简介: Java中的静态变量、静态方法和Static关键字介绍与用法

一、为什么需要静态变量?

    答:因为成员变量会随着对象的创建而在堆一直存在,每个对象在内存中都有一份成员变量
         这样子会造成每创建一个对象,就会创建对应的成员变量,浪费空间
    
    
       * 对于共用的,多个对象共享的成员变量,使用static修饰称为静态变量,在内存中产生一份数据,不会浪费
          
      *  静态变量:被所有对象共用,在内存中只会产生一份数据

二、static关键字

1.静态变量的定义格式

      格式: 权限修饰符  static 数据类型  变量名;
      
      范例:  public   static  String  country;

2.静态变量的调用格式

        格式1:  使用类名访问(推荐)
        范例:   Student.school="清华";
        
        
        格式2:  使用对象名访问(不推荐)
        范例:   Student stu1=new Student();
                stu1.school="北大";

3.静态变量和普通变量(非静态变量)的区别

区别:
      1.定义不同
      
          类变量(静态变量)定义时候前面要加上static
          
          实例变量(非静态变量)不需要加
          
      2.初始化不同
      
          类变量(静态变量)随着类的加载而初始化
          
          实例变量(非静态变量) 是new对象后才进行初始化

      3.内存位置不同
      
          类变量(静态变量)随着类的加载而存在于“方法区”中
          
          实例变量(非静态变量)存储在“堆内存区”
          
      4.调用方式不同
      
          类变量(静态变量)通过类名调用
          
          实例变量(非静态变量)通过对象调用
          
      5.生命周期不同
      
         类变量(静态变量)随着类的加载而加载,虚拟机停止运行类时,静态变量周期结束(类变量生命周期最长,随着类的消失而消失)
         
         实例变量(非静态变量)随着对象的产生而产生,随着对象的消失而失去引用,等待垃圾回收(随着对象的消失而消失)

tips

可以将static理解为同步修改,你变我也变,改变的都是同一份数据

4.静态变量小结

在这里插入图片描述


三、静态方法

1.什么是静态方法?

        使用static修饰的方法,叫做静态方法

2.静态方法的格式

            格式:  权限修饰符 static 返回值类型 方法名(参数){                    
                                   方法体;      
                                   return 数据;       
                            }
                            
            范例:    public static int add(int a,int b){
                                  int c=a+b;
                                  return c;
                             }   

3.静态方法的调用格式

                    格式1: 类名.静态方法名();   (推荐)     //在本类中调用静态方法,可以省略类名
                    范例:  Student.method();

                     
                    格式2: 对象名.静态方法名();   (不推荐)
                    范例: Student stu=new Student();
                          stu.method();

4.静态方法和普通成员方法的区别

 区别:

    格式区别:
     
           静态方法需要static关键字修饰,必须有返回类型,可以没有返回值 (只能访问静态变量,静态方法)  //静态访问静态
           
           成员方法可以任意起名,必须有返回类型,可以没有返回值 (可以访问任意变量,任意方法)
           
         
           
    调用区别:
    
            静态方法在本类中可以直接方法名调用,其他类中用类名.方法名调用      //show();   Student.show();
            
            成员方法需要通过 对象名.方法名()才可以调用,可以调用多次     // stu.show();

5.案例


public class Student {

    public  static void method(){
        System.out.println("学习");

    }

    public  void eat(){

        System.out.println("吃饭");
    }




    int age;
    static  String name;

    public  static  void method2(){
        System.out.println(name);    
//静态方法只能访问静态变量,从内存图来理解,静态变量是随着类的加载而加载,先存在,而成员变量是new对象后才产生的,所以访问不到

        System.out.println(age);    //报错

        System.out.println(this);  
        //报错,因为this代表的是当前调用类的对象,而静态方法属于类范围的东西,静态优于对象存在,不能调用
        
        System.out.println(super);  
        //super代表对父类对象的引用,指向父类对象;而静态方法比对象先出现

    }


    //成员方法访问任意变量,任意方法
    public  void method3(){
        eat();
        method();
        System.out.println(age);
        System.out.println(name);
        System.out.println(this);
    }


}

执行效果

在这里插入图片描述


tips

      this和super是属于对象范畴的东西,而静态和静态方法是属于类范畴的东西,比对象先出现,因为是随着类的加载而初始化
    
      静态只能访问静态的东西

作者:KJ.JK

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
17天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
32 2
|
21天前
|
Java
Java 静态变量的初始化顺序
【10月更文挑战第15天】了解 Java 静态变量的初始化顺序对于正确编写和维护代码至关重要。通过深入理解初始化顺序的原理和细节,我们可以更好地避免潜在的问题,并提高代码的质量和可靠性。
|
21天前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
25天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
28 3
|
1月前
|
Java
Java“非静态变量 ... 不能在静态上下文中被引用”解决
Java中遇到“非静态变量不能在静态上下文中被引用”的错误,通常是因为尝试在静态方法或静态块中访问实例变量。解决方法是将变量声明为静态(static)或通过实例对象来访问该变量。
|
1月前
|
Java
Java“非静态方法 ... 不能在静态上下文中被引用”解决
在Java中,“非静态方法……不能在静态上下文中被引用”的错误通常源于在静态方法中直接调用非静态方法。解决方法包括:1) 创建类的实例后调用;2) 将非静态方法改为静态方法;3) 重新评估和调整类的设计以避免此类问题。
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
安全 Java C#
Java系列之:看似简单的问题 静态方法和实例化方法的区别
   (2011-12-06 15:28:26) 转载▼ 标签:  杂谈 分类: study 今天看书时一直没真正弄明白静态方法和实例方法的区别,就在网上搜索,找到一篇很好的文章,和大家分享一下: 这是一个经常被时时提出来的问题,很多时候我们以为理解了、懂了,但深究一下,我们却发现并不懂。
918 0
|
11天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。