Разделы презентаций


Статика в Java

Содержание

План лекцииСтатические методы и поляСттаические блокиСтатический импортКласс ClassПорядок загрузкиПараметризованные классы и методы (generic)

Слайды и текст этой презентации

Слайд 1Статика в Java
© Составление, Колесов А.А., 2012

Статика в Java© Составление, Колесов А.А., 2012

Слайд 2План лекции
Статические методы и поля
Сттаические блоки
Статический импорт
Класс Class
Порядок загрузки
Параметризованные классы

и методы (generic)

План лекцииСтатические методы и поляСттаические блокиСтатический импортКласс ClassПорядок загрузкиПараметризованные классы и методы (generic)

Слайд 3Структура класса
модификатор class имя_класса {
поля
методы

блоки инициализации
конструктор
финализатор
}

Структура классамодификатор class имя_класса {  поля  методы  блоки инициализации  конструктор  финализатор}

Слайд 4В Java есть статические поля и статические методы. Для указания

того, что поле или метод являются статическими, используется описатель static перед именем

типа поля или метода.

class SomeClass {
static int t = 0; // статическое поле
. . .
public static void f() { // статический метод
. . . }
}
В Java есть статические поля и статические методы. Для указания того, что поле или метод являются статическими,

Слайд 5Статические поля
Поле создается в единственном экземпляре вне зависимости от количества

объектов данного класса
Существуют без создания экземпляра класса
Статические поля класса

создаются  в момент первого обращения к данному классу.
Использование:
С модификатором final объявляют константы (например число PI в классе Math)
Использовать одну переменную для всех экземпляров класса
Singleton
Статические поляПоле создается в единственном экземпляре вне зависимости от количества объектов данного класса Существуют без создания экземпляра

Слайд 6Пример со статическим полем
public class Proba {
int a =

10; // обычное поле
static int cnt = 0; //

статическое поле
public void print() {
System.out.println("cnt = " + cnt);
System.out.println("a = " + a); }
public static void main(String args[]) {
Proba obj1 = new Proba();
cnt++; // увеличим cnt на 1
obj1.print();
Proba obj2 = new Proba();
cnt++; // увеличим cnt на 1
obj2.a = 0;
obj1.print();
obj2.print(); }
}
Пример со статическим полемpublic class Proba { 	int a = 10; // обычное поле 	static int cnt

Слайд 7По аналогии со статическими полями, статические методы не привязаны к

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

указать не ссылку, а имя класса:
class SomeClass {
static int t = 0; // статическое поле
. . .
public static void f() { // статический метод
. . .
}
}
. . .
SomeClass.f();
. . .

Статические методы

По аналогии со статическими полями, статические методы не привязаны к конкретному объекту класса. При вызове статического метода

Слайд 8Ограничения на static методы:
Они могут вызывать только другие статические методы.


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

образом не могут ссылаться на члены типа this или super.
Если статический метод определен как final -метод, то он не может быть переопределен.
статические методы не могут быть абстрактными;
статические методы переопределяются в подклассах только как статические.

Ограничения на static методы:Они могут вызывать только другие статические методы. Они должны осуществлять доступ только к статическим

Слайд 9Пример статических методов
System.out.println(….);
public static void main(String[] args) {…}
Методы класса Math 

Пример статических методовSystem.out.println(….);public static void main(String[] args) {…}Методы класса Math 

Слайд 10Задание:
Создать класс Automobile, в котором определить поле, которое будет содержать

порядковый заводской номер автомобиля. Так же определить статический метод, который

будет возвращать это значение.
Задание:Создать класс Automobile, в котором определить поле, которое будет содержать порядковый заводской номер автомобиля. Так же определить

Слайд 11Статический блок
За словом static следует блок кода, окруженного фигурными скобками.

Вы можете использовать статический блок для инициализации статических данных.

static List

alphabet;
static {
alphabet = new ArrayList();
for (char c='a'; c<='z'; c++)
alphabet.add(c);
}

Из-за статичности блок запрашивается единожды, когда создается класс. Теперь вам не нужен конструктор, и вы можете пользоваться данными без предшествующего создания класса.

Статический блокЗа словом static следует блок кода, окруженного фигурными скобками. Вы можете использовать статический блок для инициализации

Слайд 12Какой результат?
public class Proba {
public static int value;
static{
System.out.println("static block");
value =

50;
}

public Proba(){
System.out.println("constructor");
value = 100;
}
}
public class General {
public static void main(String[]

args) {
System.out.println(" General ");
}
}

Какой результат?public class Proba {	public static int value;	static{		System.out.println(

Слайд 13Задание:
В классе определить статическое поле-массив, которое инициализируется в статическом блоке.

Задание:В классе определить статическое поле-массив, которое инициализируется в статическом блоке.

Слайд 14Статический импорт
Для того чтобы получить доступ к статическим членам классов,

требуются указать ссылку на класс. К примеру, необходимо указать имя

класса Math:
double r = Math.cos(Math.PI * theta);
Конструкция статического импорта позволяет получить прямой доступ к статическим членам класса, который содержит эти статические члены:
import static java.lang.Math.PI;
или все целиком:
import static java.lang.Math.*;
Однажды импортированный статический член может быть использован без указания имени класса:
double r =cos(PI * theta);

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

Слайд 15Когда использовать статический импорт?
Если иначе вы вынуждены объявлять локальные копии

констант
Постоянное использование статических членов одного класса из одного или двух

других классов.
Чрезмерное использование статического импорта может сделать вашу программу нечитаемой из-за увеличения пространства имен
Импортирование всех статических методов из класса может быть частично вредно для читабельности. Импортируйте их по-отдельности
Использованный умело, статический импорт может сделать вашу программу более наглядной
Когда использовать статический импорт?Если иначе вы вынуждены объявлять локальные копии константПостоянное использование статических членов одного класса из

Слайд 16Пример без статического импорта
class Hypot {  public static void main(String args[])

{  double side1, side2;  double hypot;  side1 = 3.0;  side2 = 4.0;  hypot = Math.sqrt(Math.pow(side1,

2) + Math.pow(side2, 2));  System.out.println("Given sides of lengths " +  side1 + " and " + side2 +  " the hypotenuse is " + hypot);  }  }
Пример без статического импортаclass Hypot {  	public static void main(String args[]) {  		double side1, side2;  		double hypot; 

Слайд 17Задание:
Переписать программу вычисления гипотенузы прямоугольного треугольника, с использованием статического импорта.

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

Math, являющегося частью пакета Java.lang. Первый метод, Math.pow(), возвращает значение, возведенное в определенную степень. Второй — Math.sqrt() — возвращает квадратный корень своего аргумента. Имена sqrt и pow импортировать в область видимости операторами статического импорта.

Задание:Переписать программу вычисления гипотенузы прямоугольного треугольника, с использованием статического импорта. Использовать два статических метода из встроенного в

Слайд 18Класс Class
Класс с именем class представляет характеристики класса, экземпляром которого является объект:
хранит

информацию о том, не является ли объект на самом деле

интерфейсом, массивом или примитивным типом.
каков суперкласс объекта
имя класса
какие в нем конструкторы, поля, методы и вложенные классы
Класс ClassКласс с именем class представляет характеристики класса, экземпляром которого является объект:хранит информацию о том, не является ли объект

Слайд 19Класс Class
В классе class нет конструкторов, экземпляр этого класса создается исполняющей системой

Java во время загрузки класса и предоставляется методом getClass() класса:
String s =

"Это строка"; 
Class с = s.getClass();
Статический метод forName(string class) возвращает объект класса class для класса, указанного в аргументе:
Class cl = Class.forName("Java,lang.String"); (устаревший)
или Class c2 = Java.lang.String.class;

Класс ClassВ классе class нет конструкторов, экземпляр этого класса создается исполняющей системой Java во время загрузки класса и предоставляется

Слайд 20Пример:
import java.lang.reflect.*;
class ClassTest{
  public static void main(String[] args){
    Class с

= null, c1 = null, c2 = null;
    Field[] fld

= null;
    String s = "Some string";
    с = s.getClass();
      cl = Class.forName("Java.lang.String"); // Старый стиль 
      c2 =  Java.lang.String.class;           // Новый стиль 
      if (!c1.isPrimitive())
      fid = cl.getDeclaredFields();           // Все поля класса String
    System.out.println("Class      c: " + c); 
    System.out.println("Class     cl: " + cl); 
    System,out.println("Class     c2: " + c2); 
    System.out.printlnt"Superclass c: " + c.getSuperclass()); //получить суперкласс
    System.out.println("Package    c: " + c.getPackageO);  //получить пакет
    for(int i = 0; i < fid.length; i++)
      System.out.println(fld[i]);
  }
}
Пример:import java.lang.reflect.*;class ClassTest{  public static void main(String[] args){    	Class с = null, c1 = null, c2 =

Слайд 21Задание:
Получить Class объекта и с помощью логических методов isArray(), isIntetface(), isPrimitive() уточнить,

не является ли объект массивом, интерфейсом или примитивным типом.
Если объект

ссылочного типа, извлечь сведения о вложенных классах, конструкторах, методах и полях методами getDeclaredClasses(), getDeclaredConstructors(), getDeclaredMethods(), getDeclaredFields() , в виде массива классов, соответствейно, Class, Constructor, Method, Field . Последние три класса расположены в пакете java.lang.reflect и содержат сведения о конструкторах, полях и методах аналогично тому, как класс class хранит сведения о классах.
Получить данные, с помощью методов getClasses(), getConstructors(), getlnterfaces(), getMethods(), getFieids() которые возвращают такие же массивы, но не всех, а только открытых членов класса.
Задание:Получить Class объекта и с помощью логических методов isArray(), isIntetface(), isPrimitive() уточнить, не является ли объект массивом, интерфейсом или

Слайд 22Порядок загрузки
Статические поля инициализируются во время загрузки класса.
Инициализация статического блока

происходит во время загрузки класса.
Инициализация статических полей в месте объявления

и статические блоки выполняются в порядке их объявления в классе.
В отличии от статических полей класса, поля объекта инициализируются во время конструирования экземпляра класса
Порядок загрузкиСтатические поля инициализируются во время загрузки класса.Инициализация статического блока происходит во время загрузки класса.Инициализация статических полей

Слайд 23Порядок инициализации объекта
инициализация полей в месте объявления и в инициализационном

блоке происходит до инициализации в конструкторе
инициализации полей в месте объявления

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

Порядок инициализации объектаинициализация полей в месте объявления и в инициализационном блоке происходит до инициализации в конструктореинициализации полей

Слайд 24Параметризованные классы и методы (Generic)
Параметризованные (generic) классы и методы, позволяют

использовать более гибкую и в то же время достаточно строгую

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

Параметризованные классы и методы (Generic)Параметризованные (generic) классы и методы, позволяют использовать более гибкую и в то же

Слайд 25Пример generic-класса с двумя параметрами:
public class Subject {
private T1 name;
private T2 id;
public Subject(T2

ids, T1 names) {
id = ids;
name = names;
}
}

Объект класса Subject можно создать,

например, следующим образом:
Subject sub = new Subject();
char ch[] = {‘J’,'a’,'v’,'a’};
Subject sub2 = new Subject(ch, 71.5 );

T1, Т2 – фиктивные объектные типы, которые используются при объявлении членов класса и обрабатываемых данных. При создании объекта компилятор заменит все фиктивные типы на реальные и создаст соответствующий им объект.

Пример generic-класса с двумя параметрами:public class Subject {	private T1 name;	private T2 id;	public Subject(T2 ids, T1 names) {		id = ids;		name = names;	}}Объект класса Subject можно

Слайд 26Пример параметризованного класса с конструктором и методами
public class Optional {
private T value;
public Optional(T value)

{
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T val) {
value = val;
}
public String toString()

{
if (value == null) return null;
return value.getClass().getName() + " " + value;
}
}

Пример параметризованного класса с конструктором и методамиpublic class Optional {	private T value;	public Optional(T value) {		this.value = value;	}	public T getValue() {		return value;	}	public void setValue(T val) {		value =

Слайд 27Использование класса Option
public class Runner {
public static void main(String[] args) {
Optional ob1 = new Optional(); //параметризация типом Integer
ob1.setValue(1); //попробуйте

задать значение “2” ob1.setValue("2");
int v1 = ob1.getValue();
System.out.println(v1);
Optional ob2 = new Optional("Java"); //параметризация типом String
String

v2 = ob2.getValue();
System.out.println(v2);
//попробуйте присвоить ob1 = ob2;
Optional ob3 = new Optional(); //параметризация по умолчанию – Object
System.out.println(ob3.getValue());
ob3.setValue("Java SE 6");
System.out.println(ob3.toString()); /* выводится тип объекта, а не тип параметризации */
ob3.setValue(71);
System.out.println(ob3.toString());
ob3.setValue(null);
}
}

Использование класса Optionpublic class Runner {	public static void main(String[] args) {		Optional ob1 = new Optional(); //параметризация типом Integer		ob1.setValue(1);	//попробуйте задать значение “2” ob1.setValue(

Слайд 28Расширение возможностей
Объявление generic-типа в виде , несмотря на возможность использовать любой

тип в качестве параметра, ограничивает область применения разрабатываемого класса. Переменные

такого типа могут вызывать только методы класса Object. Доступ к другим методам ограничивает компилятор.
Чтобы расширить возможности параметризованных членов класса, можно ввести ограничения на используемые типы при помощи следующего объявления класса:
public class OptionalExt {
private T value;
}
В качестве типа Т разрешено применять только классы, являющиеся наследниками (суперклассами) класса Tип, и соответственно появляется возможность вызова методов ограничивающих типов.

Расширение возможностейОбъявление generic-типа в виде , несмотря на возможность использовать любой тип в качестве параметра, ограничивает область применения

Слайд 29Бывает необходимость в метод параметризованного класса одного допустимого типа передать

объект этого же класса, но параметризованного другим типом. В этом

случае при определении метода следует применить метасимвол ?. Метасимвол также может использоваться с ограничением extends для передаваемого типа.

public class Mark {
public T mark;
public Mark(T value) {
mark = value;
}
public T getMark() {
return mark;
}
public int roundMark() {
return Math.round(mark.floatValue());
}
/* вместо */ // public boolean sameAny(Mark ob) {
public boolean sameAny(Mark ob) {
return roundMark() == ob.roundMark();
}
public boolean same(Mark ob) {
return getMark() == ob.getMark();
}
}


Бывает необходимость в метод параметризованного класса одного допустимого типа передать объект этого же класса, но параметризованного другим

Слайд 30public class Runner {
public static void main(String[] args) {
// попробуйте Mark ms = new Mark(“7”);
Mark md

= new Mark(71.4D);//71.5d
System.out.println(md.sameAny(md));
Mark mi = new Mark(71);
System.out.println(md.sameAny(mi));
// попробуйте md.same(mi);
System.out.println(md.roundMark());
}
}

public class Runner {	public static void main(String[] args) {		// попробуйте Mark ms = new Mark(“7”); 		Mark md = new Mark(71.4D);//71.5d		System.out.println(md.sameAny(md));		Mark mi = new Mark(71);		System.out.println(md.sameAny(mi));		// попробуйте md.same(mi); 		System.out.println(md.roundMark());	}}

Слайд 31Ограничения generic типов
Невозможно выполнить явный вызов конструктора generic-типа
class Optional {
T

value = new T();
}
generic-поля не могут быть статическими
Статические методы не могут иметь

generic-параметры или обращаться к generic-полям
class Failed {
static T1 value;
T2 id;
static T1 getValue() {
return value;
}
static void use() {
System.out.print(id);
}



Ограничения generic типовНевозможно выполнить явный вызов конструктора generic-типа		class Optional {			T value = new T();		}generic-поля не могут быть статическимиСтатические методы не

Слайд 32Спасибо за внимание!

Спасибо за внимание!

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика