Ето я накрая програмата.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 може да даде информация за използването на паметта.
Сподели с приятели: |