问题描述:写成以下代码的运行结果
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.方法的调用规则:调用一次执行一次
静态代码块在栈中开辟空间,因为其属于类加载中的<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++;
}
答案又是多少呢?
要学会举一反三哟,有兴趣的小伙伴自己测试一下吧,或在下方评论留言。
觉得不错的小伙伴可以右上角点个赞或关注哟!
有问题请随时在下方留言,我会尽力一一解答。