接收空指针异常

时间:2014-02-18 01:50:09

标签: java nullpointerexception call extends

我有一个设置数组的类。另一个类扩展了这个类,并在方法中使用提到的数组来返回另一个数组。当我这样做时,我收到一个null异常但是当我设置原始数组时,它工作得很好。不知道我在这里做错了什么。还是很新的。

设置数组的类(部分):

public class InitialGrids { 

int iic,ioc,iman ;
int nic, noc;
double masIC, masOC, masMAN;
double volIC, volOC, volMAN, volP;
double radIC, radOC, radP;

public int iMat[ ];
public double rad[ ];
public double vol[ ];
public double mas[ ];
public double dmas[ ];

public double [ ] radius(int nr)
{
    rad = new double [nr +1];

        for( int k = 0 ; k <= nic ; k++ )
        {
            rad[ k ] = radIC * ((double) k / nic);
            System.out.println("the radius at shell " + k + " is " + rad[k]);

        }

        for( int k = nic + 1 ; k <= noc ; k++ )
        {       
            rad[ k ] = radIC + ( (radOC - radIC) * ((double) (k - nic) / (noc - nic)) );
            System.out.println("the radius at shell " + k + " is " + rad[k]);

        }

        for( int k = noc + 1 ; k <= nr ; k++ )
        {
            rad[ k ] = radOC + ( (radP - radOC) * ((double) (k - noc) / (nr - noc)) );
            System.out.println("the radius at shell " + k + " is " + rad[k]);

        }   

        return(rad);
}

这是扩展InitialGrids(部分)的类:

public class Compression extends InitialGrids {

double G;
double PI;
double Pave;
double x, z, dy, dz, dydx; // this is for the iteration that will update the density
double delta;
double mix;

public double grav[ ];
public double P[ ];
public double rhon[ ];
public double radn[ ];

public double [ ] gravity( int nr ) 
{
    G = Constants.PI;
    PI = Constants.PI;
    grav = new double [ nr + 1 ];

    for(int k = 1; k <= nr; k++)
    {
        grav[ 0 ] = 0;
        grav[ k ] = ( (G*mas[k]) / (Math.pow(rad[k], 2)) ); 
    }
    return(grav);
}

我在主类中称这些为:

    InitialGrids ig = new InitialGrids();
ig.setup(icMat, ocMat, manMat, nr, masP, fic, foc, fman, fSi, fSi, fO);
 ig.material(nr);
 ig.radius(nr);
 ig.density(nr,fSi, fSi, foc);
 ig.volume(nr);
 ig.dmass(nr);
 ig.mass(nr);

   Compression com = new Compression();
   com.gravity(nr);
   com.pressure(nr);
   com.newDensity(nr);
   com.radn(nr);

3 个答案:

答案 0 :(得分:0)

“mas []”未在代码中的任何位置初始化。除非你在别处初始化它,否则这就是你的问题。

答案 1 :(得分:0)

所以,你几乎打破了这里的每一条规则。首先,在调用方法半径之前,字段rad未初始化,因此在调用此方法之前,新创建的InitialGrids实例无效。

因此,您的空指针正在发生,因为您创建了InitialGridsig的实例,并调用了radius,然后是{{>单独的实例{{ 1}}并且以某种方式期望该实例中的Compressionrad实例中的ig相关联?我不这么认为。

为什么这些类仍然是继承关系?

答案 2 :(得分:0)

最有可能的是,应该初始化实例变量mas和rad。 也许你需要像这样打电话。

Compression com = new Compression();
com.setup(icMat, ocMat, manMat, nr, masP, fic, foc, fman, fSi, fSi, fO);
com.material(nr);
com.radius(nr);
com.gravity(nr);

名为“com”和“ig”的实例完全不同。