javaSE面试题-成员变量与局部变量

问题描述:写成以下代码的运行结果

public class Exam5 {
	static int s;
	int i;
	int j;
	{
		int i = 1;
		i++;
		j++;
		s++;
	}
	public void test(int j){
		j++;
		i++;
		s++;
	}
	public static void main(String[] args) {
		Exam5 obj1 = new Exam5();
		Exam5 obj2 = new Exam5();
		obj1.test(10);
		obj1.test(20);
		obj2.test(30);
		System.out.println(obj1.i + "," + obj1.j + "," + obj1.s);
		System.out.println(obj2.i + "," + obj2.j + "," + obj2.s);
	}
}

分析:
考点:
1.就近原则
2.变量的分类
成员变量:类变量、实例变量
局部变量
3.非静态代码块的执行,每次创建实例对象时都会执行
4.方法的调用规则:调用一次执行一次
javaSE面试题-成员变量与局部变量
javaSE面试题-成员变量与局部变量
静态代码块在栈中开辟空间,因为其属于类加载中的<init>()方法

答案:

2,1,5
1,1,5

拓展题:
如果上题中的类改为

public class Exam5 {
	static int s;
	int i;
	int j;
	{
		int i = 1;
		this.i++;
		j++;
		s++;
	}
	public void test(int j){
		this.j++;
		i++;
		s++;
	}

答案又是多少呢?
要学会举一反三哟,有兴趣的小伙伴自己测试一下吧,或在下方评论留言。

觉得不错的小伙伴可以右上角点个赞或关注哟!
有问题请随时在下方留言,我会尽力一一解答。

上一篇:js对象的浅拷贝与深拷贝


下一篇:ECMAScript语句之with 语句