关于内部类的一些小问题。特别是静态类。

程序如下;出现了无法编译。原因是在Circle类前面没有标识static ,标识static 之后就能够正常编译。但是我就是不明白为什么要非要加static ,都在一个程序里,访问的时候为什么说‘’静态上下文无法访问...‘’这报错。有些不明白,我是新手,才学习还请大家指教指教。
/*目的:这个程序求圆的数组的总面积,程序创建5个圆对象组成的数组,
接着使用随机值初始化这些圆的半径,然后显示圆的总面积*/
public class Test{
public static void main(String args[]){
Circle[] circlearray=new Circle[5];
for(int i = 0;i<circlearray.length;i++){
circlearray[i]= new Circle();}
System.out.println("Radius" +"\t\t\t\t "+"Area");
for(int i = 0;i<circlearray.length;i++){
System.out.printf("%-10.2f%30.2f\n",circlearray[i].radius,circlearray[i].getArea());}
System.out.println("------------------------------------------------");
System.out.println("The toal area is"+ sum(circlearray));}
public class Circle{
double radius;
Circle(){
radius=Math.random()*100;
}
double getArea(){
return radius*radius*Math.PI;}
}
public static double sum(Circle[]array){
double sum =0;
for(int i =0;i<array.length;i++){
sum += array[i].getArea();
}

return sum;}
}

一个脚本文件里面可以写两个类吗?

因为main方法是static的,也就是静态方法。静态方法是不能引用非静态类的实例或者方法的。
原因很简单,静态方法是在类初始化的时候已经加载好了, 而非静态的类或者方法则不是。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制

(1) java规定共有类必须和文件同名,内部类和非共有类不必如此,所以一个源代码可以包含多个类,没问题。
(2) 静态类为什么不能访问成员,道理很简单,一个类有很多的实例,每个实例都有一套成员,并且可以不同。静态成员不属于任何实例,相当于全局变量和全局函数,你怎么知道访问成员变量访问的是哪个。

两个类写在一个文件里的话 这样是不行的 main函数是static类型的 不能访问自己类的非static方法和成员变量
一个文件编译的时候只会生成一个class文件