Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

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

Сначала JVM пытается найти Bean как сериализованный объектный ресурс beanName.ser и десериализовать его. Если сериализованный объект не найден, создается экземпляр класса с помощью конструктора без параметров.

Если класс компонента не найден или для него не предусмотрен принимаемый по умолчанию конструктор, метод Beans.instantiate() не сможет загрузить данный компонент.

Пример с сериализованным Bean-компонентом — см. BeanlnstantiateDemo.java

Приложение

// Файл HelloApplet.java

//Пример простейшего апплета

//Апплет рисует в окне текстовую строку

//Началъные операторы программы: import java.applet.Applet; import java.awt.Graphics;

/*

Они указывают компилятору импортируемые (подключаемые) классы и пакеты. Позволяют программе обращаться к другим классам без указания полных квалифицированных) имен классов. Квалифицированное имя включает название пакета. В отличие от языка С, импортирование не приводит к увеличению размера программы. Определение класса, производного от класса Applet. В классе Java.applet.Applet реализованы возможности выполнения апплетов в среде Web-браузера. Класс апплета должен быть открытым (public), чтобы быть доступным браузеру. Имя класса должно точно совпадать с именем файла .java.

*/

public class HelloApplet extends Applet

{

/*

Переопределение метода paint, который наследуется апплетом от класса Java.awt.Component, от которого по цепочке наследования происходит класс Java.applet.Applet. Метод paint отображает апплет на экране браузера. Этот метод вызывается Java-машиной браузера, создающей объект апплета, и используется для рисования в графическом пространстве апплета, предоставляемом браузером. Доступ к графическому пространству осуществляется с помощью объекта типа Graphics.

*/

public void paint(Graphics g)

{

/*

Передаваемый в качестве параметра объект типа Graphics содержит графический контекст апплета.

Методы класса Java.awt.Graphics позволяют рисовать

вокне апплета.

*/

//Рисование строки "Hello, Java!" с начальными

//координатами х = 50 и у = 50 (в пикселях)

//относительно левого верхнего угла окна апплета g.drawstring("Hello, Java!", 50, 50);

}

}

//Файл HelloApplication.java

//Пример простейшего приложения.

//Приложение выводит текстовую строку в стандартный поток вывода.

//Определение класса

public class HelloApplication

{

public static void main(String args [])

52

Скачано с сайта http://ivc.clan.su

{

//Вывод пустой строки и текстовой строки

//в стандартный поток вывода

System.out.println(); System.out.println("Hello from Java!");

}

}

/*

*Приложение содержит по крайней мере один класс.

*Имя файла .java должно точно совпадать с именем основного public-класса, содержащего метод main.

*Выполнение приложения начинается в методе main, т.е. этот метод является точкой входа в программу.

*Основной класс приложения должен быть открытым (public), чтобы выполняющая среда Java могла гарантированно обнаружить класс и запустить метод main.

*Метод main объявляется как public (это позволяет среде выполнения Java обнаружить метод) и static (это позволяет вызвать метод до создания экземпляра класса).

*Приложению можно передавать параметры (аргументы командной строки). JVM помещает их в массив типа String, после чего передает массив строк методу main.

*В любую Java-программу автоматически импортируется пакет java.lang, который содержит наиболее общие классы. В этом пакете имеется класс System, в котором предусмотрен объект out типа Printstream (стандартный поток вывода). Метод

println объекта out позволяет выводить текстовые строки в стандартный выходной поток.

*/

// Файл MyApplet.java

//Скелетная схема апплета:

//переопределение методов "жизненного цикла" апплета. import java.awt.*;

import Java.applet.*;

public class MyApplet extends Applet

{

//He требуется определять конструктор класса.

//Компилятор Java по умолчанию создаст конструктор

//без параметров.

public void init()

{

// Код этапа инициализации апплета

}

public void start()

{

// Код этапа запуска апплета

}

public void paint(Graphics g)

{

// Код этапа перерисовки апплета

g.drawstring("Рисование строки в окне апплета", 10, 50);

}

public void stop()

{

// Код этапа останова апплета

}

public void destroy()

{

// Код этапа уничтожения апплета

}

}

// Файл StringDemo.java

// Примеры работы со строками import java.awt.*;

import java.applet.Applet;

53

Скачано с сайта http://ivc.clan.su

public class StringDemo extends Applet

{

public void paint(Graphics g)

{

int index; int y = 0;

boolean result;

String str = "All string literals in Java programs are implemented as instances of String class";

String str2; char ch;

char chr[] = new char[20];

// Работа с объектами String

g.drawString("Работа с объектами String", 50, y += 25); g.drawString("Исходная строка: " + str, 20, y += 25); g.drawString("Длина строки: " + str.length(), 20, y += 15); index = str.indexOf('i');

g.drawString("Индекс символа i: " + index, 20, y += 15); index = str.indexOf('i', index + 1);

g.drawString("Индекс следующего символа i: " + index, 20, y += 15); g.drawString("Индекс начала подстроки \"Java\" : " +

str.indexOf("Java"), 20, y += 15);

//Методы группы lastlndexOf() возвращают индекс последнего вхождения

//указанного символа или строки

ch = str.charAt(10);

g.drawString("Символ в позиции 15: " + ch, 20, y += 15); str.getChars(5, 20, chr, 0); //копирует символы (с 5-го по 2 0-ый)

//из данной строки в указанный массив //с 0-м смещением

String tmp = new String(chr);

g.drawString("Строка, созданная из массива символов исходной строки: "

+ tmp, 20, y += 15);

str2 = str.substring(13, 20);

g.drawString("Подстрока с позиции 13 до позиции 20: " + str2, 20, y += 15); str2 = str.toUpperCase(); //преобразование строки в верхний регистр

//(метод toLowerCase() обеспечивает //преобразование в нижний регистр) g.drawString("Строка в верхнем регистре: " + str2, 20, y += 15);

result = str.equals("all string literals in Java programs are implemented as instances of string class");

g.drawString("Сравнение с такой же строкой с учетом регистра: " + result, 20, y += 15);

result = str.equalsIgnoreCase("all string literals in Java programs are implemented as instances of string class");

g.drawString("Сравнение с такой же строкой без учета регистра: " + result, 20, y += 15);

str2 = str.replace('i', 'w');

g.drawString("Замена сивола i на символ w: " + str2, 20, y += 15); str2 = str.concat(" 2002 ");

g.drawString("Объединение строк: " + str2, 20, y += 15); g.drawString("Удаление с обоих концов строки символов пробела: " +

str2.trim(), 20, y += 15);

result = str.startsWith("All"); //Определяет, является ли указанная

//строка префиксом данной строки.

//Метод endWith() определяет, является ли указанная строка суффиксом //данной строки.

str2 = String.valueOf(result);

g.drawString("Строка, представляющая значение типа boolean: " + str2, 20, y += 15);

index = 100;

str2 = String.valueOf(index);

g.drawString("Строка, представляющая значение типа int: " + str2, 20, y += 15);

54

Скачано с сайта http://ivc.clan.su

// Работа с объектом StringBuffer

g.drawString("Работа с объектом StringBuffer", 50, y += 25); StringBuffer strB = new StringBuffer(str);

strB.setCharAt(5, 'X');

g.drawString("Замена 5 сивола на символ X: " + strB, 20, y += 25); int value = 2002;

strB.append(value);

g.drawString("Добавление подстроки: " + strB, 20, y += 15); strB.insert(10, value);

g.drawString("Вставка подстроки: " + strB, 20, y += 15);

strB.reverse();

 

String st = new String(strB);

//новая строка, содержащая

 

//значение строкового буфера

g.drawString("Реверс содержимого строкового буфера: " + st, 20, y += 15);

}

}

//Файл АrrayDemo.java

//Пример апплета, демонстрирующего:

//- различные варианты инициализации массива;

//- использование поля length при работе с массивом;

//- передачу массива методу как параметра.

import java.applet.*; import java.awt.*;

public class ArrayDemo extends Applet

{

//Инициализация при объявлении с неявным использованием оператора new int[] array1 = { 1000, 2000, 3000, 4000, 5000 };

//Инициализация при объявлении с явным использованием оператора new

//int[] array2 = new int[] { l0, 20, 30, 40, 50 };

//Инициализация элементов массива по умолчанию нулевыми значениями

//int[] аггау3 = new int[5];

//Объявление массива (создание ссылки на массив)

//int[] array4; public void init()

{

// Варианты создания и инициализации массива аггау4

//array4 = new int[] { l00, 200, 300, 400, 500 };

/*array4 = new int[5];

// инициализация в цикле с

for (int i = 0; i < array4.length; i++) // обращением к элементам

array4[i] = i * 100;

// массива по индексам

*/

}

public void paint(Graphics g)

{

//Передача массива методу как параметра showArray(g, array1);

//showArray(g, array2); //showArray(g, аггау3); //showArray(g, array4);

//Динамически создаваемый массив

//showArray(g, new int[] { l, 2, 3, 4, 5 });

}

public void showArray(Graphics g, int[] someArr)

{

// Вывод элементов массива

g.drawString("Массив содержит следующие элементы:", 10, 20); for (int i = 0; i < someArr.length; i++)

g.drawString("array[" + i + "] = " + someArr[i], 10, (i + 2) * 20);

}

}

//Файл ClassTypesDemo.java

//Пример апплета, демонстрирующего правила приведения типов классов

55

Скачано с сайта http://ivc.clan.su

import java.applet.*; import java.awt.*;

//Иерархия классов class A { }

class В extends A { } class С extends В { }

//Основной класс

public class ClassTypesDemo extends Applet

{

В bObj;

A aObjl, aObj2; С cObj;

Object obj1, obj2;

String str1 = "Hello, Java! ", str2; public void init()

{

aObj1 = new A();

//Этот оператор вызовет ошибку при компиляции: //bObj = new А();

//Этот оператор вызовет при выполнении апплета ошибку -

//- Java.lang.ClassCastException. Ссылку объекта типа

//суперкласса нельзя привести к типу производного класса: //bObj = (В)new A();

//"Повышающее" приведение типов разрешено и не требует

//использования оператора явного приведения типа.

//Здесь переменной типа непосредственного суперкласса

//присваивается ссылка на экземпляр производного класса: aObj2 = new В();

//Здесь обратное, "понижающее", приведение типа разрешено.

//Обязательно требуется использовать оператор явного

//приведения типа. Иначе - ошибка при компиляции!

bObj = (В)aObj2;

//Приведение ссылочных типов может выполняться по иерархии

//классов сколь угодно глубоко:

cObj = new С(); aObj2 = cObj;

//Любой тип класса можно привести к типу Object: obj1 = (Object)new C();

obj1 = new C(); // можно без оператора явного приведения типа obj2 = str1;

//Здесь обязательно требуется использовать оператор явного

//приведения типа. Иначе - ошибка при компиляции!

str2 = (String)obj2;

//Следует отметить: после приведения объекта к типу

//суперкласса все переменные и методы самого класса объекта

//становятся недоступными для приведенного объекта!

}

public void paint(Graphics g)

{

g.drawString("aObj1 instanceof A : " + (aObj1 instanceof A), 20, 20); g.drawString("aObj1 instanceof Object : " + (aObj1 instanceof Object), 20,

40);

g.drawstring("bObj instanceof В : " + (bObj instanceof B), 20, 80); g.drawString("bObj instanceof A : " + (bObj instanceof A), 20, 100); g.drawstring("aObj2 instanceof A : " + (aObj2 instanceof A), 20, 140); g.drawstring("aObj2 instanceof В : " + (aObj2 instanceof B), 20, 160); g.drawString("aObj2 instanceof С : " + (aObj2 instanceof C), 20, 180); g.drawstring("Объекты-строки : " + obj2 + str2, 20, 220);

}

}

//Результаты работы апплета:

//aObj1 instanceof A : true

//aObj1 instanceof Object : true

//bObj instanceof В : true

56

Скачано с сайта http://ivc.clan.su

//bObj instanceof A : true

//aObj2 instanceof A : true

//aObj2 instanceof В : true

//aObj2 instanceof С : true

//Объекты-строки : Hello, Java! Hello, Java!

//Файл StaticInitDemo.java

//Пример апплета, демонстрирующего инициализацию статических переменных import java.applet.*;

import java.awt.*; class A

{

int a1 = 1, b1; // нестатические поля класса

//Для класса создается только один экземпляр статической переменной -

//переменной класса.

//Статические переменные могут быть инициализированы или при объявлении,

//или блоком кода, отмеченного ключевым словом static и расположенного

//вне всякого метода.

//Инициализация статических переменных выполняется один раз при загрузке

//соответствующего класса.(Файл класса загружается, когда возникает

//необходимость в классе:

//- при создании объекта-экземпляра класса;

//- при обращении к статическим полям и методам класса.)

static int а = 1; static double b; static int с = 3;

//Блок статической инициализации static

{a++; с = 10;} // Предыдущее значение переменной,с теряется static String s = "String";

static Integer i = new Integer(20);

//Блок статической инициализации

static

{b = Math.cos(Math.PI / 4.0);} // При инициализации статических переменных

//можно вызывать статические методы

//Java, начиная JDK 1.1, поддерживает сходный синтаксис для инициализации

//нестатических переменных - переменных экземпляра класса.

{a1++; b1 = 30;}

//Конструктор класса, удваивающий инициализированное

//значение статической переменной

A()

{

а *= 2;

}

}

// Основной класс

public class StaticInitDemo extends Applet

{

A aObj; int aClass;

int alnstance; public void init()

{

//Для обращения к статической переменной не обязательно создавать

//экземпляры класса. Лучше обращаться через имя класса:

aClass = A.а;

//Создание экземпляра класса А: aObj = new A();

//Следует отметить, что блоки статической инициализации

//выполняются раньше конструкторов!

//Обращение к статической переменной с помощью объекта класса: alnstance = aObj.a;

}

public void paint(Graphics g)

57

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]