我有3个类,Mainn,ReadFile和Entry。ReadFile基本上是我的类,它处理所有文件I / O。我怎么能在Mainn类中访问ReadFile很好,但是当我尝试在条目“ 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(); }}读文件: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; } */} 最佳答案 我建议您将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很好,但是  当我尝试在条目“ e.openFile()”中访问它时,出现错误消息  说预期的标识符。在Java中,任何方法调用(如r.openFile())的调用都应从另一个方法或构造函数或初始化程序(静态或实例初始化程序)进行,因此答案在您的Mainn类中,您正在调用位于openFile()方法内部,而在main(String[] args)类中,您的Entry方法调用未包装在任何上述代码块(即方法,构造函数,初始化器)中。更重要的一点是,通常来说,当您说A用面向对象语言扩展B时,它意味着A IS-A类型的B,但是在您的代码openFile()中并没有多大意义,因此应避免这种情况。关于java - 主类中的调用方法和Java中的其他类差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43303370/
10-12 02:56