Становится ли какое-либо поле данных «статическим» без явного объявления?

Я объявил поле личных данных без модификатора «static», но когда я вызвал поле данных из метода. компилятор сказал, что «статическая ссылка на нестатический метод» только для одного файла данных «annualInterestRate», а другие кажутся нормальными.

Я также объявил другие данные таким же образом, но у них нет проблем. но в случае поля данных "annualInterestRate" это дает ошибку.

import java.util.Date;
import java.util.Scanner;
public class Account {
    private int id;
    private double balance;
    private double annualInterestRate;
    private java.util.Date dateCreated;
    public Account() {

    }
    public Account(int id, double balance, double interestRate) {
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = interestRate;
        dateCreated = new java.util.Date();
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public double getBalance() {
        return balance;
    }
    public void setInterestRate(double annualInterestRate) {
        this.annualInterestRate = annualInterestRate;
    }
    public double getInterestRate() {
        return annualInterestRate;
    }
    public java.util.Date getDate(){
        return dateCreated;
    }
    public double getMonthlyInterestRate() {
    double  monthlyInterestRate = annualInterestRate/12.0;
        return monthlyInterestRate;
    }
    public double getmonthlyInterest() {
        double monthlyInterestRate = annualInterestRate/12.0;
        return monthlyInterestRate*balance;
    }
    public void withdraw(double balance) {
        this.balance-=balance;
    }
    public void deposit(double balance) {
        this.balance+=balance;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int id;
        double balance,interestRate,mir;
        Scanner in = new Scanner(System.in);
        id = in.nextInt();
        balance = in.nextDouble();
        interestRate = in.nextDouble();
        Account Person = new Account(id, balance, interestRate);
        Person.withdraw(2500.0);
        Person.deposit(3000.0);
        mir = getmonthlyInterest();
        System.out.println(balance + " " + mir + " " + dateCreated);

    }

}

Ожидается, что будет работать гладко

Вы хотели написать this.annualInterestRate вместо annualInterestRate.this? Также я подозреваю, что у вас может быть какой-то класс Person, конфликтующий с вашей переменной с именем Person (обратите внимание, что по соглашению имена переменных должны начинаться с символа нижнего регистра и, возможно, иметь отношение к объекту, который они представляют).

Arnaud 21.01.2019 17:06

Все ваше использование «этого» неверно в вашем коде. Должен быть this.<instance variable>

nullPointer 21.01.2019 17:09

Примечание: вам действительно не следует использовать Date, он устарел. Вместо этого используйте классы из пакета java.time.

MC Emperor 21.01.2019 17:11

Кроме того, вы должны следовать соглашениям об именах Java: имена переменных всегда начинаются с нижнего регистра. Ваша переменная Person должна быть person.

MC Emperor 21.01.2019 17:13

я новенькая джава. тем не менее, я сделал исправления по-прежнему имеют ту же проблему.

Rakibul Islam 21.01.2019 17:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного исправив ваш основной метод для использования экземпляра вашего класса Account:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int id;
        double balance,interestRate,mir;
        Scanner in = new Scanner(System.in);
        id = in.nextInt();
        balance = in.nextDouble();
        interestRate = in.nextDouble();
        Account myPerson = new Account(id, balance, interestRate);
        myPerson.withdraw(2500.0);
        myPerson.deposit(3000.0);
        mir = myPerson.getmonthlyInterest();
        System.out.println(balance + " " + mir + " " + myPerson.getDate());

    }

Другие вопросы по теме