创建自己的类时出现非静态变量错误

时间:2019-03-20 11:48:06

标签: java arrays static non-static

我经常遇到非静态变量错误。不确定何时使用静态和不静态我是否正确理解了目的。我在下面的代码中尝试将具有三列(日期,时间,温度)的csv文件解析为自己定义的类。

该位给我一个非静态变量错误。

    TempData objt = new TempData();

如果有人知道我在做什么错,我将非常感激。我已经尝试过Google,但找不到任何相关内容。

package com.company;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;



public class Main {

    public static void main(String[] args) {

        Date tempDate;
        Date tempTime;
        Double tempTemperature;

        ArrayList<TempData> data = new ArrayList<TempData>();
        TempData objt = new TempData();


        //Get scanner instance
        Scanner scanner = new Scanner(new File("smhi-opendata.csv"));

        //Set the delimiter used in file
        scanner.useDelimiter(";");

        //Get all tokens and store them in some data structure
        while (scanner.hasNext())
        {
            tempDate = new SimpleDateFormat("dd/MM/yyyy").parse(scanner.next());
            tempTime = new SimpleDateFormat("hh:mm:ss").parse(scanner.next());
            tempTemperature = Double.parseDouble(scanner.next());
            objt.Data(tempDate, tempTime, tempTemperature);
           data.add(objt);
        }

        //Do not forget to close the scanner
        scanner.close();

        }


    public class TempData{
        private Date date;
        private Date time;
        private double temperature;

        public void Data (Date d, Date t, double te){
            date = d;
            time = t;
            temperature = te;

        }

    }


}

2 个答案:

答案 0 :(得分:0)

首先,Data函数仅更新值,而不创建新的TempData对象。其次,main函数不能使用当前所在的TempData类。

我会选择这样的东西:

public class TempData {
    private Date date;
    private Date time;
    private double temperature;

    public TempData(Date date, Date time, double temperature) {
        this.date = date;
        this.time = time;
        this.temperature = temperature;
    }

    public static void main(String[] args) throws Exception {

        Date tempDate;
        Date tempTime;
        Double tempTemperature;

        ArrayList<TempData> data = new ArrayList<TempData>();

        // Get scanner instance
        Scanner scanner = new Scanner(new File("smhi-opendata.csv"));

        // Set the delimiter used in file
        scanner.useDelimiter(";");

        // Get all tokens and store them in some data structure
        while (scanner.hasNext()) {
            tempDate = new SimpleDateFormat("dd/MM/yyyy").parse(scanner.next());
            tempTime = new SimpleDateFormat("hh:mm:ss").parse(scanner.next());
            tempTemperature = Double.parseDouble(scanner.next());
            TempData objt = new TempData(tempDate, tempTime, tempTemperature);
            data.add(objt);
        }

        // Do not forget to close the scanner
        scanner.close();

    }
}

答案 1 :(得分:0)

问题是您正在从静态上下文访问非静态类。 main方法(public static void main() {})具有关键字static,因此它位于类(静态)上下文中。您的内部类TempData不是静态的,因此它属于实例(非静态)上下文。

您可以从实例上下文访问类上下文,反之亦然。因此,您有两个选择:

将您的TempData类移动到静态上下文:

public class Main {
    public static void main(String[] args) {
        // ...
        TempData objt = new TempData();
        // ...
    }

    public static class TempData{
        // ...
    }
}

或从非静态上下文访问您的TempData。例如:

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        // ...
        TempData objt = new TempData();
        // ...
    }

    public class TempData {
        // ...
    }
}

要详细了解此内容,可以按照this官方说明进行操作。

相关问题