Пробовал запускать и печатать время, на нестатическую переменную нельзя ссылаться.Я вижу, что происходит, но как мне это исправить? - PullRequest
0 голосов
/ 14 февраля 2012

Я начинаю объектно-ориентированный, и я написал код для печати текущего времени. Однако я получаю сообщение о том, что на нестатическую переменную нельзя ссылаться. Я понимаю, что происходит, но как мне исправить это, чтобы напечатать время?

import java.util.*;

public class test
{
    public static void main (String[] args)
    {
    time time = new time();


time.GetHour();
time.GetMinute();
time.GetSecond();

time.print();
}
}

и мой класс времени выглядит как

    public class time
    {
        public  int currentHour =0;
            int currentMinute= 0;
            int currentSecond= 0;


    public int GetHour()
    {
    long totalMilliseconds = System.currentTimeMillis();
    long totalHour = totalMilliseconds/1440000;
    long currentHour = totalHour %60;
    return (int)currentHour;        
    }   

    public int GetMinute()
    {   
    long totalMilliseconds = System.currentTimeMillis();
    long totalMinutes = totalMilliseconds/60000;
    long currentMinutes = totalMinutes %60; 
    return (int) currentMinutes;    
    }

    public int GetSecond()
    {   
    long totalMilliseconds = System.currentTimeMillis();
    long totalSeconds = totalMilliseconds/1000;
    long currentseconds = totalSeconds %60;
    return (int) currentSecond;
    }

    public static void print()
    {
        System.out.printf("Current time is %d:%d:%d\n",currentHour, currentMinute,currentSecond);
    }

}

Ответы [ 4 ]

1 голос
/ 14 февраля 2012

Похоже на поля: currentHour, currentMinute, currentSecond - это локальные переменные, область которых не выходит за пределы методов.

А также вы не можете ссылаться на нестатические методы или поля изstatic метод (печать).

0 голосов
/ 14 февраля 2012

Первая статическая функция или переменная может быть вызвана без создания объекта, это означает, что статическая функция или переменная является общей для всех создаваемых вами объектов.Кроме того, статические функции могут получать доступ только к другим статическим переменным и статическим функциям, но не к переменной или функции, которая не является статической, также нестатические функции могут напрямую обращаться к статическим функциям и статическим переменным ...

В вашем коде

public  int currentHour =0;
int currentMinute= 0;
int currentSecond= 0;

не являются статическими переменными, поэтому вы получили сообщение об ошибке «Нестатическая переменная не может быть указана»здесь функция печати является статической, если мы сделаем все остальные функции статическими, то она будет работать, или

объявит

ваши переменные как

public class time
{
    public static int currentHour =0;
    public static int currentMinute= 0;
    public static int currentSecond= 0;

     .....
     ....
    ....

    public static void print()
   {
    System.out.printf("Current time is %d:%d:%d\n",currentHour,   
    currentMinute,currentSeconds);
   }

}

здесь все три переменныестатичны, поэтому доступны из статической функции print

0 голосов
/ 14 февраля 2012

Посмотрите на функцию main()

public class time
    {
        public int currentHour =0;
        public int currentMinute= 0;
        public int currentSecond= 0;


    public int GetHour()
    {
    long totalMilliseconds = System.currentTimeMillis();
    long totalHour = totalMilliseconds/1440000;
    long currentHour = totalHour %60;
    return (int)currentHour;        
    }   

    public int GetMinute()
    {   
    long totalMilliseconds = System.currentTimeMillis();
    long totalMinutes = totalMilliseconds/60000;
    long currentMinutes = totalMinutes %60; 
    return (int) currentMinutes;    
    }

    public int GetSecond()
    {   
    long totalMilliseconds = System.currentTimeMillis();
    long totalSeconds = totalMilliseconds/1000;
    long currentseconds = totalSeconds %60;
    return (int) currentSecond;
    }

    public static void print()
    {
        time t = new time();
        System.out.println("Current time is " + currentHour + ":" + currentMinute + ":" + currentSecond);
    }

}
0 голосов
/ 14 февраля 2012

Нельзя ссылаться на нестатические члены класса (методы и переменные) из статического метода, поскольку нестатические члены привязаны к конкретному экземпляру класса, в то время как статические члены - нет.

Либо сделайте целые члены нестатичными, и создайте экземпляр класса (создайте объект из него), либо сделайте члены, доступ к которым из статического метода, также статическими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...