java中static与final

本文探讨了Java中static与final修饰符对变量初始化的影响,通过一个具体的代码示例,展示了static变量在类加载时初始化一次,而final变量在每次实例化时都会初始化。解析了a++操作的执行顺序,并对比了不同修饰符下输出结果的差异。
package com.aaa;

import java.util.ArrayList;
import java.util.List;

/**
 * @filename Test0128.java
 * @author l
 * @version 创建时间:2019年1月28日 下午4:47:58
 * @description
 */
class Apple {
	private static long a;
	private static long b = a++;
//	private final long b = a++;输出结果不一样
	public long geta(){ return b;}
}

class Orange {}

public class Test0128 {

	public static void main(String[] args) {
		List apples = new ArrayList();
		for(int i=0;i<3;i++){
			apples.add(new Apple());
		}
		for(int i=0;i<apples.size();i++){
			Apple apple = (Apple) apples.get(i);
			System.out.println(apple.geta());
		}
	}

}
  1. 输出结果为: 0,0,0
  2. 问题: 当把private static long b = a++;中static 改为final时,输出结果变为0,1,2
  3. 解答

static在代码编译的时候初始化变量,final可以在代码运行中初始化变量。

②a++是先赋值给b,再自生加1
1.static作用域针对所有对象,类属性,加载类的时候,只初始化了一次,用一个空间,一个对象里面变了他的值,另外一个访问的也是他
2.final针对当前对象,每new一个,就会初始化这个对象b一个独立的空间
所以第一次都为static的时候,类加载的时候只初始化了一次,就是按顺序,a=0;b=a++=0; a=1;a没有给初始值,初始值为0
你b改成final后每new一次,就会初始化一个对象,每个对象里面独立的b
第一次new,a=0;b=a++=0;a=1;
第二次new, a=1;b=a++=1;a=2;
第二次new, a=2;b=a++=2;a=3;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值