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*/
    
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值