class Test{
private int i=j;
private int j=10;
public static void mai[code=Java]n(String[] args)
{
System.out.println(new Test().i);
}
}[/code]这个程序因为j在i后面才定义,所以导致编译通不过。public class Test {
private int i = returnJ();
private int j = 10;
private int returnJ() {
return j;
}
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
按道理创建test对象后,初始化i,调用returnJ方法,这个时候返回的j还是没有初始化的啊。可为什么在这里又可以编译通过而且输出10了呢。
private int i=j;
private int j=10;
public static void mai[code=Java]n(String[] args)
{
System.out.println(new Test().i);
}
}[/code]这个程序因为j在i后面才定义,所以导致编译通不过。public class Test {
private int i = returnJ();
private int j = 10;
private int returnJ() {
return j;
}
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
按道理创建test对象后,初始化i,调用returnJ方法,这个时候返回的j还是没有初始化的啊。可为什么在这里又可以编译通过而且输出10了呢。
i=returnJ();
j = 10;
}
你没写构造方法所以java会自动的给你弄一个默认的Test(){}里面就是初试你的成员变量的int默认为0所以i,j都会为0
你的的值给你初试为0了,但是你又将returnJ()的值给了i returnJ()返回的值是j 但是构造初试为0 结果把j=0的值在给了i所以最后你打印的值为0了,如果你自己写个构造方法,如上。在打印看看结果``
public class Test {
private int i = returnJ();
private int j = 10;
private int returnJ() {
return j;
}
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
答案为10`!? 你的机子``我晕死`
说了 他的第一种情况 楼主说不能编译通过的那个 我的机子可以 你试验了没有
public class Test {
private int i =10;
private int j = 10;
}
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
刚又试了一遍 输出0 因为我在12楼回帖的时候的确输出是10 当时还想截图来着 想想好像没必要截就没截 所以我可以记得输出10是肯定的 刚输出0 感觉很奇怪 然后我又点了一次保存 再来javac Test.java java Test 出错 哈哈哈还没这么晕过
private int i = 10;
private int j = 10;
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
private int i = returnJ();
private int j = 10;
private int returnJ() {
return j;
}
public static void main(String args[]) {
System.out.println((new Test()).i);
}
}
我说的是这样,输出0。你那样一改已经全都初始化好了。不能编译的是这个class Test{
private int i=j;
private int j=10;
public static void main(String[] args)
{
System.out.println(new Test().i);
}
因为初始化得按顺序,初始化i用到的j必须已经初始化了