Java面向对象3-static关键字

static关键字

  1. 概念

    static被称为静态,可以用来修饰类的属性,方法,代码块,内部类.

    特点:

    1. 随着类的加载而加载
    2. 优先于对象的存在
    3. 修饰的成员,被所有对象所共享
    4. 可不创建对象,直接被类调用
  2. 静态类与非静态类之间的区别

    静态变量:被static修饰的变量,加载类的时候被创建,不随对象的创建而改变,静态变量位于方法区,类消失对应的变量消失。

    非静态变量:不被static修饰的变量,每创建一次对象,就会为变量分配一次内存,存放在堆内存中,对象消失对应的变量消失。

    JAVA中初始化的顺序:

    加载类;

    静态变量初始化

    静态代码块;【其只能调度静态的,不能调度非静态的】

    成员变量

    构造代码块

    构造方法

    普通代码块

  3. static关键字

    static属性

    静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个.

    public class Chinese {
          
          
        /**
         * 成员变量,创建对象时复制一份
         */
        String name ;
        int age ;
        //country1 成员变量 ,每个中国人的国籍都是中国,每当有对象创建时都复制一份到堆中,浪费内存空间.
        String country1 = "中国";
        /**
         * 当所有对象中的某个属性值都一样时,这个属性值可以采用static静态修饰,在内存中只有一份(这个属性放在方法区中),对所有对象共享,
         */
        static String country2 = "中国";
    }
    
    public static void main(String[] args) {
          
          
        Chinese zs = new Chinese();
        zs.name = "张三";
        zs.age = 18;
        System.out.println(zs.country1);//只能通过对象来进行调用
        System.out.println(zs.country2);//country2被static修饰,可以通过对象调用
        System.out.println(Chinese.country2);//被static修饰,可以通过类调用,省去创建对象,例如 Math.PI
    }
    

    static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用

    在static方法内部只能访问类的static属性,不能访问类的非static属性.

    成员方法可以访问成员变量,也可以访问静态变量和静态方法.

    public class StaticMethod {
          
          
        String  mame;
        static  String country = "中国";
        //被static修饰的方法也是存在方法区
        public static void testStatic(){
          
          
            System.out.println("静态方法"+country);//静态方法只能访问 静态的变量
        }
        public void test(){
          
          
            System.out.println(mame);  //成员方法可以访问 成员变量
            testStatic();
            System.out.println(country);// 成员方法可以访问静态方法 还可以访问静态变量
        }
        public static void main(String[] args) {
          
          
            StaticMethod.testStatic();//可以直接通过类名调用
        }
    }
    
    public class TicketSeller {
          
          
        //所有的窗口票数都是同样的
        static int ticket=11;
        //出票的方法只有一个
        public static void sellticket(){
          
          
            System.out.println("卖票的静态方法"+ticket);
            ticket=ticket-1;
        }
        public static void main(String[] args) {
          
          
            TicketSeller.sellticket();
            TicketSeller.sellticket();
            TicketSeller.sellticket();
            TicketSeller.sellticket();
        }
    }/*输出结果为
    卖票的静态方法11
    卖票的静态方法10
    卖票的静态方法9
    卖票的静态方法8*/
    

猜你喜欢

转载自blog.csdn.net/qdzjo/article/details/109214548