Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

РассылкиАрхив Java programmingВыпуск 26-й

Java programming выпуск 26-й

Здравствуйте дорогие читатели!
С наступающим Новым Годом!!!

После долгого перерыва наконец-то увидел свет очередной выпуск рассылки.

В прошлом номере я провел опрос о том, как продолжать рассылку, спасибо всем ответившим и приславшим комментарии к своему голосу.

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

В общем, результат опроса вы можете посмотреть тут.

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

Мне так больше нравится , потому что всё равно читаешь рассылку по настрению , а уж настроение - оно как повезёт. Но вот ваша рассылка почти всегда удачно приходит ;)

Так и вот еще одно:

Дизайн сайта и рассылки неплохо бы сменить. Мало обзоров об новейших технологиях, связанных с Java, например, переводы статей IBM developerWorks и IBM alphaWorks, хотя если сайт только для начинающих, то все это не к чему.

Если кому не трудно помогите с переводами, и я их опубликую.

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

Жду вашей помощи.

Предлагаю принять участи в тестировании обновленного форума.
Пишите найденные багги в этот топик.

Также предлагаю обсудить открытие новых разделов на форуме в топике: Названия разделов форума

Начинающим

Классы (продолжение)

final

Все методы и переменные объектов могут быть замещены по умолча­нию. Если же вы хотите объявить, что подклассы не имеют права за­мещать какие-либо переменные и методы вашего класса, вам нужно объ­явить их как final (в Delphi / C++ не писать слово virtual).


final int FILE_NEW = 1; 

По общепринятому соглашению при выборе имен переменных типа final — используются только символы верхнего регистра (т.е. используются как аналог препроцерных констант C++). Использование final-методов порой приводит к выигрышу в скорости выполнения кода — поскольку они не могут быть замещены, транслятору ничто не мешает заменять их вызовы встроенным (in-line) кодом (байт-код копируется непосредственно в код вызывающего метода).

finalize

В Java существует возможность объявлять методы с именем finalize. Методы finalize аналогичны деструкторам в C++ (ключевой знак ~) и Delphi (ключевое слово destructor). Исполняющая среда Java будет вызывать его каждый раз, когда сборщик мусора соберется уничтожить объект этого класса.

static

Иногда требуется создать метод, который можно было бы использо­вать вне контекста какого-либо объекта его класса. Так же, как в случае main, все, что требуется для создания такого метода — указать при его объ­явлении модификатор типа static. Статические методы могут непосред­ственно обращаться только к другим статическим методам, в них ни в каком виде не допускается использование ссылок this и super. Перемен­ные также могут иметь тип static, они подобны глобальным перемен­ным, то есть доступны из любого места кода. Внутри статических методов недопустимы ссылки на переменные представителей. Ниже приведен пример класса, у которого есть статические переменные, статический метод и статический блок инициализации.


class Static
{ 
 static int a = 3; 
 static int b; 
 static void method(int x)
 { 
  System.out.println("x = " + x); 
  System.out.println("a = " + a); 
  System.out.println("b = " + b); 
 } 
 
 static
 { 
  System.out.println("static block initialized"); 
  b = a * 4; 
 } 

 public static void main(String args[])
 { 
  method(42); 
 }
} 

Ниже приведен результат запуска этой программы.

Х = 42
А = 3
B = 12

В следующем примере мы создали класс со статическим методом и несколькими статическими переменными. Второй класс может вызывать статический метод по имени и ссылаться на статические переменные непосредственно через имя класса.


class StaticClass
{ 
 static int a = 42;
 static int b = 99; 

 static void callme()
 { 
  System.out.println("a = " + a); 
 }
} 

class StaticByName
{ 
 public static void main(String args[])
 { 
  StaticClass.callme(); 
  System.out.println("b = " + StaticClass.b); 
 }
} 

А вот и результат запуска этой программы:

а = 42 b = 99

abstract

Бывают ситуации, когда нужно определить класс, в котором задана структура какой-либо абстракции, но полная реализация всех методов от­сутствует. В таких случаях вы можете с помощью модификатора типа ab­stract объявить, что некоторые из методов обязательно должны быть заме­щены в подклассах. Любой класс, содержащий методы abstract, также должен быть объявлен, как abstract. Поскольку у таких классов отсутствует полная реализация, их представи­телей нельзя создавать с помощью оператора new. Кроме того, нельзя объ­являть абстрактными конструкторы и статические методы. Любой под­класс абстрактного класса либо обязан предоставить реализацию всех абстрактных методов своего суперкласса, либо сам должен быть объявлен абстрактным.


abstract class A
{ 
 abstract void callme(); 
 void metoo()
 { 
  System.out.println("Inside A's metoo method"); 
 }
} 

class B extends A
{ 
 void callme()
 { 
  System.out.println("Inside B's callme method"); 
 }
} 

class Abstract
{ 
 public static void main(String args[])
 { 
  A a = new B(): 
  a.callme(): 
  a.metoo(): 
 }
} 

В нашем примере для вызова реализованного в под­классе класса А метода callme и реализованного в классе А метода metoo используется динамическое назначение методов, которое мы обсуждали раньше.

Inside B's callrne method Inside A's metoo method

Тема "на заказ"

Первый сервлет

Что такое сервлет ? Это класс порожденный от класса HttpServlet с переопреденными методами doGet и doPost (управление приходит в один из этих методов в зависимости от того какого типа был запрос. Надеюсь у Вас есть некоторый опыт в cgi-программировании для того чтобы понять разницу между ними).

Входиные-выходные параметры передаются в этих методах через:

HttpServletRequest req
HttpServletResponse res

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


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class myServlet extends HttpServlet
{
  public final void doGet(HttpServletRequest req,
                          HttpServletResponse res)
                          throws ServletException,IOException
  { doRequest(req, res);
  }

  public final void doPost(HttpServletRequest req,
                           HttpServletResponse res)
                           throws ServletException,IOException
  { doRequest(req, res);
  }

  private void doRequest(HttpServletRequest req,
                         HttpServletResponse res)

  { try{ res.setContentType("text/html; charset=windows-1251");
         PrintWriter out = res.getWriter();
         out.println("<html><body>");
         out.println("<h1>Hello, world !</h1>");
         out.println("</body></html>");
       } catch(Exception e) { message("Exception in error():"+e);}
  }
}

Дальше я думаю что Вам захочется обрабатывать html-формы? Так это очень просто!
Это делает код:

String res=req.getParameter("имя параметра");

А как получить список всех параметров и "пройтись" по этому списку? Пожалуста:


 Enumeration e=req.getParameterNames();
 while(e.hasMoreElements())
 { String paramName=(String)e.nextElement();    // имя параметра
   String paramVal=req.getParameter(paramName); // значение параметра
   ...
 }

Вопрос - ответ

Вопрос: Подскажите, как можно одновременно загрузить несколько картинок, чтобы они отображались одновременно, а то у меня получается, что они отображаются с небольшим интервалом по мере загрузки?
Александр

Ответ: Для этих целей можно использовать класс MediaTracker:


MediaTracker tracker = new MediaTracker(this);

Image img1 = getToolkit().createImage(getClass().getResource("URL"));
Image img2 = getToolkit().createImage(getClass().getResource("URL "));

tracker.addImage(img1,0);
tracker.addImage(img2,0);

try
{
tracker.waitForAll();
}catch(InterruptedException ie){}

Вопрос: Можно ли каким либо образом приостановит выполнение цикла при определенном условии и затем продолжить его выполнение без потери данных.
Юрий

Ответ:


В необходимом месте в цикле можно сделать следующим образом:

  try
  {
   Thread.sleep(millis);
  }
  catch (InterruptedException e)
  {
  }
Где millis время приостановки цикла в миллисекундах.

Вопрос: Мне необходимо чтобы Label отображалась не строка а несколько строк, можно ли это сделать?

Ответ: Да можно, но используя класс JLabel, из библиотеки javax.swing.* используя встроенную возможность применять HTML для форматирования текста:


JLabel jlabel = new JLabel("<html;><body; color=#00b400><p;>Привет!
                            <br;>Всем!</p></body></html>");

Вопрос: Как хранить настройки java программ?

Ответ: Прочитайте статью на эту тему Как хранить настройки java программ?.

Программный код…

Посылка почты с приложением через javamail



///
/// Посылка Сообщения
///
String to = args[0];
String from = args[1];
String host = args[2];
boolean debug = Boolean.valueOf(args[3]).booleanValue();
   
// Устанавливаем свойиства и получаем Сессию по умолчанию
Properties props = new Properties();
props.put("mail.smtp.host", host);
   
Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);

try {
    // Создаем сообщение
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address = {new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO, address);
    msg.setSubject("JavaMail APIs Multipart Test");
    msg.setSentDate(new Date());
   
    // создаем и заполняем первую часть сообщения
    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setText("Your mail");
   
    // создаем и заполняем вторую часть сообщения
    MimeBodyPart mbp2 = new MimeBodyPart();
    // Можно использовать setText(text, charset), для предоставления в нужной кодировке!
    mbp2.setContent(msgText2, "image/jpg");
   
    // Создаем Multipart и добавляем в него ранее созданные части
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    mp.addBodyPart(mbp2);
   
    // Добавляем Multipart в сообщение
    msg.setContent(mp);
    
    // Посылаем сообщение
    Transport.send(msg);
} catch (MessagingException mex) {
    mex.printStackTrace();
    Exception ex = null;
    if ((ex = mex.getNextException()) != null) {
   ex.printStackTrace();
    }
}

JavaScript

Вопрос: Как в JavaScript определить нажат ли SHIFT?
Андрей

Ответ:


  if (event.shiftKey) {alert("Вы нажали Shift!")} 

Вопрос: Как проверить емайл введенный в форму??

Ответ:


<script;>
function checK(f) {
if (f.email.value=='') {alert("не... мыло надо написать");f.email.focus();return false}
if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(f.email.value)){
return true
}
alert('такое мыло не пойдет.\nисправляем');f.email.select()
return false
}
</script>
Решение вопроса от Максима

Вопрос: Попал я на Ваш сайт с целью найти скрипт для отправки почты. И нашел: /java/examples/sendmail0.html Но я не понял,каким боком и куда его прописывать.

Андрей

Ответ:

Это не скрипт это Java-приложение. Не путайте Java и JavaScript. С помощью JavaScript вы не отправите почту.

Вопрос: Как отключить кэширование страниц в браузере с помощью JavaScript.?

Ответ: Вам не позволит этого сделать политика безопасности.

Вопрос: Как проверить с какова адреса(WWW) пришел посетитель?

Ответ:


document.referrer

Вопросы присылайте на E-mail [email protected] с пометкой "Вопрос по Java".
Или задавайте их на форуме

Жду вопросов и предложений.

Юрий Ладик.


Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри
"Технологии программирования на Java 2. Книга 2. Распределенные приложения"
Подробнее>>
Заказать>>


Е. Е. Аккуратов
"Знакомьтесь: Java. Самоучитель"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!



Выпуск 29-й
Выпуск 28-й
Выпуск 27-й
Выпуск 26-й
Выпуск 25-й
Выпуск 24-й
Выпуск 23-й
Выпуск 22-й
Выпуск 21-й
Выпуск 20-й
Выпуск 19-й
Выпуск 18-й
Выпуск 17-й
Выпуск 16-й
Выпуск 15-й
Выпуск 14-й
Выпуск 13-й
Выпуск 12-й
Выпуск 11-й
Выпуск 10-й
Выпуск 9-й
Выпуск 8-й
Выпуск 7-й
Выпуск 6-й
Выпуск 5-й
Выпуск 4-й
Выпуск 3-й
Выпуск 2-й
Выпуск 1-й