Книга е още в много ранна фаза на написване


Вашата първа Java програма



страница20/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   ...   16   17   18   19   20   21   22   23   ...   73

Вашата първа Java програма


Ето я накрая програмата.5 Тя извежда информация за системата на която ра­бо­ти използвайки различни методи на System обекта от стандартната библиотека на Java. Забележете, че допълнителен вид коментиране е въведено тук: ‘//’, което зна­чи коментар до края на реда:

// Property.java

import java.util.*;
public class Property {

public static void main(String[] args) {

System.out.println(new Date());

Properties p = System.getProperties();

p.list(System.out);

System.out.println("--- Memory Usage:");

Runtime rt = Runtime.getRuntime();

System.out.println("Total Memory = "

+ rt.totalMemory()

+ " Free Memory = "

+ rt.freeMemory());

}

}



В началото на всеки програмен файл трябва да сложите import за да вземете всич­ки допълнителни файлове освен този. Забележете “допълнителни.” Това е за­щото има библиотека класове която се взема винаги във всяка Java програма: java.lang. Пуснете си броузера и вижте документацията от Sun. (ако я нямате сва­лена от java.sun.com или по друг начин инсталирана Java документация, сега му е времето да се сдобиете). Ако погледнете packages.html ще видите списък на всичките пакети които идват с Java. Изберете java.lang. Под “Class Index” ще ви­дите списък на всичките класове, които са част от тази библиотека. Понеже java.lang неявно се включва във всеки Java сорс тези класове са автоматично до­стъпни. В списъка ще видите System и Runtime, които са използвани в Property.java. Няма Date клас в списъка java.lang, което значи че трябва да им­пор­тирате друга библиотека за да го използвате. Ако не знаете в коя би­блио­те­ка е конкретният клас или искате да видите всичките класовеможе да изберете “Class Hierarchy” в Java документацията. Доста време отнема това да стане в броу­зера, но пък можете да видите всеки клас, който идва с Java. Тогава може да използвате функцията “find” на броузера за да намерите Date. Като го на­пра­ви­те ще видите че го намира като java.util.Date, което идва да каже че е в util библиотеката и трябва да напишете import java.util.* за да използвате Date.

Ако разглеждате документацията започвайки от packages.html файла (която аз съм сложил за начална страница по подразбиране на моя броузер), изберете java.lang и тогава System. Ще видите че System класа има няколко полета и ако из­бе­рете out ще откриете че е static PrintStream обект. Тъй като е static не се налага да създавате нищо. out е вече там и може да го използвате. Какво може да правите с този out обект е определено от неговия тип: PrintStream. Под­хо­дя­що PrintStream е показан като хипервръзка, така че ако щракнете там може да видите всичките методи на PrintStream. Има доста малко и ще се разгледат по-нататък. Засега интересното е println( ), което ефективно е “изкарай на кон­зо­лата каквото ти давам и мини на нов ред.” Така в каква да е Java програма коя­то пишете може да кажете System.out.println(“things”) винаги когато ис­ка­те да пишете нещо на конзолата.

Името на класа е същото като на файла. Когато създавате самостоятелна про­грама като тази, един от класовете трябва да има същото име като файла. (Ком­пилаторът се сърди ако не е така.) Въпросният клас трябва да има метод main( ) със следващата сигнатура:

public static void main(String[] args) {



public ключовата дума показва, че методът е достъпен за останалия свят (описано детайлно в глава 5). Аргументът на main( ) е масив от String обекти. args не се използва в тази програма, но е необходим, понеже там се съдържат арг­ументите (ключовете, квалификаторите - б.пр.) на командната линия.

Пърия ред от програмата е доста интересен:

System.out.println(new Date());

Гледаме аргумента: Date обект се създава само за да даде стойността си на println( ). Щом редът се изпълни Date не е необходим вече и боклучарят ще дой­де по някое време да го махне. Не е необходимо ние да се притесняваме за това.

Вторият ред извиква Properties(_)'>System.getProperties( ). Ако ровите документацията със своя броузър ще видите, че getProperties( ) е static метод на класа System. По­не­же е static няма нужда да създавате обекти за да викате метода; static ме­то­ди­те винаги са достъпни без значение дали има или няма създадени обекти. Ко­га­то викате getProperties( ) се създават характеристиките на системата като обект Properties. Манипулаторът който се връща се запомня в манипулатора на Properties наречен p. В третия ред се вижда че Properties обектът има метод на­речен list( ) който праща цялото това съдържание на PrintStream обекта кой­то сте дали като аргумент.

Четвъртия и шестия ред в main( ) са типични оператори за извеждане. Забе­ле­же­те че за извеждане на няколко String стойности просто ги разделяме със знак ‘+’. Нещо странно става там, обаче. Знакът ‘+’ не означава събиране, когато е из­ползван със String обекти. Нормално не бихте приписали някакво значение на ‘+’ когато мислите за стрингове. Java String класът е блажен (същевременно - проклет, б.пр.) с нещо, което се нарича “operator overloading.” Тоест ‘+’ знакът са­мо като се използва със String обекти има различно поведение от където и да е другаде. За Strings то е “конкатенирай тези два стринга.”

Но това не е всичко. Ако погледнете оператора:

System.out.println("Total Memory = "

+ rt.totalMemory()

+ " Free Memory = "

+ rt.freeMemory());

totalMemory( ) и freeMemory( ) връщат числови стойности, а не String обекти. Какво става, когато “прибавите” числено значение към String? Компилаторът виж­да проблема и магически вика подходящия метод който превръща числата (int, float, etc.) в String, който после може да бъде “събиран” със знака плюс. То­ва автоматично превръщане на типовете също попада в категорията на опе­раторния овърлоудинг.

Много от литературата за Java буйно твърди, че операторният овърлоудинг (черта на C++) е лошо нещо, и наистина то е! Тук обаче то е вързано за ком­пи­ла­тора и е само за String обекти, та не може вие да го правите за никакви опе­ра­то­ри като пишете програми.

Петия ред в main( ) създава Runtime обект чрез извикване на static методът getRuntime( ) за класа Runtime. Връща се манипулатор на Runtime обект; дали това е статичен обект или е създаден с new не е необходимо да ви засяга, тъй като можете да използвате обектите без да се грижите за почистването им. Как­то е показано Runtime може да даде информация за използването на паметта.




Сподели с приятели:
1   ...   16   17   18   19   20   21   22   23   ...   73




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

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