【详细】static修饰符

1.static变量

  • 用static修饰的变量成为类变量或者静态变量
  • static变量是属于类的,随类进行加载(在加载类的时候就为static变量分配内存空间);“可以”使用来类名直接进行访问(可以而不是必须);
  • static变量对类而言在内存中只存在一份,被类的所有实例共享(即可以通过不同实例对这一个变量进行修改);而实例变量(没有static修饰的)不同,在每个实例中都有一份,之间互不影响。
public class Student {
    private static int count;
    private int num;
    public Student() { count++; num++; }  //

    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();
        Student s4 = new Student();

        //因为还是在类中,所以可以直接访问私有属性
        System.out.println(s1.num);//1
        System.out.println(s2.num);//1
        System.out.println(s3.num);//1
        System.out.println(s4.num);//1

        System.out.println(Student.count);//4
        System.out.println(s1.count);//4
        System.out.println(s2.count);//4
        System.out.println(s3.count);//4
        System.out.println(s4.count);//4
    }
}

2.static方法

  • 静态方法数属于类的,随类一起加载,"可以"使用类名来调用;非静态方法是属于对象的,随创建对象的时候一起加载,"必须"使用对象来调用.
  • 因此,先加载的不能调用后加载的(即:静态方法"不可以"直接访问类中的非静态变量和非静态方法;但是"可以"直接访问类中的静态变量和静态方法)(非静态方法"可以"直接访问类中的非静态变量和非静态方法,也"可以"直接访问类中的静态变量和静态方法)
  • 而且,由于this和super代表“类的对象”,属于非静态的,因此静态方法中不能用this和super。
  • static方法可以被子类继承,但是不能被重写。
    【拓展-小结】不能被子类重写的方法:
  1. static
  2. final
  3. private、protected

3.static代码块

3.1代码块

  • 在类中可以编写代码块
  • 代码块分为:匿名代码块和静态代码块;
public class Person { 
	{ 
		//代码块(匿名代码块) 
	}
	
	static{ 
		//静态代码块 
	} 
}

3.2代码块的执行

  • 因为没有名字(标识符),在程序并不能主动调用这些代码块。
  • 匿名代码块:是在创建对象的时候自动执行的,并且在构造器执行之前;同时匿名代码块在每次创建对象的时候都会自动执行。
  • 静态代码块:是在类加载完成之后就自动执行,并且只执行一次
public class Person {
    {
        System.out.println("匿名代码块");
    }

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

    public Person(){
        System.out.println("构造器");
    }
}

public static void main(String[] args) {
    Student s1 = new Student();
    Student s2 = new Student();
    Student s3 = new Student();
}

//输出:
静态代码块
匿名代码块
构造器
        
匿名代码块
构造器
        
匿名代码块
构造器

3.3代码块作用

  • 匿名代码块的作用是给对象的成员变量初始化赋值,但是因为构造器也能完成这项工作,所以匿名代码块使用的并不多
  • 静态代码块的作用是给类中的静态成员变量初始化赋值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值