Kratki vodič za java.lang.System

1. Pregled

U ovom ćemo uputstvu na brzinu pogledati java.lang.Sustav klase i njegovih značajki i osnovne funkcionalnosti.

2. IO

Sustav je dio java.lang, a jedna od njegovih glavnih značajki je pružanje pristupa standardnim I / O streamovima.

Jednostavno rečeno, izlaže tri polja, po jedno za svaki tok:

  • van
  • pogreška
  • u

2.1. System.out

System.out pokazuje na standardni izlazni tok, izlažući ga kao PrintStream, a pomoću njega možemo ispisati tekst na konzolu:

System.out.print ("neka ugrađena poruka");

Napredno korištenje Sustav je nazvati System.setOut, pomoću koje možemo prilagoditi lokaciju kojoj System.out napisat će:

// preusmjeravanje na tekstualnu datoteku System.setOut (novi PrintStream ("filename.txt"));

2.2. System.err

System.err je slično System.out. Oba su polja primjerci PrintStream, a obje su za ispis poruka na konzolu.

Ali System.err predstavlja standardnu ​​pogrešku i to posebno koristimo za izlaz poruka o pogreškama:

System.err.print ("neka ugrađena poruka o pogrešci"); 

Konzole će često prikazivati ​​tok pogreške drugačije od izlaznog toka.

Za više informacija provjerite PrintStream dokumentacija.

2.3. System.in

System.in pokazuje na standard u, izlažući ga kao InputStream, a možemo ga koristiti za čitanje unosa s konzole.

I dok smo malo više uključeni, još uvijek možemo upravljati:

javni String readUsername (int length) baca IOException {byte [] name = novi bajt [length]; System.in.read (ime, 0, duljina); // po defaultu, s konzole se vraća novi String (ime); }

Pozivanjem System.in.read, aplikacija se zaustavlja i čeka na unos iz standardnog in. Bez obzira na sljedeći duljina bajtovi će se čitati iz toka i pohraniti u bajtni niz.

Sve ostalo što je korisnik upisao ostaje u streamu, čekajući novi poziv za čitati.

Naravno, rad na toj niskoj razini može biti izazovan i sklon pogreškama, pa ga možemo malo očistiti s BufferedReader:

javni String readUsername () baca IOException {BufferedReader čitač = novi BufferedReader (novi InputStreamReader (System.in)); vratiti čitač.readLine (); }

Uz gornji aranžman, readLine čitati će iz System.in dok korisnik ne pritisne return, što je malo bliže onome što bismo mogli očekivati.

Imajte na umu da u ovom slučaju namjerno ne zatvaramo stream. Zatvaranje standarda u znači da se ne može ponovno čitati tijekom životnog ciklusa programa!

I na kraju, napredna upotreba System.in je nazvati System.setIn da ga preusmjeri na drugu InputStream.

3. Korisne metode

Sustav pruža nam brojne metode koje nam pomažu u stvarima poput:

  • Pristup konzoli
  • Kopiranje nizova
  • Promatranje datuma i vremena
  • Izlazak iz JRE
  • Pristup svojstvima izvođenja
  • Pristup varijablama okoline i
  • Administriranje odvoza smeća

3.1. Pristup Konzoli

Java 1.6 predstavila je drugi način interakcije s konzolom od jednostavne upotrebe System.out i u direktno.

Možemo mu pristupiti pozivom System.console:

javni niz readUsername () {Konzola konzole = System.console (); povratna konzola == null? null: console.readLine ("% s", "Unesite svoje ime:"); }

Imajte na umu da ovisno o osnovnom operativnom sustavu i načinu na koji pokrećemo Javu za pokretanje trenutnog programa, konzola mogao vratiti null, pa uvijek provjerite prije upotrebe.

Pogledajte dokumentaciju konzole za više namjena.

3.2. Kopiranje nizova

System.arraycopy stari je način kopiranja jednog niza u drugi.

Uglavnom, arraycopy namijenjen je kopiranju jednog cjelovitog niza u drugi niz:

int [] a = {34, 22, 44, 2, 55, 3}; int [] b = novo int [a.duljina]; System.arraycopy (a, 0, b, 0, a.length); assertArrayEquals (a, b); 

Međutim, možemo odrediti početni položaj za oba polja, kao i koliko elemenata treba kopirati.

Na primjer, recimo da želimo kopirati 2 elementa iz a, s početkom u a [1] do b, s početkom u b [3]:

System.arraycopy (a, 1, b, 3, 2); assertArrayEquals (novi int [] {0, 0, 0, 22, 44, 0}, b);

Također, upamtite to arraycopy će baciti:

  • NullPointerException ako je bilo koji niz null
  • IndexOutOfBoundsException ako se kopija poziva na bilo koji niz izvan svog raspona
  • ArrayStoreException ako kopija rezultira neusklađenošću tipa

3.3. Promatranje datuma i vremena

Postoje dvije metode povezane s vremenom u Sustav. Jedno je currentTimeMillis a druga je nanoTime.

currentTimeMillis vraća broj milisekundi proteklih od Unix Epohe, a to je 1. siječnja 1970. 00:00 UTC:

public long nowPlusOneHour () {return System.currentTimeMillis () + 3600 * 1000L; } javni String nowPrettyPrinted () {vrati novi datum (System.currentTimeMillis ()). toString (); } 

nanoTime vraća vrijeme u odnosu na pokretanje JVM-a. Možemo ga nazvati više puta da označimo protok vremena u aplikaciji:

long startTime = System.nanoTime (); // ... long endTime = System.nanoTime (); assertTrue (endTime - startTime <10000); 

Imajte na umu da od nanoTime je tako sitnozrnata, to je sigurnije učiniti kraj vremena - vrijeme početka <10000 od vrijeme završetka <vrijeme početka zbog mogućnosti numeričkog prelijevanja.

3.4. Izlazak iz programa

Ako želimo programski izaći iz trenutno izvedenog programa, System.exit učinit će trik.

Zazivati Izlaz, moramo navesti izlazni kôd koji će se poslati na konzolu ili ljusku koja je pokrenula program.

Prema konvenciji u Unixu, status 0 znači normalan izlaz, dok ne-nula znači da se dogodila neka pogreška:

if (pogreška) {System.exit (1); } else {System.exit (0); }

Imajte na umu da bi za većinu programa u današnje vrijeme bilo neobično da to trebate nazvati. Na primjer, kada se pozove u aplikaciji web poslužitelja, može ukloniti cijelu stranicu!

3.5. Pristup svojstvima izvođenja

Sustav omogućuje pristup svojstvima izvođenja sa getProperty.

I možemo s njima upravljati setProperty i clearProperty:

javni String getJavaVMVendor () {System.getProperty ("java.vm.vendor"); } System.setProperty ("abckey", "abcvaluefoo"); assertEquals ("abcvaluefoo", System.getProperty ("abckey")); System.clearProperty ("abckey"); assertNull (System.getProperty ("abckey"));

Svojstva navedena putem -D su dostupni putem getProperty.

Također možemo pružiti zadani:

System.clearProperty ("dbHost"); Niz myKey = System.getProperty ("dbHost", "db.host.com"); assertEquals ("db.host.com", myKey);

I System.getProperties pruža zbirku svih svojstava sustava:

Svojstva svojstva = System.getProperties ();

Iz koje možemo učiniti bilo što Svojstva operacije:

javna praznina clearAllProperties () {System.getProperties (). clear (); }

3.6. Pristup varijablama okoline

Sustav također pruža pristup samo za čitanje varijablama okoline s getenv.

Ako želimo pristupiti STAZA varijablu okoline, na primjer, možemo učiniti:

javni String getPath () {return System.getenv ("PUT"); }

3.7. Administriranje sakupljanja smeća

Napori oko odvoza smeća obično su neprozirni za naše programe. No, ponekad ćemo možda htjeti izravno predložiti JVM-u.

System.runFinalization je metoda koja nam omogućuje sugeriranje da JVM izvrši svoju rutinu finaliziranja.

System.gc je metoda koja nam omogućuje sugeriranje da JVM pokreće svoju rutinu odvoza smeća.

Budući da ugovori ove dvije metode ne garantiraju pokretanje finalizacije ili odvoza smeća, njihova je korisnost uska.

Međutim, mogli bi se primijeniti kao optimizacija, recimo prizivanje gc kada se aplikacija za radnu površinu svede na minimum:

javna void windowStateChanged (događaj WindowEvent) {if (event == WindowEvent.WINDOW_DEACTIVATED) {System.gc (); // ako završi s radom, sjajno! }}

Za više informacija o finalizaciji pogledajte naš vodič za finaliziranje.

4. Zaključak

U ovom smo članku vidjeli neka polja i metode Sustav pruža. Cjelovit popis možete pronaći u službenoj dokumentaciji sustava.

Također, pogledajte sve primjere u ovom članku na Githubu.


$config[zx-auto] not found$config[zx-overlay] not found