栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【JavaEE进阶序列 | 从小白到工程师】JavaEE中的静态变量、静态方法和Static关键字

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaEE进阶序列 | 从小白到工程师】JavaEE中的静态变量、静态方法和Static关键字

文章目录
  • 前言
  • 一、为什么需要静态变量?
  • 二、static关键字
    • 静态变量的定义格式
    • 静态变量的调用格式
    • 静态变量和普通变量(非静态变量)的区别
      • ⭐案例演示
    • 静态变量小结
  • 三、静态方法
    • 什么是静态方法?
    • 静态方法的格式
    • 静态方法的调用格式
    • 静态方法和普通成员方法的区别
      • ⭐案例演示
  • 作者:KJ.JK


前言
     本文介绍JavaEE中的静态变量、静态方法和Static关键字

            
 
个人博客首页: KJ.JK
 
欢迎大家点赞收藏评论关注
 
源码获取 | 学习交流 | 欄商务合作 | 私信作者


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


二、static关键字
静态变量的定义格式
      格式: 权限修饰符  static 数据类型  变量名;
      
      范例:  public   static  String  country;

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

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

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



        

⭐案例演示
public class Student {

    public static  String school;
     
    public  void  show(){
        System.out.println(school);
    }


}
      
        
        Student s1=new Student();
        Student s2=new Student();

        s1.school="北大";
        s2.school="清华";

        s1.show();    // 清华   
        s2.show();    // 清华     
        
 //因为school被static修饰是同一份数据,所以会被后面的值覆盖,(你变我也变),如果都没有赋值就是这个类型的默认值        
        


静态变量小结
        定义格式                static 数据类型 变量名;                                          
      
                           
        内存特点                随着类的加载而存在,在内存中只有一份,被所有对象共享           
       
       
       
                               类名.静态变量(推荐) 
        访问方式  
                              对象名.静态变量(不推荐)
       
       
        使用场景              如果某个成员变量希望被共享使用,则定义成静态变量

系列热门专栏:
 
⚡《JavaEE进阶序列 | 从小白到工程师》系列文章⚡
 
⚡《JavaEE项目实战》系列文章⚡
 
⚡《JavaSwing项目合集》系列文章⚡
 
⚡《数据分析中的pandas》系列文章⚡


三、静态方法
什么是静态方法?
        使用static修饰的方法,叫做静态方法

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

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

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

静态方法和普通成员方法的区别
 区别:

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

             静态方法,只能直接访问本类的静态成员,不能使用super、this关键字
             
             非静态方法可以直接访问本类的所有成员
                 
             
                   
⭐案例演示
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);    //报错

        method();           //静态方法只能访问静态方法
        eat();             //报错

        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);
    }


}



作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号