2 jake300687 jake300687 于 2016.01.25 16:54 提问

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

程序如下;出现了无法编译。原因是在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;}
}

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.25 22:26

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

Chely_Yi
Chely_Yi   2016.01.26 17:33

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

Iamxiaoxiong
Iamxiaoxiong   2016.01.25 17:51

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

u011483331
u011483331   2016.01.25 17:09

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

jake300687
jake300687 什么意思。? 这不是脚本。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
JAVA 静态内部类和非静态内部类的区别
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类
关于java内部类(静态内部类和普通内部类)
java 静态内部类 只有在是静态内部类的情况下才能把static修复符放在类前,其他任何时候static都是不能修饰类的。      //定义张三这个人       Person p = new Person("张三");       //设置张三的家庭信息       p.setHome(new Person.Home("上海","021")); 它可以脱离外部类
普通内部类和静态内部类总结
普通内部类可以访问其外部类的各种类型成员,但是静态内部类只能访问静态成员 普通内部类里面不能定义各种静态的成员(包括静态变量、静态方法、静态代码块和静态内部类),而静态内部类中则可以; 静态变量和静态方法会出现这个语法错误(static methods can only be declared in a static or top level type)意思就是static方法只能在静态或者顶级类
Java 静态内部类 与 非静态内部类的区别?什么时候用静态内部类,又是什么时候用非静态内部类?
Java中内部类加载时间:一般是只有运到了才会初始化,而不是外部内加载的时候(不管是静态还是非静态内部类)。 注意到一个问题: 内部类只有是静态的,其内部类中才能有静态属性和静态方法; 如果内部类非静态的,其内部类不能有静态属性和静态方法。 例子: public class OutClass { static{ System.out.println("OutCla
内部类及静态内部类的实例化
内部类的实例化 如果内部类未声明为static,在实例化时首先需要new一个外部类的对象。并通过p.new Inner()的方式new 内部类,表明这个内部类指向该外部类。内部类的class类型为:Parent.Inner,而不是p.Inner,这个需要和new的方式区分开。 public class Test {  public static void main(String[]
Java静态内部类——重点是精妙的demo
什么是内部类 大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有些地方也叫做嵌套类),包含内部类的类也被称为外部类(有些地方也叫做宿主类) 作用?? 更好的封装性 内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,但外部类不能访问内部类的实现细节,例如内部类的成员变量
静态内部类的使用场景
在实际的工作开发中,使用普通的内部类的场景比较多,似乎静态内部类并不常用,但是它也有其特定的使用场景。 比如说我们学习JAVA的时候,的main方法,它是static 方法,是程序的入口,但不需要每个java文件都定义这个方法吧。为了代码简洁,减少代码量 下面为了探索更多的使用场景,我们先来了解一下它的使用规则。 1、非静态内部类是不可以声明静态成员的(属性和方法),使用静态类就可以声明静态
java 常见的单例模式,推荐静态内部类
解法一:只适合单线程环境(不好) package test; /** * @author xiaoping * */ public class Singleton { private static Singleton instance=null; private Singleton(){ } public static Singleton getInstance(
静态内部类的生命周期
最近在研究内存泄漏的过程中偶然发现一个问题:我们通过Builder这种构建者的方式(这个Builder是个静态内部类)去构建一个参数对象是否会引发内存泄漏的风险(即静态内部类的生命周期是怎样的)?核心代码如下:public class ImageLoader { private Context context; public ImageLoader(Builder builder) {
Java类的加载,以及静态内部类的问题。
1、属性的加载以及初始化的问题 当要实例化一个类时,JVM会首先加载该类,并且在加载过程中检查这个类是否有静态属性以及静态代码块,如果有,就按顺序分配内存并初始化他们,并且只在类加载的过程中初始化一次。 对于构造代码块,以及普通属性,是在类实例化时进行的,并且每次实例化都会调用,并且构造代码块先于构造方法执行。 下面看这段代码: 首先JVM会加载这个类,通过断点调试发现当执行到静态