18-static相关知识

一、static修饰成员变量

一旦使用了static关键字,那么这样的内容不再属于某个对象自己,而属于整个类,所以凡是本类的对象,都共享。

1、访问类的静态变量,推荐通过类名来访问,比如下例访问room,推荐写成student.room

student.java

public class student {
    private int id;
    private String name;
    private int age;
    static String room;

    private static int id_cnt = 0;

    public student() {
        this.id = ++id_cnt;
    }

    public student(String name, int old) {
        this.name = name;
        this.age = old;
        this.id = ++id_cnt;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
public class DemoStaticFile {
    public static void main(String[] args) {
        student one = new student("张三", 15);
        one.room = "308";
        System.out.println("姓名:"+one.getName()+"年龄:"+one.getAge()
                +"学号:"+one.getId()+"教室:"+one.room);
        student two = new student("李四",18);
        System.out.println("姓名:"+two.getName()+"年龄:"+two.getAge()
                +"学号:"+two.getId()+"教室:"+two.room);
    }

}

输出结果:

姓名:张三年龄:15学号:1教室:308
姓名:李四年龄:18学号:2教室:308

二、static 修改成员方法

如果使用static 修饰类中的某个方法,则该方法为静态方法,它不属于某个对象,而属于整个类。

1、静态方法不能直接访问非静态。

2、静态方法中不能使用this关键字。

举例:

MyClass.java
public class MyClass {
    private int a;
    static int ststic_a;


    public void method()
    {
        System.out.println("非静态方法");

        System.out.println("a="+this.a);//非静态方法可以访问非静态成员变量
        System.out.println("ststic_a="+ststic_a);//非静态方法可以访问静态成员变量
    }

    public static void staticMethod()
    {
        System.out.println("静态方法");
        //System.out.println(a);//静态方法不可以访问非静态成员变量
        System.out.println("ststic_a="+ststic_a);//静态方法可以访问静态变量
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

}
MyClassMethod.java
public class MyClassMethod {
    public static void main(String[] args) {
        MyClass.staticMethod(); //静态方法可以不new对象,直接使用,而且推荐用类名来使用

        MyClass mc = new MyClass();
        mc.method(); //非静态方法只有new了对象后才能使用

        localStaticMethod();//对于本地静态变量,可以直接通过方法名来访问
    }

    public static void localStaticMethod()
    {
        System.out.println("本地静态变量");
    }
}

输出结果;

静态方法
ststic_a=0
非静态方法
a='0
ststic_a=0
本地静态变量

静态内存示意图

三、静态代码块

静态代码块格式:

public class 类名称{
    static {
              //静态代码块内容
        }
}

特点:

1、当第一次使用到本类时,静态代码块执行唯一一次。

2、静态代码块优先于非静态执行,也就是说静态代码块优先于构造函数执行。

典型应用:用来一次性对静态成员变量进行赋值

举例:

StaticBlock.java
public class StaticBlock {
    static {
        System.out.println("静态代码块");
    }

    public StaticBlock() {
        System.out.println("构造函数");
    }
}
StaticBlockMethod.java
public class StaticBlockMethod {
    public static void main(String[] args) {
        StaticBlock one = new StaticBlock();
        System.out.println("================");
        StaticBlock two = new StaticBlock();
    }
}

输出结果:

静态代码块
构造函数
================
构造函数
发布了73 篇原创文章 · 获赞 4 · 访问量 4248

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/104091042