static静态方法

一.静态的用途

  • 修饰类的成员变量,称为静态变量。
  • 静态变量是属于类的变量,可以使用” 类名.变量名”访问,在类的内部可以省略类名。
  • 静态变量只有一份,可以被全体对象共享!软件中只有一份的数据应该使用static修饰
  • 静态变量在类加载期间,随着类在方法区中初始化,只有一份属于类。
  1. 什么时候使用静态?

如果某个成员变量是被所有对象共享的,就应该被定义为静态变量

二.static关键字的特点

a>随着类的加载而加载
b>优先于对象二存在
c>被类的所有对象所共享
d>可以通过类名.调用,不用被实例化可以直接使用

三.static的注意事项

1.在静态方法中是没有this关键字的

  • 静态是随着类的加载而加载,this是随着对象的创建而存在的,静态优先于对象存在

2.静态方法只能访问静态的成员变量和静态的成员方法

  • 还是因为静态方法优先于对象而存在,只能访问已经存在的变量和方法

3.静态变量也叫类变量,成员变量也叫对象变量

  • A:所属不同:
    静态变量属于类
    成员变量属于对象
  • B:内存中位置不同:
    静态变量存储于方法区
    成员变量存储与堆内存
  • C:内存出现时间不同:
    静态变量随着类的加载而加载,随着类的消失而消失;
    成员变量随着对象的创建而存在,随着对象的消失而消失
  • D:调用不同:
    静态变量可以使用类名调用,也可以使用对象调用
    成员变量只能通过对象调用

四.静态代码块

1.形式:static {…}
2.特点:

  • 静态代码块中的代码在类进内存时,就会执行,并且只执行一次
  • 只能访问static修饰的静态变量和静态方法
  • 不能写this或者对象,静态代码块在对象初始化之前执行
  • 执行顺序:静态代码块–>构造代码块–>构造方法

面试题

//看程序写结果
public class staticDemo1 {
	public static void main(String[] args) {
		Zi z = new Zi(); 
	}
}
	class Fu {
		static {
			System.out.println("静态代码块Fu");
		}

		{
			System.out.println("构造代码块Fu");
		}

		public Fu() {
			System.out.println("构造方法Fu");
		}
	}

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

		{
			System.out.println("构造代码块Zi");
		}

		public Zi() {
			System.out.println("构造方法Zi");
		}
	}
结果:
		静态代码块Fu
		静态代码块Zi
		构造代码块Fu
		构造方法Fu
		构造代码块Zi
		构造方法Zi
分析:1.jvm调用main方法进栈
	 2.遇到Zi z = new Zi();会现将Fu.class和Zi.class分别加载进内存,
	 	再创建对象时,当Fu.class加载进内存时,父类的静态代码块会随着Fu.class一起加载,
	 	当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
	 	
	 	第一个输出 静态代码块Fu, 第二个输出 静态代码块Zi
	 	
	 3.走子类的构造方法.因为java中式分层初始化的,先初始化父类,再初始化子类.
	 所以先走的是父类构造,但是在执行父类构造时,发现父类有构造代码块,由于构造代码块优先于构造方法执行,
	 
		 第三个输出 构造代码块Fu,第四个输出 构造方法Fu
		 
	 4.父类初始化结束,子类初始化
	 
		 第五个输出 构造代码块Zi,第六个输出 构造方法Zi

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值