Указатель - это концепция указания на ссылку. В C и C ++ вы можете явно обращаться к указателю, но в Java мы используем ссылку для указания объектов. Например, если вы передаете экземпляр методу, мы передаем его ссылку, но в итоге указатель передается. когда вы изменяете состояние экземпляра в методе, оно отражает, когда этот экземпляр используется после завершения вызова метода.
Мы используем ссылку в Java, который является указателем относительно JVM.
Когда мы используем новый оператор, он создает экземпляр в куче и возвращает адрес ссылки, на которую он указывает.
Я полагаю, что это ответило бы на ваш вопрос, если бы вы не могли прокомментировать мой ответ.
Я был вдохновлен ответом Пакса и создал алгоритм более общего назначения.
int mod(int a, int b) {
int s = b;
while (s <= a) {
s <<= 1;
}
int r = a;
while (r >= b) {
s >>= 1;
if (s <= r) {
r -= s;
}
}
return r;
}
Он вычитает степень двух кратных b
из a
до результат найден.
РЕДАКТИРОВАТЬ: добавлено условие if
, чтобы оно работало правильно.
Например, если это делает 100% 7, сначала получается, что 7 * 2 * 2 * 2 * 2 = 112. Затем 112 ( s
) делится на 2 и вычитается из 100 ( r
) (когда s <= r
) и делает это постоянно, пока не будет найден модуль. Следовательно,
s = 112 / 2 = 56, r = 100 - 56 = 44
s = 56 / 2 = 28, r = 44 - 28 = 16
s = 28 / 2 = 14, r = 16 - 14 = 2
, следовательно, 100% 7 = 2
откроется откат (спрайты, используемые на этом веб-сайте *). И если вы используете действительно старый браузер, который не поддерживает объект
, он просто проигнорирует этот тег и будет использовать тег img
. См. Информацию о совместимости на веб-сайте caniuse . По состоянию на 2018 г. этот элемент широко поддерживается всеми браузерами IE6 +.
* Если URL-адрес изображения не изменился (снова), в этом случае вы, вероятно, увидите альтернативный текст.
Используя JQuery, вы можете сделать что-то вроде этого:
$(document).ready(function() {
if ($("img").attr("src") != null)
{
if ($("img").attr("src").toString() == "")
{
$("img").attr("src", "images/default.jpg");
}
}
else
{
$("img").attr("src", "images/default.jpg");
}
});
Я не думаю, что можно использовать только HTML. Однако с использованием javascript это должно быть выполнимо. Басично перебираем каждое изображение, проверьте, завершен ли он, и если его naturalWidth равна нулю, это означает, что он не найден. Вот код:
fixBrokenImages = function( url ){
var img = document.getElementsByTagName('img');
var i=0, l=img.length;
for(;i<l;i++){
var t = img[i];
if(t.naturalWidth === 0){
//this image is broken
t.src = url;
}
}
}
Используйте его так:
window.onload = function() {
fixBrokenImages('example.com/image.png');
}
Протестировано в Chrome и Firefox
<style type="text/css">
img {
background-image: url('/images/default.png')
}
</style>
Обязательно укажите размеры изображения и укажите, хотите ли вы, чтобы изображение было мозаичным.
Меня это устраивает. Возможно, вы захотите использовать JQuery для перехвата события.
<img src="foo.jpg" onerror="if (this.src != 'error.jpg') this.src = 'error.jpg';">
Обновлено с помощью jacquargs error guard
Обновлено: только решение CSS
Недавно я увидел демонстрацию Виталия Фридмана отличного решения CSS, о котором я не знал. Идея состоит в том, чтобы применить свойство content
к поврежденному изображению. Обычно : after
или : before
не применяются к изображениям, но когда они повреждены, они применяются.
<img src="nothere.jpg">
<style>
img:before {
content: ' ';
display: block;
position: absolute;
height: 50px;
width: 50px;
background-image: url(ishere.jpg);
</style>
Demo: https: // jsfiddle. net / uz2gmh2k / 2 /
Как показывает скрипт, поврежденное изображение не удаляется, но это, вероятно, решит проблему в большинстве случаев без использования JS и CSS. Если вам необходимо применить разные изображения в разных местах, просто выделите их с помощью класса: .my-special-case img: before {...