【static 静态关键字】

一、static是什么

1.1 static的介绍

static是静态的意思,可以修改成员变量和成员方法
stati修改成员变量表示该成员变量在内存中只存储一份,可以被共享访问、修改


1.2成员变量的格式

静态成员变量创建格式
public class user {
    /**
     * 在线人数
     * 注意Static修饰的成员量 在内存只有一份
     */
    public static int  onlineNumber = 161;
}
(1) 静态成员变量的引用(有static修饰,属于类,内存中加载一次):常表示如在线人数,等需要被共享的信息,可以被共享访问。

类名.静态成员变量(推荐)
对象.静态成员变量(不推荐)

//1.类名.静态成员变量
        System.out.println(user.onlineNumber);
        //2.对象.静态变量(不推荐)
        user u = new user();
        System.out.println(u.onlineNumber);

(2)实例成员变量(无staic修饰,存在于每个对象中):常表示姓名name、年龄age、等属于每个对象的信息
 public static int onlineNumber = 161 ;
    //实例成员变量
    private String name;
    private  int age;

对象名.实例成员变量

//对象名.实例成员变量
        user1 u = new user1();
        u.name = "张三";
        u.age = 16;
1.3总结

static修饰的变量,既无论创建多少个对象,只要是这个类面的,便都可以调用,存储的位置也是一样的。
而无static修饰的变量,则会分开存储,变量之间的存储互不干扰。

二、 static的修饰方法

2.1 成员方法的分类

(1)静态成员方法(有static修饰,归属于类,建议用类名访问,也可以用对象访问。
(2)实例成员方法(无static修饰,归属于对象),只能用对象触发访问。

2.1.1静态成员法
    public class student {

    /**
     * 静态成员的方法,有static修饰,归属于类,可以被共享访问,用类名和对象名都可以访问
     */
    public static int getMax(int age1, int age2) {
        return age1 > age2 ? age1 : age2;
    }


    public static void main(String[] args){

        //1.类名.静态成员方法
        System.out.println(student.getMax(10,3));
        //注意:同一个类中,访问静态方法,类名可以省略不写
        System.out.println(getMax(10,3));

        //3.对象.静态方法(语法可行,但是不推荐)
        System.out.println(s.getMax(10,3));

    }
}

2.1.2实例成员法
public class student {
    /**
     * 实例成员变量 : 无static修饰,属于对象
     */
    private String name;

    /*
    实例方法:属于对象,只能用对象触发访问
     */
    public void study(){
        System.out.println(name);
    }


    public static void main(String[] args){

        //因为study(); 没有static修饰所以报错
        //2.对象.实例法
        student s = new student();
        s.name = "猪八戒";
        s.study();
    }
}

2.1.3总体代码
public class student {
    /**
     * 实例成员变量 : 无static修饰,属于对象
     */
    private String name;

    /**
     * 静态成员的方法,有static修饰,归属于类,可以被共享访问,用类名和对象名都可以访问
     */
    public static int getMax(int age1, int age2) {
        return age1 > age2 ? age1 : age2;
    }

    /*
    实例方法:属于对象,只能用对象触发访问
     */
    public void study(){
        System.out.println(name);
    }


    public static void main(String[] args){

        //1.类名.静态成员方法
        System.out.println(student.getMax(10,3));
        //注意:同一个类中,访问静态方法,类名可以省略不写
        System.out.println(getMax(10,3));

        //因为study(); 没有static修饰所以报错
        //2.对象.实例法
        student s = new student();
        s.name = "猪八戒";
        s.study();

        //3.对象.静态方法(语法可行,但是不推荐)
        System.out.println(s.getMax(10,3));
    }
}

三、static访问注意事项:

  • 静态方法只能访问静态成员,不能直接访问实例成员
  • 实例方法可以访问静态成员,也可以访问实例成员
  • 静态方法中不可以出现this关键字
3.1静态方法只能访问静态成员,不能直接访问实例成员,但可以通过创建一个对象,间接访问

public class text3 {
    
    public static int onlineNumber = 10;
    public static void test2(){
        System.out.println("==text2===");
    }
    
    /*
    实例成员
     */
    private String name;
    public void run(){
        System.out.println(name + "跑得快");
    }
    
    //1.静态方法只能访问静态成员,不能“直接“访问实例成员
    public static void test()
    {
        //可以类名.静态变量访问
        System.out.println(text3.onlineNumber);
        //可直接访问静态成员
        System.out.println(onlineNumber);
        //System.out.println(name);直接访问实例成员会报错
        //可以新建一个对象,访问
        text3 text = new text3();
        System.out.println(text.name);
         //当然run()直接访问实例方法也会报错
        text.run();//也需要一个对象来进行间接访问
    }
    }
3.2实例方法可以访问静态成员,也可以访问实例成员
public class text3 {

    public static int onlineNumber = 10;
    public static void test2(){
        System.out.println("==text2===");
    }

    /*
    实例成员
     */
    private String name;
    public void run(){
        System.out.println(name + "跑得快");
    }

    //2.实例方法可以访问静态成员,也可以访问实例成员
    public void go()
    {
        System.out.println(text3.onlineNumber);//类名.静态变量成员访问
        System.out.println(onlineNumber);//静态成员变量访问
        test2();//静态方法访问
        System.out.println(name);//实例成员访问
        run();//实例方法访问
    }
}
3.3静态方法中不可以出现this关键字,因为this只能代表当前对象,而静态方法的共享性不只代表当前对象。
    //3.静态方法中不可以出现this关键字
    public static void test3()
    {
        //System.out.println(this); 这里this只能代表当前对象!!
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值