类加载时候,先加载静态变量,再初始化成员变量 i不是静态变量,静态方法main()不能访问非静态变量 Date是util包中的一个类 不是类的修饰符 不存在静态之说 new Date() new出一个时间对象的引用 我也只能这么解释了``俺也只是个新手
静态方法往往不用实例化就可以访问,所以它要求它所使用的方法和属性必须同样是静态才行,如果要使用非静态的就必须先实例化。当然在方法体内部就没有静态与非静态之说了.像new Date();因为在方法体内部申明的所以与静态还是非静态无关。public class test{ class test{ int i; char c; } public static void main(String[] args){ System.out.println(new test()); } } 这为什么编译失败?因为println()中的new test()是内部类,必且是类范围里的,你可以把这看作是一个类的属性,显然静态方法无法访问非静态的,必须有一个外部类的引用才能访问,所以在new test()时还要有个外部类的实例。形如:外部内实例.new test(); public class test{ public static void main(String[] args){ class test1{ int i; char c; } System.out.println(new test1()); } } 这个为什么可以编译成功?你同样可以把在这儿定义的类看成定义的一个变量,显然在方法内部可以对它进行任意的访问,不管它是什么修饰符。 import java.util.*; public class test{ public static void main(String[] args){ System.out.println(new Date()); } System.out.println(new Date()); 你可以看成是 Date d = new Date() System.out.println(d); 因为它是方法自己申明的,当然没有问题的。方法在初始化时可以对其进行初始化。
如果你是初学者,最好不要从Thinking In Java这本书,从一些基础些的书籍开始。 你遇到的问题,可能Thinking In Java没有很充分的回答,它不是基础书籍。 static ,inner class,instance object 这些关键字或概念就很容易理解你遇到的这几个问题了。
i不是静态变量,静态方法main()不能访问非静态变量
Date是util包中的一个类 不是类的修饰符 不存在静态之说
new Date() new出一个时间对象的引用
我也只能这么解释了``俺也只是个新手
class test{
int i;
char c;
}
public static void main(String[] args){
System.out.println(new test());
}
} 这为什么编译失败?因为println()中的new test()是内部类,必且是类范围里的,你可以把这看作是一个类的属性,显然静态方法无法访问非静态的,必须有一个外部类的引用才能访问,所以在new test()时还要有个外部类的实例。形如:外部内实例.new test();
public class test{
public static void main(String[] args){
class test1{
int i;
char c;
} System.out.println(new test1());
}
} 这个为什么可以编译成功?你同样可以把在这儿定义的类看成定义的一个变量,显然在方法内部可以对它进行任意的访问,不管它是什么修饰符。
import java.util.*;
public class test{
public static void main(String[] args){
System.out.println(new Date());
} System.out.println(new Date());
你可以看成是 Date d = new Date()
System.out.println(d);
因为它是方法自己申明的,当然没有问题的。方法在初始化时可以对其进行初始化。
你遇到的问题,可能Thinking In Java没有很充分的回答,它不是基础书籍。
static ,inner class,instance object 这些关键字或概念就很容易理解你遇到的这几个问题了。