Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
tst
0 / 0 / 15
Регистрация: 23.08.2015
Сообщений: 213
#1

Ошибка компиляции - Java SE

16.04.2016, 15:24. Просмотров 311. Ответов 10
Метки нет (Все метки)

Добрый день! При компиляции возникает ошибка
Main.java:11: error: cannot find symbol
System.out.println(a.go);
Подскажите, что я делаю неправильно?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    import java.util.*;
    import java.lang.*;
    import java.io.*;
     
    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            Foo6 a = new Foo6();
            System.out.println(a.go);
        }
    }
     
    class Foo6 {
        int x = 12;
     
        public static void go(final int x) {
        System.out.println(x);
     
        }
    }

http://www.cyberforum.ru/java-j2se/thread2025055.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2016, 15:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка компиляции (Java SE):

Ошибка компиляции
Buildfile: C:\KeyGen\build.xml clean: init: Created dir:...

Ошибка компиляции
Смотрю видеоурок, написал такой код не срабатывает, останвливается на строке: ...

Ошибка компиляции
Объясните пожалуйста! Не пойму, в чем проблема? Начал ругаться на одну строчку,...

Ошибка компиляции
Помогите, пожалуйста. Написал простенький сортировщик пузырьком целочисленных...

Ошибка в компиляции
Написал программу, а компилятор выдает ошибку. Вот программа: class...

10
RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 304
16.04.2016, 15:31 #2
Метод System.out.println должен получать входной аргумент (в скобочка) типа String.
К примеру,

Java
1
2
3
4
5
System.out.println(a.go);
 
public static String go(final int x) {
       return x;
        }
1
tst
0 / 0 / 15
Регистрация: 23.08.2015
Сообщений: 213
16.04.2016, 15:57  [ТС] #3
Да, действительно. А с классом Foo6 все в порядке? - т.е. сможет ли статический метод использовать нестатическую переменную int x?
0
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
16.04.2016, 16:09 #4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            Foo6 a = new Foo6();
            System.out.println(a.go(5));
        }
        static class Foo6 {
        int x = 12; // Эта переменная скрыта для метода go, т.к. используется одноименный параметр в методе
     
        public static int go(final int x) {
        return x;
        }
    }
1
tst
0 / 0 / 15
Регистрация: 23.08.2015
Сообщений: 213
16.04.2016, 16:28  [ТС] #5
Хотелось бы понять, работоспособен ли класс Foo6 в таком виде, т.е. можно ли использовать такой код?
Java
1
2
3
4
5
6
7
 class Foo6 {
        int x = 12;
     
        public static void go(final int x) {
        System.out.println(x);
     
        }
0
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
16.04.2016, 17:00 #6
tst, а что вы хотите чтобы код выводил ?
Если значение локальной переменной x то нужно в методе go создавать объект класса Foo6 и через объект передавать ее методу println() или делать переменную статичной.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        Foo6 a = new Foo6();
        a.go(5);
    }
}
 
class Foo6 {
        int x = 12;
     
        public static void go(final int x) {
            Foo6 a = new Foo6(); // создали объект
        System.out.println(a.x); // передали
        }
// или так:
/*static int x = 12;
     
        public static void go(final int x) {
        System.out.println(Foo6.x);
        }*/
     
        }
В других случаях метод go использует близлежащую одноименную переменную (параметр)
1
tst
0 / 0 / 15
Регистрация: 23.08.2015
Сообщений: 213
16.04.2016, 17:19  [ТС] #7
Основной задачей является тестирование класса Foo6

Добавлено через 11 минут
Вроде бы получилось, код выводит 12. Однако не могу понять почему статический метод в данном случае работает с нестатической переменной?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {            Foo6 a = new Foo6();
            a.go(a.x);
    }
}
class Foo6 {
    int x = 12;
 
    public static void go(final int x) {
    System.out.println(x);
 
    }
}
0
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
16.04.2016, 18:23 #8
tst, потому что вы обращаетесь через объект к конкретному члену класса.
Проще говоря, из статических методов, можно обращаться к не статическим переменным/методам через объекты.
0
tst
0 / 0 / 15
Регистрация: 23.08.2015
Сообщений: 213
16.04.2016, 18:40  [ТС] #9
Теперь яснее, спасибо. Подскажите, а как можно было пытаться сделать по-другому, чтобы получить ошибку компиляции?
0
Igor100
26 / 26 / 24
Регистрация: 23.04.2011
Сообщений: 64
16.04.2016, 19:18 #10
1. Сделать класс Foo6 вложенным вот так:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            Foo6 a = new Foo6();
            System.out.println(a.go());
        }
        static class Foo6 {
        int x = 12;
     
        public static int go() {
        return x; // error: non-static variable x cannot be referenced from a static context
        }
    }
}



2. Также можно немного подредактировать ваш первый вариант:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            System.out.println(Foo6.go());
        }
    }
     
    class Foo6 {
        int x = 12;
     
        public static int go() {
        return x; // error: non-static variable x cannot be referenced from a static context
     
        }
    }


Экпериментируйте.
1
RedPatrick
143 / 115 / 61
Регистрация: 13.01.2016
Сообщений: 304
17.04.2016, 23:35 #11
tst, извините, Вы до сих пор блокнотом пользуетесь? Скачайте себе любую адекватную IDE, половина вопросов вроде такого Вы решите ами и за 5 минут.
0
17.04.2016, 23:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2016, 23:35
Привет! Вот еще темы с решениями:

ошибка компиляции
Помогите пожалуйста! Не пойму, в чем ошибка и как ее устранить? Используйте...

Ошибка при компиляции
Всем привет! Я пытаюсь разобраться в этом коде,но при компиляции выдаётся...

Ошибка при компиляции
Не могу понять почему компилятор выдает ошибку. class Circle { public...

ошибка при компиляции
Всем доброго вечера. Борюсь с одним вопросом - помогите. вот такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru