Как установить точку останова на конструкторе Java по умолчанию в Eclipse?

В целом Вы могли бы ожидать, что кортежи будут немного быстрее. Однако необходимо определенно протестировать конкретный случай (если различие могло бы повлиять на производительность программы - помнят, что "преждевременная оптимизация является корнем всего зла").

Python делает это очень легким: timeit является Вашим другом.

$ python -m timeit "x=(1,2,3,4,5,6,7,8)"
10000000 loops, best of 3: 0.0388 usec per loop

$ python -m timeit "x=[1,2,3,4,5,6,7,8]"
1000000 loops, best of 3: 0.363 usec per loop

и...

$ python -m timeit -s "x=(1,2,3,4,5,6,7,8)" "y=x[3]"
10000000 loops, best of 3: 0.0938 usec per loop

$ python -m timeit -s "x=[1,2,3,4,5,6,7,8]" "y=x[3]"
10000000 loops, best of 3: 0.0649 usec per loop

Так в этом случае, инстанцирование является почти порядком величины быстрее для кортежа, но доступ объекта на самом деле несколько быстрее для списка! Таким образом, если Вы создаете несколько кортежей и получаете доступ к ним многие много раз, это может на самом деле быть быстрее для использования списков вместо этого.

, Конечно, если бы Вы хотите к изменение объект, список определенно будет быстрее, так как необходимо было бы создать весь новый кортеж для изменения одного объекта его (так как кортежи неизменны).

21
задан Greg Mattes 9 December 2009 в 20:26
поделиться

7 ответов

Решение 1. Инициализаторы членов

Если у вас есть какие-либо переменные-члены с инициализаторами, вы можете установить для них точку останова. Например:

class MyClass {
  private int i = 0; // this line can have a breakpoint in Eclipse
}

Решение 2: точки останова загрузки класса

Если вы можете обойтись, нажав эту точку останова только один раз, то вы можете использовать точку останова загрузки класса :

Вы можете установить класс Точка останова нагрузки, который остановится, когда класс быть загруженным [так в оригинале]. Щелкните класс правой кнопкой мыши в проводнике пакетов Project Проводник или просмотр типов и выберите «Переключить точку останова загрузки класса»

Как следует из названия, эта точка останова будет достигнута при первой загрузке класса, поэтому она сработает только один раз (при условии, что у вас есть только один загрузчик классов). Но в зависимости от ваших потребностей этого может быть достаточно.

5
ответ дан 29 November 2019 в 20:48
поделиться

Если вам это действительно нужно, установите точку останова метода в одном из других методов класса, выберите точку останова (представление «Точки останова») и экспортируйте ее. Отредактируйте этот файл, чтобы точка останова указывала на стандартный конструктор. Необходимо изменить по крайней мере следующий атрибут (Galileo):

  • org.eclipse.jdt.debug.ui.JAVA_ELEMENT_HANDLE_ID
  • org.eclipse.jdt.debug.core.methodName - value = "& lt; init & gt ; "
  • org.eclipse.jdt.debug.core.methodSignature - value =" () V "
  • сообщение - не знаю, действительно ли это необходимо

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

Это хитрость, но у меня сработало ...

9
ответ дан 29 November 2019 в 20:48
поделиться

Вы всегда можете создать свой собственный конструктор без аргументов и поставить там точку останова. Но если говорить более конкретно, зачем вам там точка останова? Он просто подключится к функции без аргументов super () . Если у вас есть код, который вам нужен, поместите точку останова внутри этого конструктора.

1
ответ дан 29 November 2019 в 20:48
поделиться

Как насчет создания общедоступного конструктора без аргументов и установки для него точки останова? Если это не поможет, не могли бы вы пояснить, почему бы и нет?

1
ответ дан 29 November 2019 в 20:48
поделиться

вы можете сделать следующее:

public class MyClass {

    public MyClass() {
       super();
    }

}

И затем поставить точку останова на этом. Однако чего вы надеетесь этим добиться?

1
ответ дан 29 November 2019 в 20:48
поделиться

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

Я думал, что Eclipse предоставляет точку останова конструктора по умолчанию, но, увы, только точка останова, загруженная классом в план.

Какую проблему вам нужно решить?

0
ответ дан 29 November 2019 в 20:48
поделиться

Вы можете рассмотреть фреймворк YouDebug , чтобы создать сценарий для сеанса отладки, включая точку останова для любого конкретного метода любого класса.

Точки останова - это обработчики обратного вызова событий, которые вызываются, когда в целевой JVM происходит определенное событие. Вы можете создавать точки останова, вызывая методы точки останова для объекта 'vm'. Эти методы принимают закрытие, которое вызывается при возникновении события, и они часто принимают дополнительные аргументы для управления характером точки останова.

Следующий код определяет точку останова в строке 7 org.acme.SubStringTest. java (или в зависимости от того, в каком исходном файле этот класс определен в:)

vm.breakpoint("org.acme.SubStringTest",7) {
  println "I'm at SubStringTest.java line 7";
}
0
ответ дан 29 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: