java static 关键字

基本概念

通常情况下成员变量隶属于对象层级,每创建一个对象就需要申请独立的内存空间来存放该对象独立的成员变量信息,若所有对象的某个成员变量数值完全一样却又单独存放会造成内存空间的浪费。

为了解决上述问题,则使用static关键字修饰成员变量表达静态的含义,此时该成员变量由对象层级提升为类层级被所有对象共享,该成员变量随着类的加载准备就绪,于是否创建对象无关。
静态的成员(属性和方法)可以用对象.调用,但 一般推荐用类名.调用。

package com.example.springboot;

public class School {

    public  static String gname;
    private String address;
    private String size;

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    @Override
    public String toString() {
        return "Scoogle{" +
                "gname='" + gname + '\'' +
                ", address='" + address + '\'' +
                ", size='" + size + '\'' +
                '}';
    }
}
package com.example.springboot;

import org.junit.jupiter.api.Test;

public class TestE {
 @Test
 public  void main(){

     //这个位置此时还没创建对象
     System.out.println("//"+ School.gname);

     School sco = new School();
     sco.setGname("市一中");
     sco.setAddress("裕华区");
     sco.setSize("20103m²");

     School sco2 = new School();
     sco2.setGname("十七中");
     sco2.setAddress("长安区");
     sco2.setSize("2103m²");

     //被所有对象共享
     sco.setGname("市二中");
     System.out.println("----------------------"+sco2.getGname());

     School sco3 = new School();

     System.out.println("``````````````````````"+sco3.getGname());

     return;
 }
}

在这里插入图片描述

使用方法

(1) 在非静态的成员方法中既能访问非静态的成员也能访问静态的成员;
(成员:成员变量 + 成员方法, 静态成员被所有对象共享)
(2)在静态的成员方法中只能访问静态的成员不能访问非静态的成员;
(成员:成员变量 + 成员方法,调用静态方法时可能还没有创建对象)
(3)只有隶属于类层级被所有对象共享的内容才可以使用static修饰
(不能滥用statci关键字)

package com.example.springboot;

import org.junit.jupiter.api.Test;

public class TestF {

  private String str =  "河北省石家庄市";// 隶属于对象层级,每个对象都拥有一份
  private static String str2 = "河南省郑州市";//隶属于类层级,所有对象都有一份


  @Test
  //下面的方法没有static修饰,隶属于对象层级
  public  void show(){
      System.out.println( "---------------"+str);
      System.out.println( "---------------"+str2);
  }
  //使用static修饰的方法隶属于类层级,推荐使用 类名.的方式访问
  public static  void  test(){
      //System.out.println( "---------------"+str);//error
      System.out.println( "---------------"+str2);
  }

  public static  void main(){
      TestF.test();
      TestF.main();
      TestF f = new TestF();
      f.show();
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值