Как с самого начала предсказать, даст ли это ошибку во время выполнения или не скомпилируется - PullRequest
1 голос
/ 24 июня 2010

Я смотрю тесты и тесты на различных сайтах (например, blackbeltfactory и т. Д.) О Java. Я сталкиваюсь с вопросами, у которых есть варианты, такие как «не компилируется» или «выбрасывает исключение во время выполнения».

Есть ли способ угадать, что произойдет, на первый взгляд? Или это вопрос знакомства с Java? Я думаю, что это важный момент о том, как работает Java.

Спасибо заранее, Bugra

Ответы [ 3 ]

5 голосов
/ 24 июня 2010

Для человека вы должны "ознакомиться с Java" .

Для машины (или программы, которая есть) она должна следовать правилам, указанным в языке.

Например, данный класс:

class Main  {
     String s;
}

Каков будет результат вызова:

Main m = new Main();
m.s.length();

A) не компилируется?

B) выдает исключение во время выполнения?

Чтобы ответить на этот конкретный вопрос, вы должны знать, как классы определены в Java (чтобы узнать, является ли тот, который я показываю, допустимым определением класса или нет), у вас такжезнать, как определяются атрибуты, значения по умолчанию и т. д., поэтому вы должны ознакомиться с языком.

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

Кстати, знаменитая сертифицированная Sun Java Programmer сертификация - это все о том, что нужно знать, а не о том, как разрабатывать приложение.Речь идет о преобразовании себя в "человеческий компилятор"

1 голос
/ 24 июня 2010

Очевидно, что знание Java лучше поможет. Однако есть некоторые общие правила.

«Не компилировать» означает, что компилятор буквально не может понять синтаксис кода. Это может произойти в результате неуместных или отсутствующих скобок или скобок, методов с неправильным числом аргументов и других подобных вещей:

int a = (3 + 2) - 1);

«Выдает исключение во время выполнения» означает, что написанный код имеет смысл синтаксически, но когда он фактически выполняется, он говорит машине сделать что-то, что по какой-либо причине невозможно. некоторые исключения встроены в язык, например, если вы пытаетесь разделить на ноль, но многие также явно определены и добавлены в код. Программисты используют такие исключения для создания программ, которые явно ломаются при попытке сделать что-то, что им не следует, вместо того, чтобы молча ломаться и вызывать другие проблемы в будущем:

int a = b / c; // very bad if c == 0

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

0 голосов
/ 24 июня 2010

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

...