Всегда статические методы в Java разрешены во время компиляции?

Вы можете установить модернизатор и использовать простое сенсорное событие. Это очень эффективно и работает на каждом устройстве, на котором я его тестировал, включая поверхность Windows!

Я создал jsFiddle

function isTouchDevice(){
    if(Modernizr.hasEvent('touchstart') || navigator.userAgent.search(/Touch/i) != -1){
         alert("is touch");
            return true;
         }else{
            alert("is not touch");
            return false;
    }
}

8
задан Michael Myers 24 June 2009 в 16:43
поделиться

3 ответа

Да, но если статический метод был удален во время выполнения, будет вызываться соответствующий метод в базовом классе (имя и подпись должны точно соответствовать исходному методу во время компиляции, и метод должен быть доступным по правилам спецификации JVM).

Чтобы уточнить, рассмотрите вызывающий код:

   Derived.fn();

И следующий вызываемый код:

class Base {
    public static void fn() {
        System.err.println("Base");
    }
}
class Derived extends Base {
    public static void fn() {
        System.err.println("Derived");
    }
}

Печатает Производный .

Теперь я компилирую все. Затем перекомпиляция только что производного изменена на:

class Derived extends Base {
}

Печатает База .

Возможно, тогда я перекомпилирую только что производный измененный на:

class Derived {
}

Выдает ошибку.

5
ответ дан 5 December 2019 в 11:26
поделиться

короткий ответ: да

Мне не удалось найти точный раздел спецификации языка Java . Пожалуйста помоги. :)

2
ответ дан 5 December 2019 в 11:26
поделиться

Да, это подробно рассмотрено и объяснено в этой теме на форумах Sun: Новое в Java - нет позднего связывания для статических методов

Несколько цитат:

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

Вызов. статические методы всегда зависят только от типа времени компиляции, из которого они вызываются.

8
ответ дан 5 December 2019 в 11:26
поделиться
Другие вопросы по тегам:

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