Из документации Java :
[Блок try] содержит одну или несколько юридических строк кода, которые могут исключение. (Блоки catch и finally объясняются в следующих двух подразделах.)
blockquote>Исключением является особый вид объекта. Когда вы пишете
new Exception()
, вы создаете новый объект исключения. Когда вы пишетеthrow new Exception()
, вы создаете новую ошибку, а затем бросаете ее в ближайший блок try-catch, прерывая остальную часть вашего кода.Когда вы бросаете исключение, он получает , пойманным блоком try-catch, который он вложен в (внутри). То есть, предполагая, что соответствующий блок catch для этого исключения зарегистрирован. Если код не упакован в блок try-catch, программа автоматически отключается, как только возникает ошибка. Используйте try-catch вокруг любого кода или метода, которые могут вызывать ошибку, особенно из-за пользовательского ввода (в пределах разумного).
Некоторые исключения должны быть пойманы, другие - необязательны для улова. (проверено против непроверенного).
Когда вы добавляете
throws
к сигнатуре метода, вы сообщаете другим методам, что, если они назовут этот метод, у него есть потенциал для выставить проверенное исключение (это не обязательно для снятия флажка). Обратите внимание, что этоthrows
неthrow
. Это не действие, оно описывает, что оно иногда выполняет какое-либо действие.Вы используете эту функцию, когда не хотите улавливать ошибку внутри этого метода, но хотите разрешить метод, вызывающий ваш метод чтобы поймать ошибку сами.
Исключения - это способ заставить вашу программу согласованно реагировать на непредвиденные или недействительные ситуации и особенно полезны, когда требуется ввод пользователя, хотя он также полезен в других ситуациях, таких как ввод / вывод файлов.
Примеры
public CircleWithException() throws InvalidRadiusException { this(1.0); }
Здесь
CircleWithException()
может вызывать InvalidRadiusException (предположительно, этот (1.0) иногда вызывает исключение InvalidRadiusException.)Код вызов этого метода должен иметь:
try { new CircleWithException(); // This calls the method above } catch (InvalidRadiusException e) { // The object "e" is the exception object that was thrown. // this is where you handle it if an error occurs }
Как я уже говорил, исключение - это только определенный тип объекта, который расширяется
Exception
/* Invalid radius class that contains error code */ public class InvalidRadiusException extends Exception { private double radius; /** Construct an exception */ public InvalidRadiusException(double radius) { super("Invalid radius " + radius); this.radius = radius; } /** Return the radius */ public double getRadius() { return radius; } }
. Вышеприведенный код определяет новый тип исключения, специфичный для вашей программы / приложения. Существует много предопределенных исключений в стандартной библиотеке Java, но часто вам нужно создать свой собственный.
Чтобы выбросить это исключение, вы сначала создаете объект InvalidRadiusException и затем бросаете его:
throw new InvalidRadiusException(1.0);
Дело в том, что вы вызываете button
текстовый узел внутри paper-button
и устанавливаете прослушиватель событий на этом узле, который - будучи узлом Text
- не запускает события ( кроме некоторых исключений ).
Кроме того, вы передаете this.go()
как обратный вызов addEventListener
. Это означает, что this.go()
выполняется , а затем возвращаемое значение передается как обратный вызов (в данном случае undefined
, потому что после console.log вы ничего не возвращаете). Вместо этого вы должны передать идентификатор функции, не вызывая ее:
addEventListener('tap', this.go);
Все вместе:
appendNodeToDom() {
let prop = this.result[i]['someProperty'];
let button = document.createElement('paper-button');
let text = document.createTextNode(prop);
button.appendChild(text);
button.addEventListener('tap', this.go); // Add the listener to button
this.shadowRoot.getElementById('buttons').appendChild(node);
}
go() {
console.log('go');
}
Просто небольшая заметка: имейте в виду, что у Polymer много инструментов, чтобы избежать выполнения прямых манипуляций с DOM. Если вам просто нужно добавить кнопку в список, вы можете рассмотреть решение, в котором dom-repeat
отображает кнопки, а изменения вносятся в базовое свойство массива.