你不知道的Java笔记6-- Static关键字

一、static可以修饰的元素

1、类属性(只能是类中的属性,不能是方法里面的)
2、方法
3、代码块

这里写图片描述

二、静态成员变量

//static 修饰类属性
    static String country;

1、所有对象共享,也称为类变量
2、用static修饰的成员变量,它们在类被载入时创建,只要类存在,static变量就存在。
3、两种访问方式:
直接访问:类名.属性
实例化后访问:对象名.属性
4、静态成员变量只会分配一个内存空间,并且是在创建对象中分配的内存空间;而非静态成员变量每new一个就分配一个空间。

证明:静态成员与非静态成员空间分配

/**
 *定义一个Person类
 *属性:名字,年龄
 *行为:say(说话)
 */
 public class Person {
    public  String name;
    public     int age;
    //非静态的count
    public int count1;
    //静态的count
    public static int count2;
    public Person()
    {
        //计算分配内存的次数
        count1++;
        count2++;
    }
}
 class Test {

        public static void main(String[] args) {
            //创建三个对象
            Person p1=new Person();
            Person p2=new Person();
            Person p3=new Person();

            //打印创建时分配内存的次数(一个数字表示一次,不是数字的大小)
            System.out.println(p1.count1);
            System.out.println(p2.count1);
            System.out.println(p3.count1);
            System.out.println(Person.count2);
        }

    }

这里写图片描述

图解静态成员与非静态成员空间分配

这里写图片描述

三、静态方法

//static 方法
    static void sing()
    {
        System.out.println("北京欢迎你!");
    }

1、不需要实例化,可以直接访问,也称为类方法。
2、两种方式访问:
直接访问:类名.方法名()
实例化后访问:对象名.方法名()
3、static方法的作用
简化方法的使用;便于访问静态属性。

4、在同一个类中,静态成员和非静态成员的访问规则
(1)静态成员只能直接访问静态成员(类属性,方法),而不能直接访问类中的非静态成员(但可以通过new 类名.方法名();访问)。
(2)非静态成员可以访问非静态的成员,也可以访问非静态的成员。
(3)静态方法不能使用this,super关键字。

5、如何区分定义变量为静态还是非静态的
当只针对对象所有的/存储的是数据的:定义为非静态的
当只针对类所有的/做事情的:定义为静态的

四、静态代码块
只会执行一次,类第一次加载的时候执行。
可用于连接数据库,这样的话就可以保证一直都可以用。

static{
//代码
}

证明:静态代码块只会执行一次,类第一次加载的时候执行。

/**
 *定义一个Person类
 *属性:名字,年龄
 *行为:say(说话)
 */
 public class Person {
    public  String name;
    public     int age;
    //非静态的count
    public int count1;
    //静态的count
    public static int count2;
    public Person()
    {
        //计算分配内存的次数
        count1++;
        count2++;
    }
    static {
        System.out.println("I am Static");
    }
}
 class Test {

        public static void main(String[] args) {
            //创建三个对象
            Person p1=new Person();
            Person p2=new Person();
            Person p3=new Person();

            //打印创建时分配内存的次数(一个数字表示一次,不是数字的大小)
            System.out.println(p1.count1);
            System.out.println(p2.count1);
            System.out.println(p3.count1);
            System.out.println(Person.count2);
        }

    }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值