Java基础之static关键字解析及用法学习总结

1.static关键字用途

总结出处:https://www.cnblogs.com/dolphin0520/p/3799052.html
https://www.cnblogs.com/dotgua/p/6354151.html?utm_source=itdadao&utm_medium=referral
1)修饰变量
  在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这是相对于对象的属性和方法来说的。
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
  static成员变量的初始化顺序按照定义的顺序进行初始化。
  static成员变量可以用作计数。
2)修饰方法
  static的另一个作用,就是修饰成员方法,静态方法不依赖于任何对象就可以进行访问,因此static方法中不能用this和super关键字。相比于修饰成员属性,修饰成员方法对于数据的存储上面并没有多大的变化,因为我们从上面可以看出,方法本来就是存放在类的定义当中的。static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗。在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
  但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。
3)修饰代码块
  static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

2.访问static方法

1)非静态方法必须实例化之后才能调用,static方法可以直接调用;

public class Test {
	public static void main(String args[]) {
		run();
		speak();//不能直接调用非静态方法,必须先实例化,如下	
		//Test t = new Test();
		//t.run();
	}
	public void speak() {
		System.out.println("speak");
	}
	public static void run() {
	}
}

2)static方法和非static方法互相调用
静态方法只能调用静态方法,不可以调用非静态方法,反之是可以的。另外,静态方法也只能调用静态成员变量,且静态成员变量需要先于静态方法声明。

public class Test {
	public static void main(String args[]) {
	}
	public void speak() {
		System.out.println("speak");
		//非静态方法能调用静态方法
		run();
	}
	public static void run() {
		//静态方法不能调用非静态方法
		speak();
	}
}

3.static变量和代码块的执行顺序

出处(含实例代码):https://www.cnblogs.com/jj-chenjunjie/p/5331107.html
Java中的静态变量和静态代码块是在类加载的时候就执行的,实例化对象时,先声明并实例化变量再执行构造函数。如果子类继承父类,则先执行父类的静态变量和静态代码块,再执行子类的静态变量和静态代码块。同样,接着在执行父类和子类非静态代码块和构造函数。
注意:(静态)变量和(静态)代码块的也是有执行顺序的,与代码书写的顺序一致。在(静态)代码块中可以使用(静态)变量,但是被使用的(静态)变量必须在(静态)代码块前面声明。
最后给出执行步骤:
1)父类静态变量和静态代码块(先声明的先执行);
2)子类静态变量和静态代码块(先声明的先执行);
3)父类的变量和代码块(先声明的先执行);
4)父类的构造函数;
5)子类的变量和代码块(先声明的先执行);
6)子类的构造函数。
补充:静态变量,静态代码块先于System.out.println(“打印输出”)执行,静态的东西只执行一次,相当于全局变量。

4.常见的笔试面试题

https://www.cnblogs.com/dolphin0520/p/3799052.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值