Size: a a a

2020 July 15

GV

Gukov Viktor in learn.java
Alex F
То есть компилятор видит обращение к статической переменной и делает вместо koala.count -> Koala.count во всех местах?
javap твой лучший друг
источник

AF

Alex F in learn.java
Gukov Viktor
javap твой лучший друг
Поглядим, благодарю )
источник

GV

Gukov Viktor in learn.java
Alex F
То есть компилятор видит обращение к статической переменной и делает вместо koala.count -> Koala.count во всех местах?
Вот так например выглядит вызов статик метода через инстанс/класс
Instance call:
  public static void main(java.lang.String[]);
   Code:
      0: aconst_null
      1: astore_1
      2: aload_1
      3: pop
      4: invokestatic  #7                  // Method Hello$Test.show:()V
      7: return

Class call:
  public static void main(java.lang.String[]);
   Code:
      0: aconst_null
      1: astore_1
      2: invokestatic  #7                  // Method Hello$Test.show:()V
      5: return
источник

GV

Gukov Viktor in learn.java
Как видишь просто invokestatic  #7, без всяких изысков
источник

СМ

Сергей Маслов... in learn.java
Всем привет!
источник

AF

Alex F in learn.java
Вижу, но пока не понимаю )
источник

AF

Alex F in learn.java
Compiled from "KoalaTester.java"
public class KoalaTester {
 public KoalaTester();
   Code:
      0: aload_0
      1: invokespecial #1                  // Method java/lang/Object."<init>":()V
      4: return

 public static void main(java.lang.String[]);
   Code:
      0: new           #7                  // class Koala
      3: dup
      4: invokespecial #9                  // Method Koala."<init>":()V
      7: astore_1
      8: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     11: aload_1
     12: pop
     13: getstatic     #16                 // Field Koala.count:I
     16: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     19: aconst_null
     20: astore_1
     21: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     24: aload_1
     25: pop
     26: getstatic     #16                 // Field Koala.count:I
     29: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     32: return
}

на 13 строке получается он уже обращается по имени класса, а не через переменную.
источник

GV

Gukov Viktor in learn.java
Alex F
Compiled from "KoalaTester.java"
public class KoalaTester {
 public KoalaTester();
   Code:
      0: aload_0
      1: invokespecial #1                  // Method java/lang/Object."<init>":()V
      4: return

 public static void main(java.lang.String[]);
   Code:
      0: new           #7                  // class Koala
      3: dup
      4: invokespecial #9                  // Method Koala."<init>":()V
      7: astore_1
      8: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     11: aload_1
     12: pop
     13: getstatic     #16                 // Field Koala.count:I
     16: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     19: aconst_null
     20: astore_1
     21: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     24: aload_1
     25: pop
     26: getstatic     #16                 // Field Koala.count:I
     29: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     32: return
}

на 13 строке получается он уже обращается по имени класса, а не через переменную.
Так и я о чем. Когда компилятор видит обращение к статическому методу/переменной через инстанс, он полностью игнорирует её значение, и получает данные через её класс
источник

D

DarkPerl in learn.java
Сергей Маслов
Всем привет!
Привет )
источник

СМ

Сергей Маслов... in learn.java
Ребята, у меня к вам вопрос. Я знаю массивы, условные конструкции, методы, классы. Но не могу что-либо дельное написать.
К примеру, я хочу написать tictactoe, но никуда не подсматривая(stackoverflow, тостер) не могу, или не понимаю.
У меня к вам вопрос: вы берете решение проблемы из головы и пишите из головы? Как вы этому учились?
Спасибо!!
источник

СМ

Сергей Маслов... in learn.java
И вроде неплохо решаю задачи на алгоритмы на кодворсах и из учебников
источник

D

DarkPerl in learn.java
Сергей Маслов
Ребята, у меня к вам вопрос. Я знаю массивы, условные конструкции, методы, классы. Но не могу что-либо дельное написать.
К примеру, я хочу написать tictactoe, но никуда не подсматривая(stackoverflow, тостер) не могу, или не понимаю.
У меня к вам вопрос: вы берете решение проблемы из головы и пишите из головы? Как вы этому учились?
Спасибо!!
Сначала идея.
Потом осмысление задачи.
Поиск нужных инструментов и пишется алгоритм.
Потом уже код и тесты.
И разумеется все никогда не запомнишь. Учи по смыслу, а не по названию классов/методов и тд и тп.
источник

AF

Alex F in learn.java
Gukov Viktor
Так и я о чем. Когда компилятор видит обращение к статическому методу/переменной через инстанс, он полностью игнорирует её значение, и получает данные через её класс
Добавил переменную класса. Видно, что они отличаются в процессе создания (getstatic/getfield), но всё равно даже на не статической он пишет класс:
 Code:
      0: new           #7                  // class Koala
      3: dup
      4: invokespecial #9                  // Method Koala."<init>":()V
      7: astore_1
      8: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     11: aload_1
     12: pop
     13: getstatic     #16                 // Field Koala.count:I
     16: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     19: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     22: aload_1
     23: getfield      #26                 // Field Koala.other:I
     26: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     29: aconst_null
     30: astore_1
     31: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     34: aload_1
     35: pop
     36: getstatic     #16                 // Field Koala.count:I
     39: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     42: getstatic     #10                 // Field java/lang/System.out:Ljava/io/PrintStream;
     45: aload_1
     46: getfield      #26                 // Field Koala.other:I
     49: invokevirtual #20                 // Method java/io/PrintStream.println:(I)V
     52: return
источник

AF

Alex F in learn.java
> Koala.count
> Koala.other
источник

DC

Denis Chikanov in learn.java
Сергей Маслов
Ребята, у меня к вам вопрос. Я знаю массивы, условные конструкции, методы, классы. Но не могу что-либо дельное написать.
К примеру, я хочу написать tictactoe, но никуда не подсматривая(stackoverflow, тостер) не могу, или не понимаю.
У меня к вам вопрос: вы берете решение проблемы из головы и пишите из головы? Как вы этому учились?
Спасибо!!
Постепенно учиться писать от малого к большему.
Сначала учишься писать маленькие методы. Потом классы. Потом простые и предельно понятные микроприложеньица. Потом что-то ещё чуть большее.
источник

AF

Alex F in learn.java
Ясен пень после компиляции будет ошибка при запуске если вызвать не статик после k=null ) Тут понятно почему. Вроде. А то уже начинаю сомневаться...
источник

GV

Gukov Viktor in learn.java
Сергей Маслов
Ребята, у меня к вам вопрос. Я знаю массивы, условные конструкции, методы, классы. Но не могу что-либо дельное написать.
К примеру, я хочу написать tictactoe, но никуда не подсматривая(stackoverflow, тостер) не могу, или не понимаю.
У меня к вам вопрос: вы берете решение проблемы из головы и пишите из головы? Как вы этому учились?
Спасибо!!
1. Сначала сам "на бумажке" пишешь небольшой пример того, что тебе надо сделать
В случае крестиков ноликов, это будет нарисовать на бумаге обычную партию

2. Разбиваешь данный пример на конкретные шаги, которые нужно пройти, чтобы получить результат.
Например: разметить поле, выбрать фигуры для игрока, очередность ходов, условия выигрыша

3. Находишь шаблоны (закономерности) в алгоритме из пункта 2. Какой из пунктов работает по условиям, какие повторяются, какие значения они принимают
Если не получается найти закономерности, повторяешь пункты 1+2 на более простых примерах /  других вариантах

4. Мысленно идешь по шагам и проверяешь, корректный ли получается результат

5. Перекладываешь получившийся алгоритм в код

6. Проверяешь правильность работы программы на тестовых примерах, проверяешь что программа корректно обрабатывает п.2

7. Отлаживаешь проваленные тестовые случаи, повторяешь п.6
источник

СМ

Сергей Маслов... in learn.java
Спасибо!!
источник

СМ

Сергей Маслов... in learn.java
Всем!!
источник

D

DarkPerl in learn.java
Если обобщить вышесказанное ребятами, то суть звучит так - нельзя написать то, что не мыслится )
Нужна четкая идея )
источник