Текст книги "Java: руководство для начинающих (ЛП)"
Автор книги: Герберт Шилдт
Жанр:
Программирование
сообщить о нарушении
Текущая страница: 1 (всего у книги 36 страниц)
Table of Contents
Introduction
Введение
Основы Java
Введение в типы данных и операторы
Управляющие операторы
Введение в классы, объекты и методы
Дополнительные сведения о типах данных и операторах
Дополнительные сведения о методах и классах
Наследование
Пакеты и интерфейсы
Обработка исключений
Ввод-вывод данных
Многопоточное программирование
Перечисления, автоупаковка, статический импорт и аннотации
Обобщения
Апплеты, события и прочее
Введение в Swing
Приложение A. Ответы на вопросы дня самопроверки
Приложение B. Применение документирующих комментариев в Java
Java: руководство для начинающих
Герберт Шилдт
Введение
Основы Java
Введение в типы данных и операторы
Управляющие операторы
Введение в классы, объекты и методы
Дополнительные сведения о типах данных и операторах
Дополнительные сведения о методах и классах
Наследование
Пакеты и интерфейсы
Обработка исключений
Ввод-вывод данных
Многопоточное программирование
Перечисления, автоупаковка, статический импорт и аннотации
Обобщения
Апплеты, события и прочее
Введение в Swing
Приложение A. Ответы на вопросы дня самопроверки
Приложение B. Применение документирующих комментариев в Java
Введение
Java считается одним из самых значительных и широко распространенных языков программирования, поскольку ему принадлежит исключительная роль в разработке приложений для Интернета. Для того чтобы профессионально заниматься разработкой веб-приложений, нужно досконально знать Java. Поэтому, если хотите связать свое будущее с программированием веб-приложений, вам нужно выбрать подходящий для этого язык и как следует изучить его. Кроме того, Java принадлежит ведущая роль в программировании смартфонов на платформе Android. Проще говоря, программирование на Java составляет основу большей части современной вычислительной техники.
Цель этой книги – обучить вас, читатель, основам программирования на языке Java. В ней применяется поэтапный подход к освоению языковых средств на многочисленных примерах, упражнениях на самопроверку и несложных проектах. Для изучения Java по этой книге не обязательно иметь какой-то опыт программирования. Книга начинается с самых основных понятий, включая компилирование и выполнение программ на Java. Затем речь пойдет о ключевых словах и языковых средствах и конструкциях, составляющих основу Java. После этого рассматриваются более сложные языковые средства Java, в том числе многопоточное программирование и обобщения. И завершается книга введением в библиотеку Swing. Все это позволит вам получить ясное представление об основах программирования на Java.
Но эта книга – лишь первый шаг на пути к освоению Java, поскольку для профессионального программирования на Java нужно знать не только составные элементы этого языка, но и многочисленные библиотеки и инструменты, существенно упрощающие процесс разработки программ. Проработав материал этой книги, вы получите достаточно знаний, чтобы приступить к изучению всех остальных аспектов Java. Эволюция Java
Немногие языки могут похвастаться тем, что им удалось изменить общее представление о программировании. Но и в этой “элитной” группе один язык выделяется среди прочих. Его влияние очень быстро почувствовали все программисты. Речь, конечно же, идет о Java. Не будет преувеличением сказать, что выпуск в 1995 году компанией Sun Microsystems Inc. версии Java 1.0 вызвал настоящую революцию в программировании. В результате Всемирная паутина стала по-настоящему интерактивной средой. Между тем Java установил новый стандарт в разработке языков программирования.
Со временем Java усовершенствовался. В отличие от многих других языков, в которых новые средства внедрялись относительно медленно, Java всегда находился на переднем крае разработки языков программирования. Одной из причин, позволивших добиться этого, послужило создание вокруг Java плодотворной атмосферы, способствовавшей внедрению новых идей. В результате язык Java постоянно совершенствовался: одни его изменения были незначительными, а другие – весьма существенными.
Первым существенным обновлением Java стала версия 1.1. Изменения в ней были более значительны, чем это обычно подразумевает переход к новой версии языка программирования. В версии Java 1.1 были добавлены многие библиотечные элементы, переопределены средства обработки событий, перекомпонованы многие функциональныесредства исходной библиотеки версии 1.0.
Следующим этапом развития данного языка стала платформа Java 2, где цифра 2 обозначает “второе поколение”. Ее создание стало поворотным событием, ознаменовавшим начало “новой эпохи” Java. Первым выпуском Java 2 стала версия 1.2. На первый взгляд, несоответствие номеров в обозначениях Java 2 и версии 1.2 может показаться странным. Дело в том, что номером 1.2 сначала обозначались библиотеки Java и только затем весь выпуск. Компания Sun перекомпоновала программный продукт Java в J2SE (Java 2 Platform Standard Edition – Стандартная версия платформы Java 2), и с тех пор номера версии стали относиться именно к этому продукту.
Затем появилась версия J2SE 1.3, в которую были внесены первые значительные изменения по сравнению с первоначальным выпуском Java 2. Новые функциональные средства были в основном добавлены к уже существующим и более тесно связаны со средой разработки. Версия J2SE 1.4 стала очередным этапом в развитии Java. Она содержала новые важные средства, в том числе цепочки исключений, канальный ввод-вывод и ключевое слово assert.
Следующая версия J2SE 5, по сути, стала вторым революционным преобразованием Java. В отличие от большинства предыдущих модернизаций, которые сводились к важным, но предсказуемым усовершенствованиям, в J2SE 5 были существенно расширены рамки применения и функциональные возможности языка, а также повышена его производительность. Для более ясного представления о масштабах изменений, внесенных в версии J2SE 5, ниже приводится перечень новых средств, которые рассматриваются в этой книге.
Обобщения
Автоупаковка и автораспаковка
Перечисления
Усовершенствованный вариант for-each цила for
Аргументы переменной длины
Статический импорт
Аннотации
В этот список не вошли несущественные дополнения или поэтапные изменения, характерные для перехода к новой версии. Каждый элемент этого списка представляет собой существенное дополнение Java. Для поддержки одних нововведений, в том числе обобщений, варианта for-each цикла for и аргументов переменной длины, пришлось ввести новые синтаксические конструкции в язык. А другие нововведения, например автоупаковка и автораспаковка, повлияли на семантику языка. И наконец, аннотации открыли совершенно новые возможности для программирования.
Особое значение новых языковых средств проявилось в том, что новая версия получила номер 5. Логично предположить, что номером очередной версии Java должен бы стать 1.5. Но нововведения оказались настолько значительными, что переход от версии 1.4 к 1.5 не отражал масштабы внесенных изменений. Поэтому разработчики из компании Sun решили увеличить номер версии до 5, подчеркнув тем самым важность нововведений. В итоге новая версия получила название J2SE 5, а комплект инструментaльныx средств разработчиков стал называться JDK 5. Но ради согласованности с предыдущими версиями было решено использовать 1.5 в качестве внутреннего номера версии, на который можно ссылаться как на номер версии, используемый при разработке. Номер 5 в J2SE 5 означает номер версии данного программного продукта.
Следующая версия Java называется J2SE 6. Это означает, что в компании Sun вновь решили изменить название платформы Java. Прежде всего, из названия исчезла цифра 2. Теперь платформа называется Java SE, а официальное имя продукта – Java Platform, Standard Edition 6. Как и в J2SE 5, цифра 6 в Java SE 6 означает номер версии программного продукта. А внутренним номером версии для использования при разработке является 1.6.
Версия Java SE 6 была построена на основе J2SE 5, но отличается от последней рядом нововведений. Изменения в этой версии не такие масштабные, как в предыдущей, но в ней были усовершенствованы библиотеки прикладного пользовательского интерфейса (API), добавлен ряд новых пакетов и улучшена исполняющая система. По существу, в версии Java SE 6 были закреплены усовершенствования, внедренные в J2SE 5.
Самая последняя версия Java называется Java SE 7, а соответствующий комплект инструментальных средств разработчиков – JDK 7. Данной версии присвоен внутренний номер 1.7. Java SE 7 – это первая основная версия Java, выпущенная после того, как компания Sun Microsystems Inc. была приобретена компанией Oracle (этот процесс начался в апреле 2009 года и завершился в январе 2010 года). В версии Java SE 7 появилось немало новых средств, в том числе существенные дополнения в сам язык и в библиотеки API. Усовершенствована также исполняющая система Java, в которой теперь поддерживаются программы, написанные на других языках программирования.
Наиболее важные средства, внедренные в версии Java SE 7 и рассматриваемые в этой книге, были разработаны в рамках проекта под названием Project Coin. В этом проекте преследовалась цель определить ряд незначительных изменений в языке Java, которые должны быть внедрены в JDK 7. И хотя эти изменения в целом называются “незначительными”, их последствия довольно значительны для разрабатываемых программ. На самом деле для многих программистов они могут стать самыми важными среди всех новых средств, появившихся в Java SE 7. Ниже перечислены новые языковые средства Java SE 7, рассматриваемые в этой книге.
Возможность управлять оператором switch с помощью объектов типа String.
Двоичные целочисленные литералы.
Символы подчеркивания в числовых литералах.
Расширенный оператор try, называемый оператором try с ресурсами и поддерживающий автоматическое управление ресурсами. (Например, файловый поток может быть теперь закрыт, если он больше не нужен.)
Выводимость типов (посредством ромбовидного оператора) при построении обобщенного экземпляра объекта.
Усовершенствованная обработка исключений, благодаря которой два или более исключения могут быть перехвачены одним (многозаходным, как мышеловка) оператором catch, а также улучшенный контроль типов для исключений, которые генерируются повторно.
Как видите, средства, разработанные в проекте Project Coin в качестве незначительных языковых изменений, сулят выгоды, которые никак нельзя отнести к разряду “незначительных”. В частности, оператор try с ресурсами позволяет существенно сократить объем написанного кода.
Материал предыдущего издания этой книги был обновлен и отражает особенности версии Java SE 7. Новые средства, обновления и дополнения Java SE 7 обозначаются соответствующим образом на страницах нового издания книги. Структура книги
Эта книга представляет собой учебное пособие, разделенное на 15 глав, в каждой из которых рассматриваются отдельные вопросы программирования на Java. Материал каждой последующей главы основывается на предыдущей. Отличительная особенность книги состоит в том, что в ней используется ряд специальных приемов, повышающих эффективность обучения. Основные навыки и понятия
Каждая глава начинается с рассмотрения самых важных для программирования навыков, которыми нужно овладеть. Упражнения для самопроверки
В конце каждой главы приведено упражнение для самопроверки, позволяющее читателю проверить приобретенные им знания. Ответы на вопросы к этим упражнениям приведены в приложении А. Обращение к знатоку
На страницах книги вам будут встречаться врезки “Обращение к знатоку”. Они содержат дополнительные сведения или любопытные замечания по рассматриваемой теме в форме вопросов и ответов. Примеры для опробования
В каждой главе содержится один или несколько примеров для опробования, которые представляют собой несложные проекты для закрепления полученных знаний на практике. Как правило, это реальные примеры, с которых можно начинать разработку собственных прикладных программ. Навыки программирования
Для чтения этой книги никаких особых навыков программирования не требуется. Если же вы программировали прежде, вам будет проще усваивать материал этой книги. Но, поскольку Java имеет ряд принципиальных отличий от других распространенных языков программирования, не спешите с выводами. Даже если у вас имеется немалый опыт программирования, внимательно отнеситесь к изучению материала этой книги. Необходимое программное обеспечение
Для компиляции и запуска программ, исходные коды которых представлены в этой книге, вам потребуется последняя версия комплекта Java Development Kit – (JDK). На момент написания данной книги это был комплект JDK 7 от компании Oracle для версии Java SE 7. О том, как найти и установить такой комплект, речь пойдет в главе 1.
Если вы пользуетесь более ранней версией Java, например Java 5, то и в этом случае сможете извлечь пользу из этой книги. Но вам не удастся скомпилировать и выполнить те программы, в которых используются новые функциональные возможности Java. Исходный код примеров программ
Имейте в виду, что исходный код всех примеров программ и проектов, представленных в этой книге, свободно доступен по адресу www. oraclepressbooks . com. Особая благодарность
Особая благодарность выражается Дэнни Кауэрду – научному рецензенту настоящего издания книги. Его советы, предложения и идеи оказались очень ценными и дельными. Другая литература на данную тему
Эта книга – лишь одна из целого ряда книг по программированию, написанных Гербертом Шилдтом. Возможно, вас заинтересуют и другие труды этого автора. Тем, кто хочет больше узнать о программировании на Java, рекомендуются следующие книги данного автора.
Полный справочник по Java (ИД “Вильямс”, 2012 г.) ,
Java. Методики программирования Шилдта (ИД “Вильямс”, 2008 г.)
Искусство программирования на Java (ИД “Вильямс”, 2005 г.)
SWING:руководство для начинающих (ИД “Вильямс”, 2007 г.)
Если хотите изучить C++, вам помогут перечисленные ниже книги.
Полный справочник по C++ (ИД “Вильямс”, 2007 г.)
C++. Руководство для начинающих (ИД “Вильямс”, 2005 г.)
STL Programming From the Ground Up (об основах программирования на C++ средствами стандартной библиотеки шаблонов; издательство Osborne/McGraw-Hill, 1998 г.)
C++. Методики программирования Шилдта (ИД “Вильямс”, 2009 г.)
Если вас интересует язык С#, обратите внимание на следующие книги Г. Шилдта.
Полный справочник по C# 4.0 (ИД “Вильямс”, 2010 г.)
С#. Руководство для начинающих 3.0 (ИД “Вильямс”, 2008 г.)
И наконец, тем, кто хочет изучить язык С, можно порекомендовать книгу Полный справочник по С (ИД “Вильямс”, 2007 г.)
За дополнительными рекомендациями обращайтесь непосредственно к Герберту Шилдту – признанному авторитету в области программирования.
Глава 1 Основные навыки и понятия
История развития и концепция Java
Влияние Java на развитие Интернета
Назначение байт-кода
Основные свойства Java
Основные принципы объектно-ориентированного программирования
Написание, компиляция и выполнение простой программы на Java
Использование переменных
Использование управляющих операторов if и for
Создание кодовых блоков
Расположение в строке, отступление от края и завершение операторов
Ключевые слова Java
Правила применения идентификаторов Java
Развитие Интернета и, в частности, Всемирной паутины (или просто веб) оказало существенное влияние на состояние вычислительной техники. До появления веб в распоряжении большинства пользователей были лишь персональные компьютеры, работавшие независимо друг от друга. В настоящее время почти все они подключены к Интернету, который в свою очередь претерпел существенные изменения. Если первоначально Интернет предоставлял лишь удобную возможность обмениваться информацией в файлах или иным способом, то теперь он превратился в разветвленную среду распределенных вычислений. Подобные изменения привели к появлению нового подхода к программированию, основанного на языке Java.
Язык Java особенно удобен для написания интернет-приложений, но область его применения этим не ограничивается. Появление Java стало коренным переломом в программировании, поскольку изменило наше представление о форме и назначении программ. В настоящее время программист не может считать себя профессионалом, если он не умеет писать программы на Java. Проработав материал настоящей книги, вы сможете овладеть основами этого языка программирования.
Данная глава служит введением в язык Java. В ней представлена краткая история развития Java, концепция разработки программ и некоторые наиболее важные средства этого языка. Начинающим труднее всего уяснить, что в языке программирования не существует независимых элементов, но все они взаимосвязаны. Такая взаимосвязанность характерна и для Java. В самом деле, очень трудно рассматривать какой-то один аспект Java в отрыве от других. И для того чтобы преодолеть подобное затруднение, в этой главе дается краткий обзор ряда языковых средств Java, включая общую форму программы на Java, основные управляющие структуры и операторы. Не вдаваясь в детали, уделим основное внимание общим понятиям и принципам построения всех программ на Java. Истоки Java
Главными причинами, побуждающими к созданию нового языка программирования, служат совершенствование искусства программирования или изменения в вычислительной среде. И Java не является исключением из этого правила. Опираясь на богатое наследие С и C++, этот язык программирования уточнен и дополнен средствами, отражающими текущее положение дел в программировании. Отвечая потребностям возникшей интерактивной среды, Java предоставляет средства, упрощающие создание прикладных программ с сильно распределенной архитектурой.
Язык Java был задуман в 1991 году сотрудниками компании Sun Microsystems Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Уортом (Chris Warth), Эдом Фрэнком (Ed Frank) и Майком Шериданом (Mike Sheridan). Сначала этот язык получил имя Oak, но в 1995 году он был переименован в Java. Как ни странно, разработчики языка первоначально не предназначали его для разработки интернет-приложений. Они стремились создать платформенно-независимый язык, на котором можно было бы создавать встраиваемое программное обеспечение для различной бытовой аппаратуры с микропроцессорным управлением, в том числе тостеров, микроволновых печей и пультов дистанционного управления. В таких устройствах применялись контроллеры на микропроцессорах разной архитектуры, а исполняемый код, генерируемый компиляторами большинства существовавших в то время языков программирования, был ориентирован на конкретный процессор. Характерным тому примером может служить язык C++.
Несмотря на то что программу, написанную на C++, можно выполнить на процессоре практически любого типа, сделать это можно, лишь скомпилировав ее в исполняемый код команд конкретного процессора. Создание компиляторов – длительный и трудоемкий процесс, поэтому в поисках оптимального решения Гослинг и другие члены рабочей группы остановились на межплатформенном языке, для которого компилятор генерировал бы код, способный выполняться на разных процессорах в различных вычислительных средах. В конце концов их усилия увенчались созданием языка, известного теперь под названием Java.
В то время как разработчики Java уточняли детали созданного ими языка, начала постепенно развиваться Всемирная паутина (веб), во много определившая его будущее. Если бы не веб, Java, вероятно, нашел бы лишь ограниченное применение, главным образом в разработке программ, встраиваемых в специализированные контроллеры. Но как только веб стал реальностью, появилась острая потребность в переносимых программах, что и послужило основной побудительной причиной для выдвижения Java на передний план в качестве основного языка разработки подобных программ. Набираясь опыта, многие программисты очень быстро приходят к выводу, что переносимость программ – это нечто вроде труднодостижимого идеала. Задача создания межплатформенных программ возникла едва ли не вместе с появлением первых компьютеров, но взяться за ее решение так и не удавалось из-за необходимости решать другие более важные и неотложные задачи. Тем не менее с появлением Интернета и веб задача переносимости программ перешла в разряд совершенно неотложных. Ведь Интернет состоит из множества разнотипных компьютеров с различной архитектурой процессоров и разными операционными системами.
В итоге увлекательная, но маловажная задача неожиданно стала чрезвычайно актуальной. В 1993 году разработчикам Java стало ясно, что задачу переносимости нужно решать не только при программировании микропроцессорных устройств, но и при создании кода для интернет-приложений. Иными словами, сфера применения языка Java внезапно расширилась. И если программирование микроконтроллеров стало побудительной причиной для создания Java, то Интернет способствовал широкому распространению этого языка. Взаимосвязь Java с языками С и C++
Язык Java очень похож на языки С и C++. От С язык Java унаследовал синтаксис, а от C++ – объектную модель. Сходство Java с языками С и C++ очень важно. Во– первых, многие программисты знакомы с синтаксисом С и C++, что упрощает изучение языка Java. Те же, кто освоил Java, могут без труда изучить С и C++.
И во-вторых, программирующим на Java не приходится изобретать колесо. Они могут успешно применять известные и хорошо зарекомендовавшие себя подходы. Современная эпоха в программировании, по существу, началась с языка С. Затем появился язык C++, а после него – Java. Имея такое богатое наследство, Java предоставляет программистам производительную и логически согласованную среду, в которой были реализованы лучшие из уже известных решений и добавлены новые средства, необходимые для интерактивной среды. Очень важно отметить тот факт, что вследствие своей схожести языки С, C++ и Java сформировали концептуальную основу для профессионального программирования. При переходе от одного языка к другому программистам не приходится преодолевать глубокие пропасти принципиального характера.
Один из принципов проектирования, положенных в основу С и C++, отдает ведущую роль программисту. Разработчики Java также следовали этому принципу. Если не учитывать ограничения, накладываемые средой Интернета, то следует признать, что Java предоставляет программисту полный контроль над кодом. Если вы умеете грамотно программировать, это будет видно по вашим программам. Недостаток опыта также отразится на ваших программах. Одним словом, Java – язык не для дилетантов, а для профессионалов.
У Java имеется еще одно сходство с языками С и C++: все эти языки были задуманы, разработаны, проверены и уточнены программистами-практиками. В их основу положены реальные потребности их создателей. При таком подходе к разработке языка программирования велика вероятность получить качественный продукт, способный найти признание у специалистов.
Из-за сходства языков Java и C++, в особенности из-за подобия предоставляемых ими средств для объектно-ориентированного программирования, возникает соблазн рассматривать Java как своего рода версию C++ для Интернета. Но это было бы ошибкой. У Java имеется целый ряд существенных отличий от C++ как в концептуальном, так и в практическом плане. Несмотря на то что C++ оказал очень сильное влияние на Java, последний совсем не является расширенной версией первого. В частности, эти языки не совместимы ни сверху вниз, ни снизу вверх. Конечно, сходство с языком C++ очень важно, и если у вас имеется опыт программирования на C++, вы будете чувствовать себя как дома, программируя на Java. Но не следует забывать, что Java был разработан не на замену C++, а для решения вполне определенного круга задач, отличающихся от тех, что решаются с помощью C++. Именно поэтому мирное сосуществование Java и C++ будет продолжаться еще многие годы. Взаимосвязь Java с языком C
Через несколько лет после создания Java корпорация Microsoft разработала язык С#. И это очень важно, поскольку C# тесно связан с Java. В самом деле, у многих языковых средств C# имеются свои аналоги в Java. В Java и C# используется единый общий синтаксис, похожий на C++, поддерживается распределенное программирование и применяется одна и та же объектная модель. Разумеется, у Java и C# имеются отличия, но внешне эти языки очень похожи. Это означает, что, зная С#, вы сможете относительно просто изучить Java, и, наоборот, если вам предстоит изучить С#, знание Java может очень пригодиться.
Учитывая сходство Java и С#, может возникнуть вопрос: “Заменит ли C# язык Java?” Ответ, безусловно, отрицательный. Java и C# оптимизированы для абсолютно разных типов вычислительных сред. Как и вместе с языком C++, Java будет мирно сосуществовать с языком C# еще многие годы. Вклад Java в развитие Интернета
Развитие Интернета послужило основной побудительной причиной для выхода Java на передний край программирования. В свою очередь, Java оказал благотворное влияние на развитие Интернета. Этот язык не только упростил веб-программирование, но и положил начало новой разновидности сетевых программ, называемых апплетами и полностью изменивших представление о содержимом веб. Java также позволил решить наиболее сложные задачи, возникающие при создании сетевых программ: обеспечение переносимости и безопасности. Рассмотрим подробнее апплеты и их основные свойства. Java-аппеты
Апплет – это специальная программа на Java, предназначенная для передачи по Интернету и автоматического выполнения в среде, формируемой совместимым с Java браузером. Апплет загружается по требованию клиентской программы, а для его пере¬ дачи по сети вмешательство пользователя не требуется. Если пользователь щелкает на ссылке, указывающей на документ, который содержит апплет, последний будет автома¬ тически скопирован и запущен браузером. Большинство апплетов невелики по разме¬ рам. Обычно они служат для отображения информации, предоставляемой серверами, или поддержки ввода данных пользователем. Иногда с их помощью реализуются не¬ сложные функции. Например, калькулятор удобнее разместить в виде апплета на сто¬ роне клиента, чем выполнять вычисления на стороне сервера. Таким образом, апплет позволяет переносить некоторые функции с сервера на машину клиента.
С появлением апплетов расширился круг объектов, пригодных для свободной передачи в сетевой среде. Существуют две категории объектов, которыми сервер может обмениваться с клиентом: статические, пассивные данные и исполняемые программы (динамические данные). Например, просматривая электронную почту, вы имеете дело со статическими данными. Даже если в почтовом отправлении пересылается программа, ее код не активизируется до тех пор, пока не получит управление. Апплет, напротив, является динамической, самостоятельно выполняющейся программой, для запуска которой не приходится принимать никаких мер. Такие программы выполняют роль активных агентов на клиентских машинах, но инициализируются сервером.
Несмотря на то что с помощью динамических программ можно реализовать полезные функции, они могут вызвать серьезные затруднения, имеющие отношение к безопасности и переносимости. Очевидно, что программа, которая загружается на машину клиента и автоматически запускается, не должна наносить вред клиентской системе. Кроме того, она должна допускать выполнение в разнотипных средах: на разных платформах под управлением различных операционных систем. Как будет показано далее, в Java эти затруднения изящно и эффективно преодолены. Безопасность
Как известно, запуск обычной программы, загруженной через Интернет, сопряжен с риском, поскольку она может быть заражена вирусом или служить своего рода “троянским конем” для злонамеренного проникновения в систему А злонамеренные действия такой программы возможны из-за того, что она получает несанкционированный доступ к системным ресурсам. Так, вирус, анализируя содержимое файловой системы локального компьютера, может собирать секретные сведения, например номера платежных карточек, сведения о банковских счетах и пароли. Для безопасной загрузки и запуска апплетов на клиентской машине необходимо устранить саму возможность атаки на систему со стороны апплета.
Защита от атак реализуется путем создания специальной среды для выполнения апплета, не позволяющей ему обращаться к ресурсам компьютера. При отсутствии такой среды апплет выполняться не может. (Далее будет показано, как решается подобная задача.) Возможность загружать апплет с уверенностью в том, что он не нанесет вреда системе, относится к одним из самых привлекательных особенностей Java. Переносимость
Переносимость является важным свойством сетевых программ. Она имеет большое значение потому, что в сети могут присутствовать разнотипные компьютеры, работающие под управлением различных операционных систем. Если программа на Java предназначена для выполнения на произвольном компьютере, подключенном к Интернету, то должны существовать способы обеспечения работы этой программы в различных системах. Например, один и тот же апплет должен работать на машинах с разнотипными процессорами, в разных операционных системах и с различными браузерами. Хранить разные версии апплета для разнотипных компьютеров слишком сложно, если вообще возможно. Один и тот же код должен работать на всех машинах. Таким образом, необходима поддержка процесса генерации переносимого исполняемого кода. Как станет ясно в дальнейшем, те же самые средства, которые обеспечивают безопасность, помогают добиться переносимости программ. Волшебный байт-код Java
Добиться безопасности и переносимости программ по сети позволяет генерируемый компилятором Java код, не являющийся исполняемым. Такой код называется байт-кодом. Это оптимизированный набор команд, предназначенных для выполнения в исполняющей системе Java, называемой виртуальной машиной Java (Java Virtual Machine – JVM). Виртуальная машина Java, по существу, представляет собой интерпретатор байт-кода. Такой подход может показаться не совсем обычным, поскольку для повышения производительности компиляторы большинства современных языков генерируют исполняемый код. Но выполнение программы под управлением виртуальной машины позволяет разрешить многие затруднения, возникающие в работе веб-приложений.
Преобразование исходного кода Java в байт-код существенно упрощает перенос программ из одной среды в другую, поскольку для обеспечения работоспособности кода достаточно реализовать на каждой платформе виртуальную машину. Если на компьютере присутствует пакет исполняющей системы, то на нем может работать любая программа, написанная на Java. Несмотря на то что виртуальные машины на различных платформах могут быть реализованы по-разному, они должны одинаково интерпретировать байт-код. Если бы исходный текст программы на Java компилировался в собственный код, для каждого типа процессора, взаимодействующего с Интернетом, необходимо было бы предусмотреть отдельную версию данной программы. Такое решение нельзя назвать приемлемым. Следовательно, выполнение байт-кода под управлением виртуальной машины – самый простой путь к обеспечению переносимости программ.