[JAVA]static成员

目录

1.static修饰成员

2.static成员的特性

3.static修饰成员的举例运用 

4.static修饰方法 

5.static方法的特性

6.private修饰的static成员

7.static成员变量初始化

7.1就地初始化

 7.2静态代码块初始化

7.2.1静态代码块的特性


有时候我们会遇到这种情况:

假设几只猫同时住在同一房号的猫窝,当我们通过类来实例化不同对象的时候就要一直不断的给同一个属性赋同样的值

class Cat{
    public int age;
    public String name;
    public String room;
}
public class Test {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.age = 1;
        cat1.name = "dudu";
        cat1.room = "X110";

        Cat cat2 = new Cat();
        cat2.age = 2;
        cat2.name = "Acai";
        cat2.room = "X110";
    }
}

既然几只猫是住在同一只猫窝里,这样就可以使用static来修饰成员 

1.static修饰成员

在java中,被static修饰的成员,称为静态成员,也可以称为类成员,不属于任何一个具体的对象,是所有对象所共享的。

2.static成员的特性

  • 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  • 类变量存储在方法区当中
  • 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁) 

3.static修饰成员的举例运用 

继续回到猫和猫窝

我们可以对静态成员通过对象名来调用,但不推荐这种方式。因为前面说过,静态成员也称为类成员,是所有对象所共享的。

class Cat{
    public int age;
    public String name;
    //public String room;
    public static String room = "X110";// 被static修饰的属性
}
public class Test {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.age = 1;
        cat1.name = "dudu";
        //cat1.room = "X110";
        System.out.println(cat1.name + "的房号是" + cat1.room);//对象名调用
        Cat cat2 = new Cat();
        cat2.age = 2;
        cat2.name = "Acai";
        System.out.println(cat2.name + "的房号是" + cat2.room);
        //cat2.room = "X110";
    }
}

 对于静态成员的调用,我们一般使用类名

Cat.room;

4.static修饰方法 

Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

class Cat{
    public int age;
    public String name;
    private static String room = "X110";// 被static修饰的属性
    public static void sayName(Cat cat){// 静态方法/类方法  可以通过类名调用
        System.out.println("我的名字叫" + cat.name);
    }
}
public class Test {
    public static void main(String[] args) {

        Cat cat1 = new Cat();
        cat1.age = 1;
        cat1.name = "dudu";

        Cat cat2 = new Cat();
        cat2.age = 2;
        cat2.name = "Acai";

        Cat.sayName(cat1);
    }
}

 

5.static方法的特性

  • 不属于某个具体的对象,是类方法
  • 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
  • 不能在静态方法中访问任何非静态成员变量
  • 静态方法不能调用任何非静态方法
     

6.private修饰的static成员

在一个类中,被private修饰的静态成员

class Cat{
    public int age;
    public String name;
    private static String room = "X110";// 被static修饰的属性
}
public class Test {
    public static void main(String[] args) {
        System.out.println(Cat.room);//此处会报错
    }
}

那这样的话该怎么调用被private修饰的静态成员呢?

可以用过静态方法来调用被private修饰的静态成员。

class Cat{
    public int age;
    public String name;
    private static String room = "X110";// 被static修饰的属性
    public static String getRoom(){//静态方法返回privat修饰的静态成员
        return room;
    }
}
public class Test {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.age = 1;
        cat1.name = "dudu";

        Cat cat2 = new Cat();
        cat2.age = 2;
        cat2.name = "Acai";
        
        System.out.println(Cat.getRoom());
    }
}

调用成功

7.static成员变量初始化

静态成员变量的初始化分为两种,一种是就地初始化,另一种是静态代码块初始化

7.1就地初始化

即在定义变量的时候初始化,就像文章上面的静态成员均为就地初始化。

public static String room = "X110"

 7.2静态代码块初始化

代码块就是一对花括号的内容,静态代码块就是在一个普通代码块上加上static

class Cat{
    public int age;
    public String name;
    private static String room;// 被static修饰的属性

    public static String getRoom(){
        return room;
    }

    static{                    //静态代码块
        room = "X110";
    }
    static{
        room = "X118";
    }
    static{                    //最终还是X110
        room = "X110";
    }
}

7.2.1静态代码块的特性

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值