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

问题描述 投票:-1回答:2

我经常讨论非静态变量错误。我不确定我何时正确理解使用静电的目的而不是。我有下面的代码,我试图解析一个csv文件与三列(日期,时间,温度)到我自己定义的类。

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

    TempData objt = new TempData();

如果有人知道我做错了什么,我会非常感激。我试过谷歌但找不到任何相关的东西。

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;

        }

    }


}
java arrays static non-static
2个回答
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();

    }
}

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官方解释。

© www.soinside.com 2019 - 2024. All rights reserved.