主类中的调用方法和Java中的其他类差异

时间:2017-04-09 05:28:08

标签: java

我有3个类,Mainn,ReadFile和Entry。

ReadFile基本上是我的类,可以完成所有文件i / o的工作。

为什么我能够在我的Mainn类中访问ReadFile就好了,但是 当我尝试在Entry" e.openFile()"中访问它时我收到一个错误,上面写着标识符。

我知道这可以通过在Entry中重载方法openFile()来解决,但是为什么在Entry中需要这个,而不是在主类Mainn中?

package homework6;

public class mainn {
    public static void main(String[] args){
        ReadFile r = new ReadFile();
        r.openFile();
        //r.readFile();
        r.skipFirst();
        String x[] = r.getData();
        String y[] = r.getData();
        String z[] = r.getData();

        System.out.println(x[0] + "," + x[1]);
        System.out.println(y[0] + "," + y[1]);
        System.out.println(z[0] + "," + z[1]);

        r.closeFile();
    }
}

ReadFile的:

package homework6;
import java.util.*;
import java.io.*;

public class ReadFile {
    Scanner x = null;

    public void openFile(){
        try{
            x = new Scanner(new FileInputStream(
                    "C:\\Users\\Rohan Vidyarthi\\workspace\\Data.csv"));
        }
        catch(FileNotFoundException e){
            System.out.println("File not found error");
        }
    }

    public void readFile(){
        while (x.hasNextLine())
            System.out.println(x.nextLine());
    }

    public void skipFirst(){
        x.nextLine();
    }

    public String[] getData(){ //returns String[] with Date and ADJ Close
        String[] temp;
        String[] out = new String[2]; 
        temp = (x.nextLine()).split(",");
        out[0] = temp[0];
        out[1] = temp[6];
        return out;
    }

    public boolean checker(){
        return x.hasNextLine();
    }

    public void closeFile(){
        x.close();
    }
}

课程录入:

package homework6;

public class Entry extends ReadFile{
    ReadFile e = new ReadFile();
    e.openFile();

    double minn = Double.MAX_VALUE;
    double maxx = Double.MIN_VALUE;

    /*public String[] rMax(){
        String[] temp1;
        String[] temp2;
    }
    */
}

3 个答案:

答案 0 :(得分:1)

<input type="file" accepts="audio/*" onchange="handleFile(this.files[0])" />放在方法或构造函数中。您不能在方法之外放置浮动代码。任何语句只能在代码块内使用(即方法,构造函数,静态初始化程序)

答案 1 :(得分:1)

我建议您将openFile()逻辑移到 ReadFile类构造函数,如下所示,这种方法将为您带来两个好处:

(1)scanner(这是ReadFile类的必需变量)在类构造函数中初始化,这更有意义并避免所有NullPointerException,即有人意外调用其他方法首先在openFile()之前(始终确保所有必需的实例变量,即数据由构造函数初始化),我强烈建议将其作为一种实践,并且绝不允许任何对象自由创建而不是通过构造函数初始化的强制变量将避免大多数问题。)

(2)它会自动解决您的问题 ,因为您不需要调用openFile()方法(嗯,您自己没有这种方法, ReadFile构造函数初始化了扫描程序。)

public class ReadFile {
    Scanner x = null;

    public ReadFile() {
        try{
            x = new Scanner(new FileInputStream(
                    "C:\\Users\\Rohan Vidyarthi\\workspace\\Data.csv"));
        }
        catch(FileNotFoundException e){
            System.out.println("File not found error");
        }
    }

    public void readFile(){
        //add code
    }

    public void skipFirst(){
        //add code
    }

    public String[] getData(){
        //add code
    }

    public boolean checker(){
        return x.hasNextLine();
    }

    public void closeFile(){
        x.close();
    }
  }

请确保您不再需要致电openFile(),如下所示:

public class Entry extends ReadFile{
    ReadFile e = new ReadFile();//initializes scanner as well

    public String[] readFile() {//add any methods you like here in this like
        return e.readFile();
    }

    double minn = Double.MAX_VALUE;
    double maxx = Double.MIN_VALUE;
}
  

为什么我能够在我的Mainn类中访问ReadFile就好了,但是   当我尝试在Entry&#34; e.openFile()&#34;中访问它时我收到一个错误   说预期的标识符。

在Java中,任何方法调用的调用(如r.openFile())都应该从另一个方法或构造函数或初始化程序(静态或实例初始化程序)中完成,所以答案就在你的Mainn中类,您从openFile()方法调用<{1}} ,而在main(String[] args)类中,您的Entry方法调用未包含在内任何上述代码块(即方法,构造函数,初始化程序)。

更重要的一点是,一般来说,当你在面向对象语言中说 A扩展B 时,它意味着 A-IS类型的B ,但在你的代码openFile()没有多大意义,所以你应该避免这种情况。

答案 2 :(得分:0)

如果你这样做

public class mainn {
    ReadFile r = new ReadFile();
    r.openFile();
    //r.readFile();
    r.skipFirst();
    String x[] = r.getData();
        ...

您将在mainn

中收到相同的错误