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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
5月前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
8月前
|
设计模式 Oracle Java
java静态方法和实例方法有何不同
本文深入探讨Java中静态方法与实例方法的区别与应用,从概念、调用方式、内存管理到生命周期全面解析两者差异,并结合实际案例分析设计意图与最佳实践。无论是工具类设计还是性能优化,文章均提供详尽指导,帮助开发者根据具体场景选择合适的方法类型,提升代码效率与可维护性。
304 3
|
缓存 安全 Java
Volatile关键字与Java原子性的迷宫之旅
通过合理使用 `volatile`和原子操作,可以在提升程序性能的同时,确保程序的正确性和线程安全性。希望本文能帮助您更好地理解和应用这些并发编程中的关键概念。
345 21
|
11月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
228 4
|
10月前
|
存储 安全 Java
深入理解 Java 中的 instanceof 关键字
本文深入解析了 Java 中的 `instanceof` 关键字,探讨其在类型判断中的作用。作为二元操作符,`instanceof` 可用于检查对象是否为某类实例或实现特定接口,避免类型转换异常 (`ClassCastException`)。文章通过多态性下的类型判断、安全类型转换、接口实现检测及集合元素类型判定等实际应用场景,展示了 `instanceof` 的强大功能。掌握该关键字可提高代码健壮性,确保运行时类型安全。
771 0
|
存储 安全 Java
探索 Java 静态变量(static)的奥秘
本文深入探讨了Java中的静态变量(`static`),从初印象、使用场景、访问方式、初始化、线程安全、优缺点到最佳实践,全面解析其特性和应用场景。静态变量属于类而非实例,适用于共享数据、定义全局常量和工具类中的变量。它在类加载时初始化,生命周期贯穿整个程序运行。然而,多线程环境下需注意线程安全问题,可通过`synchronized`或原子类解决。优点包括共享数据方便和提高性能,但也存在线程安全和代码耦合度增高的缺点。最佳实践建议谨慎使用、保证线程安全、遵循命名规范并封装访问。掌握静态变量的正确用法,能让你的代码更加高效简洁。
886 11
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
1910 9
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
缓存 安全 Java
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
160 0
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
321 0