School of Computing and Mathematical Sciences msc Computing and Information Systems java programming Week 2 January 2003



Дата29.01.2017
Размер140.58 Kb.
#13790
School of Computing and Mathematical Sciences

MSc Computing and Information Systems

JAVA Programming Week 2 January 2003
Основите на JAVA
This weekще разгледаме типовете данни и основните граматични и пунктуационни правила правила в Java. Ще передставим възможните начини за създаване на програми и също така ще покажем как да се създават обекти, представители на предефинирани класове, и как се използват техните методи.
Компютрите работят, като използват т. нар. цикъл на вземане-обработка-запазване

  • Взема се нещо от паметта в обработващия модул

  • Прави се нещо с него в обработващия модул

  • Съхранява се обратно в паметта

Поради това са необходими инструкции за



  • Запазване на място в паметта и даване на име, например int hours;

  • Задаване на стойност на това място от паметта, например hours =39;

  • Вземане на тази стойност и извършване на операции с нея pay = hours*21;



Примитивни типове данни


Java има поредица от вградени примитиви за описание на данни, които са твърде прости за да бъдат наречени обекти, но формират по-сложни блокови консрукции. Това са:

числовите(numbers), буквените(characters) и булевите променливи(boolean variables).
Техните представители имат нужда от имена или идентификатори. Ето някои правила за това:


  • Може да бъде всяка последователност, но без интервали

  • Трябва да започва с буква или _ или $

  • Не трябва да съдържа оператори, като +,*...

  • Не може да е запазена дума

  • Желателно е да е смислен ( например CurrentAccountBalance вместо просто B)

Не бива да се забравя, че езикът Java е чувствителен към главните букви(case-sensitive). Установената практика при именоването е да се слепят думите и да се използва главна буква в началото на всяка от тези думи, като в myNewVariableName и да се използва описание на компонента като част от името, като в labelWhatIWantToSay. Имената на класовете започват с главна буква, а имената на методите с малка. Имената на променливите и обектите започват с малка буква, например myLabel вероятно се отнася за обект от клас Label.


Числовите данни могат да са:

  • Цели числа e.g. -5, 3, 180

  • Реални числа(със десетичен знак) e.g. -3.2, 3.142, 5.0, 3E10



Целочислени типове в Java


Тип Байтове Допустими стойности

byte 1 -128 до +127

short 2 -32,768 до +32,767

int 4 -2*109 до +2*109

long 8 -9*1018 до +9*1018


Типове с плаваща запетая в Java


Тип Байтове Допустими стойности

float 4 10-45 to 1038

double 8 10-324 to 10308

По подразбиране


Поради опасносността от загуба на данни Java не позволява да се преобразуват големи числа в малки, освен ако не е изрично указано. Това се нарича "casting" и трябва да е указано, например smallNumber = (short) bigNumber;

BigNumber е запазено като 2 байтово цяло число. В зависимост от това каква е била неговата стойност преди това, може да остане непроменено или да бъде отрязано (не закръглено). За реалните числа също така може да се използват символите f и d, например float weight = 3.4f {вместо (float)3.4}



Други примитивни типове данни


Тип Битове Стойности

boolean 1 истина или лъжа

char 16 един символ (unicode)

Обявяване


Синтаксисът за деклариране е

Typename variablename; например int n;

Деклариране на променлива n с тип int. Всички променливи трябва да бъдат декларирани преди да се използват. Няма значение къде в програмата са декларирани, но е препоръчително всички декларации да се правят в началото на програмата. Няколко променливи от един тип могат да се декларират заедно, например

float width, length, height;



Присвояване


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

Variablename = expression;

например age = 21; area= width*length;

Декларацията и присвояването могат да бъдат комбинирани в един израз (инициализация) например int age = 21;

Обърнете внимание на разликата между char c = 'R'; и char c = R;

Оператори


Току що бе използван "=" като оператор за присвояване. Операторите са функции за управление и комбиниране на променливи и в Java те се представят с един или два символа. Пълният списък е

  • Аритметични

  • За присвояване

  • За увеличаване и намаляване

  • За сравнение



Аритметични оператори


Символ Описание Пример Резултат

+ събиране 5+2 7

- изваждане 5-2 3

* умножение 5*2 10

/ деление 5/2 2

% остатък след деление 5%2 1



Оператори за присвояване


Символ Описание Пример Резултат

+= събиране x+=2 x=x+2

-= изваждане x-=2 x=x-2

*= умножение x*=2 x=x*2

/= деление x/=2 x=x/2

%= остатък след деление x%=2 x=x%2



Оператори за увеличаване(++) и намаляване(--)


c++ означава c+=1 означава c=c+1;

c-- означава c-=1 означава c=c-1;


Внимание! когато се комбинират оператори за присвояване, увеличаване и намаляване и аритметични оператори в един израз. Операторите за увеличаване и намаляване могат да са преди или след името на променливата

например


x=++y +z; означава y=y+1;x=y+z;

x=--y +z; означава y=y-1;x=y+z;

x=y++ +z; означава x=y+z;y=y+1;

x=y-- +z; означава x=y+z;y=y-1;



Оператори за сравнение


Java има шест оператора за сравнение:


Оператор

Значение

>

По-голямо от

<

По-малко от

==

Равно

!=

Различно от

<=

По-малко или равно на

>=

По-голямо или равно на



Логически оператори And, Or, Not





Оператор

Значение

&&

и

||

или

!

отрицание

Булеви променливи


Един от примитивните типове в Java е boolean. Булевите променливи могат да имат само две стойности истина или лъжа (true, false). Булевите изрази могат да са съставени от други променливи и отново да дават истина или лъжа.

например n < 10 е булев израз. x=6 е присвояване, x==6 е булев израз.

Булевите променливи могата да бъдат декларирани и инициализирани по следния начин: boolean finished; finished = false;

boolean tooheavy = (weight>200);

Могат да бъдат използвани в условни изрази

например if (finished) say("goodbye"); if(tooheavy) dropit();

Булевите изрази и/или променливи могат да се комбинират с помощта на логически оператори

например if(age>6 &&age<18) rate = junior;

if(weather==toocold||weather==toohot) action=stayinside;

Ето още един пример, за това как могат да се използват в програма:

boolean allSystemsGo;

AllSystemsGo = (temperature<=100)&&(thrust>=1200);

Crew.happy = Crew.expression==smiling;

If(allSystemsGo&&Crew.happy) initialiseLaunchSequence();



Троен условен оператор


Ето осмовната му форма

Булев израз?прави ако е истина:прави ако е лъжа

например ticketprice = age<18?5:10;

ще извърши ticketprice = 5 ако age<18 и =10 в противен случай.

Еквивалентно е на

if(age<18)ticketprice=5; else ticketprice =10;

или age<18?ticketprice=5:ticketprice=10;



Програмен поток (Program Flow)


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

  • Започват или с:

  • /* и завършват (възможно е след няколко реда) с */

  • // и завършват с края на реда

  • Важни са за четаемостта и поддръжката на програмите

  • Могат да бъдат вмъкнати на всяко място в програмата

  • Могат да бъдат изключително полезни при елиминирането на изрази при отстраняване на грешки

  • Могат да се използват за изясняване на целта на програмен откъс

  • Има специални коментари, които могат да бъдат добавени, наречени "doc comments". Те започват с /** и завършват с **/ и се извличат от специална програма наречена javadoc и се превеждат на HTML. Като резултат се създава “help file”на програмата. Тези коментари трябва да са преди дефиницията на класа и могат да включват HTML.


Изразите могат да бъдат

  • Декларация на променлива, например int i; Customer John;

  • Изрази, като i = 3*j;i++; System.out.println(i);

  • Разклонени изрази (if, switch)

  • Циклични изрази (for, do, while)

  • Изразът return

  • Изрази за прихващане на изключения (exception handling statement)

  • Групирани заедно в блок между {…}

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


Програмния поток може да бъде:

  • Последователност - всеки израз се изпълнява на един ход

  • Разклонение(branching) - изразите се изпълняват според условия

  • Повторение (looping) – изразите се изпълняват многократно


Последователността е по подразбиране.

Разклонението обикновено изисква използване на условие, if(условие)

  • Условието трябва да бъде затворено в скоби ( и ).

  • Няма ключова дума then в Java. Вместо това изразът, който непосредствено следва условието се изпълнява ако то е истина.

  • Няма затваряща ключова дума end if. Когато повече от един израз ще се изпълнява при истина, тогава те трябва да се заградят във фигурни скоби { и}.



Основна форма за едновариантен избор

Когато има единичен израз за изпълнение след условието:


if (условие) израз;

например if(x>5) y=6;

Условието може да бъде съставено от поредица от условия свързани с помощта на съюзите

&&(И) , || (ИЛИ), ! (НЕ)

например if ((mark>=60)&&(mark<=70)) result ="merit";

Когато има множество изрази за изпълнение след условието:


if (условие) {
израз 1;
израз 2;
...
израз n;
}

Дори когато има единичен израз за изпълнение, той може да бъде заграден в скоби { и},

например

if (age >17) {


g.drawString ("You may vote", 50, 50);
}

Много програмисти предпочитат да използват този стил.

Естествено Java позволява двувариантен избор с помощта на else частта.

Основна форма за двувариантен избор


if (условие) {
изрази за изпълнение ако условието е истина
} else {
изрази за изпълнение ако условието е лъжа
}

например if(x>5){ y=6; }else{ y=4;}

if (myAge>yourAge){ response="I am older";

}else{response= "You are older";}



Важно

  • След if и/или else може да има блокове

например

if (age >17) {


g.drawString ("Congratulations!", 50, 50);
g.drawString ("You may vote", 50, 70);
} else {
g.drawString ("Sorry", 50, 50);
g.drawString ("You may not vote", 50, 70);
}
if..else блоковете могат да съдържат други if..else блокове. Добър стил на програмиране е в такъв случай всеки else да се подравнява със съответния if. Това дава по голяма яснота.

например


if(aif(b

else

if(a

else order="cab";

else


if (aelse


if(belse order="cba";




  • Ако има много if условия за прилагане върху един и същ израз е по-ефективно да се използва Java израза switch.

Синтаксисът е:

switch (израз*){

case стойност: израз; break;

case стойност: израз; break;



...

default : израз; break;

}
NB


  • Изразът израз* може да бъде само от тип int,byte или char

  • Трябва да има break за всяка възможност

  • Не е задължително вариантите да следват точно определен ред

  • Може да има няколко случая, които дават един и същ израз (ако е така е необходим само един израз и break)

  • Управлението ще се предаде извън switch, когато бъде намерено първото съвпадение.

например

switch(month){

case 9:

case 4:


case 6:

case 11: days = 30; break;

case 2: {if (leapyear) days =29 else days = 28};break;

default: days = 31; break;

}
Приоритет на операторите


  • Първо се изчислява всичко в скобите например (2+3)*4 20

  • * / % се изчисляват преди +,- например 2+3*4 14

  • Операторите с един и същ приоритет се изчисляват от ляво на дясно например 2*3/4 1

При операции със смесени типове данни, типа на резултата се разширява до най-големия в израза.

byte  short  int  long  float  double

Забележка

int i = 3.4*9; //ще се провали

int i = (int)3.4*9; //ok
Създаване и деклариране на обекти

Да се запомни:



  • Класа е описанието което дефинира какви ще са данните и методите на обекта

  • обекта е представител на клас

  • могат да бъдат създадени много представители на клас (instantiation).

  • за да се създаде обект трябва

ClassName objectName; да се декларира

ObjectName = new ClassName(); да се създаде

Например пакета awt съдържа клас наречен Label. Може да се направи

Label myLabel;

myLabel = new Label();

Или на един ред: Label myLabel = new Label();

Label() е пример за специален тип метод наречен конструктор. Може да има повече от един конструктор за даден клас. В примера по-долу се създават три представителя на клас Label, като се използват три различни конструктора, имащи съответно 0, 1 и 2 параметъра.
Пр 2.1
//LabelMania

//Демонстрация на Label конструктори


import java.awt.*;

import java.applet.*;


public class LabelMania extends Applet {

public void init(){


//използване на най-простия конструктор (без параметри)

Label firstLabel = new Label();


//използване на ’един стринг’ конструктор

Label secondLabel = new Label("This is the second label");


// използване на ‘стринг и аргумент’ конструктор

Label thirdLabel = new Label("Centered", Label.CENTER);


//вмъкване на етикетите в аплета

add(firstLabel);

add(secondLabel);

add(thirdLabel);


} // край на init

} // край на labelMania


Да се запомни:

  • Когато се създава променлива от примитивен тип се заделя място в паметта.

  • Декларирането и създаването на обект са две отделни стъпки, въпреки че те могат да бъдат комбинирани в един израз.


Използване на обекти

След като обекта бъде създаден методите и данните могат да бъдат достъпни с помощта на точка:

Objectname.data сочи данните на обекта

Objectname.method() сочи метод на обекта.

Често може да се срещне "this." вместо "objectName." Ключовата дума "this" е указател към текущия обект.

По подразбиране данните на обекта са достъпни за останалите обекти, но това нарушава неговата самостоятелност (object's privacy). Не бива да се променя състоянието на обекта без да се познава. По-добрият начин е да се включат методите "set" и "get" в дефиницията на класа. Те се наричат Mutator и Accessor методи.



  • Mutator метода модифицира състоянието на обекта (променя стойностите на атрибутите му)

например labelName.setForeground(Color.white)

  • Accessor метода запитва обекта за някои негови данни без да го променя

например labelName.getFont()

В следващия пример се създават два обекта – от тип Label и от тип Font и се използват някои от методите на класа Label за да се подобри външният вид на съобщението.


Пр 2.2
//MyThird.java

//други подобрения в аплета MyFirst

import java.awt.*;

import java.applet.*;


public class MyThird extends Applet{

public void init(){

//Създаване на обект наречен myLabel

Label myLabel = new Label("Hello, world!!!");


// Създаване на обект наречен myFont

Font myFont = new Font("SansSerif", Font.PLAIN, 20);


//Подобряване на етикета

myLabel.setFont(myFont);

myLabel.setBackground(Color.blue);

myLabel.setForeground(Color.white);

myLabel.setAlignment(Label.CENTER);
//Вмъкване на етикета в аплета

add(myLabel);


} // край на init

} // край на applet


Как да се установяват цветове

Цветовете в Java са отделени в класа Color който има 13 предварително дефинирани стойности {black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow}.

Например за да се установи зелен цвят на фона на елемент се използва

Elementname.setBackground(Color.green).

За да се установи бял цвят за фон на аплета (сив по подразбиране) може да се използва

setBackground(Color.white)

Може да бъде дефиниран и цвят различен от стандартните

Color mycolour = new Color(r,g,b)

Тогава g.setColor(mycolour) го прилага към графичния обект g.
Установяване на шрифт

Класът Font в Java има три аксесоара:



  • Име - как в същност ще се появи на хост-машината

  • SanSerif – може да се изобрази като Arial или Helvetica

  • Serif - може да се изобрази като Times Roman

  • Monospaced - може да се изобрази като Courier

  • Стил – може да бъде установен с числата 0=plain, 1=bold,2=italic,3=bold и italic

Или като се използват вградените константи: Font.BOLD, Font.ITALIC, Font.PLAIN

  • Размер – в почки

Създаване на представител на обект от тип Font

Font myFont = new Font(name,style,size)

Прилагане към обекта objectName.setFont(myfont)






Програмиране на Java 2


Каталог: tadmin -> upload -> storage
storage -> Литература на факта. Аналитизъм. Интерпретативни стратегии. Въпроси и задачи
storage -> Лекция №2 Същност на цифровите изображения Въпрос. Основни положения от теория на сигналите
storage -> Лекция 5 система за вторична радиолокация
storage -> Толерантност и етничност в медийния дискурс
storage -> Ethnicity and tolerance in media discourse revisited Desislava St. Cheshmedzhieva-Stoycheva abstract
storage -> Тест №1 Отбележете невярното твърдение за подчертаните думи
storage -> Лекции по Въведение в статистиката
storage -> Търсене на живот във вселената увод
storage -> Еп. Константинови четения – 2010 г някои аспекти на концептуализация на богатството в руски и турски език


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница