Java tarjoaa kahdeksan pri­mi­tii­vis­tä tie­to­tyyp­piä ja lukuisia mo­ni­mut­kai­sia tie­to­tyyp­pe­jä. Nämä mää­rit­tä­vät, mitkä arvot voidaan tallentaa ja näyttää muut­tu­jas­sa. Tietyt tie­to­tyy­pit on mää­ri­tet­ty kaikille muut­tu­jil­le Java-kielessä.

Mitä tie­to­tyyp­pe­jä Java sisältää?

Jo­kai­ses­sa oh­jel­moin­ti­kie­les­sä on erilaisia tie­to­tyyp­pe­jä, jotka si­säl­tä­vät tiettyjä objekteja ja mää­ri­tel­ty­jä ope­raa­tioi­ta. Vaikka eri kielten tarjoamat tie­to­tyyp­pi­vaih­toeh­dot ovat usein keskenään sa­man­kal­tai­sia, joskus niissä on mer­kit­tä­viä eroja. Jos esi­mer­kik­si verrataan Python- ja Java-kieliä ja niiden tie­to­tyyp­pe­jä, huomaa niiden välisiä yh­tä­läi­syyk­siä, mutta myös lukuisia eroja, jotka tekevät kielistä sopivia eri­lai­siin tehtäviin.

Java käyttää kahta erilaista tie­to­tyyp­piä: pri­mi­tii­vi­siä ja mo­ni­mut­kai­sia. Mo­ni­mut­kai­sia tie­to­tyyp­pe­jä kutsutaan myös vii­te­tyy­peik­si. Pri­mi­tii­vi­set ja mo­ni­mut­kai­set tie­to­tyy­pit eroavat toi­sis­taan koon suhteen ja määräävät, mitä arvoja muut­tu­jaan voidaan tallentaa. Pri­mi­tii­vi­set tie­to­tyy­pit voivat tallentaa vain yk­sin­ker­tai­sia arvoja, kun taas vii­te­tyyp­pe­jä käytetään mo­ni­mut­kai­sem­pien ra­ken­tei­den luomiseen sekä suurten tie­to­mää­rien jär­jes­tä­mi­seen ja kä­sit­te­lyyn.

Jos haluat oppia koo­daa­maan, on tärkeää tuntea eri tie­to­tyy­pit ja osata hyödyntää niitä parhaalla mah­dol­li­sel­la tavalla. Tie­to­tyyp­pien parhaan käytön ym­mär­tä­mi­nen ei ole vain niiden toi­min­nal­li­suu­den ym­mär­tä­mis­tä, vaan myös niiden käyttämän (tai säästämän) muistin määrän ym­mär­tä­mis­tä.

Mitkä ovat pri­mi­tii­vi­set tie­to­tyy­pit Java-kielessä?

Java-kielessä on yhteensä kahdeksan erilaista pri­mi­tii­vis­tä tie­to­tyyp­piä, jotka si­säl­tä­vät tarkasti mää­ri­tel­lyt ar­voa­lu­eet. Ne voidaan jakaa neljään luokkaan: loogiset tie­to­tyy­pit, ko­ko­nais­lu­ku­tyy­pit, liukuluku- ja merk­ki­tyy­pit. Niillä ei ole li­sä­omi­nai­suuk­sia, ja niitä kutsutaan myös ele­men­taa­ri­sik­si tie­to­tyy­peik­si. Jo­kai­sel­la tie­to­tyy­pil­lä on kiinteä bit­ti­mää­rä. Seu­raa­vas­sa kä­si­tel­lään pri­mi­tii­vi­siä tie­to­tyyp­pe­jä tarkemmin. Java käyttää seuraavia pri­mi­tii­vi­siä tyyppejä:

  • boolean
  • bitti
  • lyhyt
  • int tai ko­ko­nais­lu­ku
  • pitkä
  • float
  • double
  • merkk

boolean

Java-kielen boolean-tie­to­tyyp­pi ei ole nu­mee­ri­nen tyyppi. Se tarjoaa vain kaksi mah­dol­lis­ta arvoa: true ja false. Sitä voidaan käyttää mää­rit­tä­mään, täyttyykö ehto (true) vai ei (false). Se on looginen tie­to­tyyp­pi, jonka ole­tusar­vo on false. Se koostuu yhdestä bitistä ja sen syntaksi on seuraava:

boolean booleanVar;
java

byte

byte on ko­ko­nais­lu­ku­tyyp­pi, joka esitetään kahden komple­men­tin arvona, jonka koko on 8 bittiä tai 1 tavu. Sitä käytetään tyy­pil­li­ses­ti muistin sääs­tä­mi­seen suu­rem­mis­sa tau­lu­kois­sa. Sen arvoalue on -128–127, ja sen ole­tusar­vo on 0. Sen syntaksi on seuraava:

byte byteVar;
java

short

short on myös yksi Java-kielessä käy­te­tyis­tä in­tegraa­li­da­ta­tyy­peis­tä, ja sitä käytetään pää­asias­sa muistia sääs­tä­mään suu­rem­mis­sa tau­lu­kois­sa. Kak­sin­ker­tai­sen komple­men­tin arvo on 16 bittiä tai 2 tavua, ja sen arvoalue ulottuu -32768:sta 32767:ään. Ole­tusar­voi­ses­ti sen arvo on 0. Näin short käytetään:

short shortVar
java

int tai ko­ko­nais­lu­ku

int tai ko­ko­nais­lu­ku on myös kahden komple­men­tin arvo ja ko­ko­nais­lu­ku­tyyp­pi, jonka koko on 4 tavua tai 32 bittiä. Sen arvoalue sisältää ko­ko­nais­lu­vut välillä -2147483648 ja 2147483647, ja sen ole­tusar­vo on 0. Sen syntaksi on seuraava:

int intVar
java

long

Suurin ko­ko­nais­lu­ku­tyyp­pi on long. Tämä koskee en­sin­nä­kin sen ar­voa­luet­ta, joka on välillä -9223372036854775808 ja 9223372036854775807, ja toiseksi sen kokoa, joka on 8 tavua tai 64 bittiä. Kaksin komple­ment­tiar­voa käytetään siis, jos muut ko­ko­nais­lu­ku­tyy­pit eivät riitä. Se vaatii kuitenkin myös selvästi eniten muistia. Sen ole­tusar­vo on 0. Sen syntaksi on seuraava:

lomg longVar
java

float

float on liu­ku­lu­kui­nen tie­to­tyyp­pi, jota käytetään re­aa­li­lu­ku­jen tal­len­ta­mi­seen. Sen koko on 32 bittiä ja se noudattaa IEEE 754 -stan­dar­dia, joka mää­rit­te­lee binääri- ja de­si­maa­li­liu­ku­lu­kuis­ten lukujen stan­dar­die­si­tyk­sen tie­to­ko­neis­sa. Stan­dar­diar­vo float on 0,0 ja sen ar­voa­lu­eel­la voidaan esittää enintään seitsemän de­si­maa­lia. Ver­rat­tu­na double-tyyppiin float ei kui­ten­kaan ole yhtä tarkka, joten sitä ei tulisi käyttää arvoissa, joissa tark­kuu­del­la on rat­kai­se­va merkitys. Jos näin ei ole, voit käyttää float tilan sääs­tä­mi­sek­si. float n syntaksi on seuraava:

float floatVar;
java

double

double on noin kaksi kertaa tarkempi kuin float ja täyttää sa­man­lai­sen tar­koi­tuk­sen. Sen koko on 64 bittiä ja se voi edustaa jopa 16 de­si­maa­lia. Sen ole­tusar­vo on myös 0,0. Jos tarvitset tarkempia arvoja, sinun tulee aina käyttää double, vaikka tämä tie­to­tyyp­pi ei olekaan kovin tarkka. Jos haluat työs­ken­nel­lä täysin tarkkojen arvojen kanssa, sinun tulisi käyttää sen sijaan Big­Deci­mal-luokkaa. double n syntaksi on seuraava:

double doubleVar;
java

char

char on merk­ki­tie­to­tyyp­pi. Se tallentaa merkkejä Unicode-mer­kis­töön perustuen, mikä mah­dol­lis­taa siir­ret­tä­vyy­den useille eri alus­toil­le. Jokainen merkki vaatii 2 tavua muistia. Sen arvoalue vastaa ASCII-merkistöä (American Standard Code for In­for­ma­tion In­terc­han­ge) ja sijaitsee välillä ‘\u0000’ (eli 0) ja ‘\uffff’ (vastaa 65535). Char-tyypin ole­tusar­vo on ‘\u0000’ ja sen syntaksi on seuraava:

char charVar
java

Mitä ovat mo­ni­mut­kai­set tie­to­tyy­pit Java-kielessä?

Toinen Java-tie­to­tyyp­pien tyyppi ovat vii­te­tyy­pit, joita kutsutaan myös mo­ni­mut­kai­sik­si tie­to­tyy­peik­si. Niitä kutsutaan vii­te­tyy­peik­si, koska ne viit­taa­vat ob­jek­tei­hin. Toisin kuin pri­mi­tii­vi­set tie­to­tyy­pit, ne eivät yleensä ole ennalta mää­ri­tel­ty­jä, vaan oh­jel­moi­ja mää­rit­te­lee ne (poik­keuk­se­na merk­ki­jo­no). Ne voivat käyttää metodeja ja niillä voi olla myös arvo 0 (tyhjänä). Pri­mi­tii­vi­set tie­to­tyy­pit alkavat pienellä kir­jai­mel­la, mutta vii­te­tyy­pit alkavat isolla kir­jai­mel­la. Tässä tar­kas­tel­laan tär­keim­piä vii­te­tyyp­pe­jä.

Jouset

String on luokka, jota voidaan käyttää merk­ki­jo­non esit­tä­mi­seen, mikä erottaa tämän mo­ni­mut­kai­sen tie­to­tyy­pin pri­mi­tii­vi­ses­tä tie­to­tyy­pis­tä char sekä muista tie­to­tyy­peis­tä. Merk­ki­jo­no on objekti luokassa java.lang. String-luokan eri me­ne­tel­mil­lä voit tar­kas­tel­la merk­ki­jo­non yk­sit­täi­siä merkkejä, verrata merk­ki­jo­no­ja keskenään, etsiä merk­ki­jo­no­ja ja kopioida merk­ki­jo­no­ja. Merk­ki­jo­not tun­nis­te­taan lai­naus­mer­keil­lä. Tämän vii­te­tyy­pin syntaksi on seu­raa­van­lai­nen:

<string_type> <string_variable> = "<string_sequence>";
java

Tässä on esimerkki merk­ki­jo­no­jen toi­min­nas­ta:

// How to create a string without a new operator
String a = "This is your new string";
/ / How to create a string with a new operator
String a1 = new string ("This is your new string");
java

Taulukot

Tau­lu­koi­ta käytetään useiden arvojen tal­len­ta­mi­seen muut­tu­jaan sen sijaan, että luo­tai­siin eri muuttujia jo­kai­sel­le yk­sit­täi­sel­le arvolle. Ne luodaan ha­ka­sul­keil­la. Tal­len­ne­tut arvot si­joi­te­taan aal­to­sul­kei­siin ja erotetaan toi­sis­taan pilkuilla. Tässä on tau­lu­koi­den syntaksi:

dataType[] arrayName = {value1, value2, value3,…};
java

Jos haluat luoda merk­ki­jo­nois­ta koostuvan taulukon, voit tehdä sen seu­raa­vas­ti:

String[] colors = {"blue", "red", "yellow", "purple"};
java

Näin luot taulukon ko­ko­nais­lu­vuil­la:

int[] figures = {5, 10, 15, 20};
java

Luokat

Java-kielessä luokat ovat tie­to­tyyp­pe­jä, jotka toimivat mallina objektien luo­mi­ses­sa. Ne si­säl­tä­vät erilaisia kom­po­nent­te­ja, kuten luokan nimen, muok­kai­met ja aal­to­sul­keis­sa olevan rungon. Tässä on esimerkki siitä, miltä luokka näyttää Java-kielessä:

public class Main {
	int a = 10;
}
java

Ra­ja­pin­nat

Java-kielessä rajapinta on abstrakti luokka. Se toimii ra­ja­pin­ta­na, jonka kautta luokka voi käyttää erilaisia toi­min­to­ja. Tätä varten sen on kuitenkin ensin to­teu­tet­ta­va ne. Ra­ja­pin­nat si­säl­tä­vät vain vakioita ja ab­strak­te­ja metodeja. Niiden syntaksi näyttää tältä:

interface {
	abstract methods
}
java

Esitämme tässä yk­sin­ker­tai­sen esimerkin, joka ha­vain­nol­lis­taa ra­ja­pin­to­jen toimintaa:

interface Pizza {
	public void ingredientsList();
	public void preparation();
}
class Mushroom implements Pizza {
	public void ingredientsList() {
		System.out.println("mushrooms, tomato sauce, oregano, mozzarella");
}
public void preparation() {
	System.out.println("The pizza will be ready in 15 minutes.");
}
}
class Main {
	public static void main(String[] args) {
		Mushroom myMushroom = new Mushroom();
		myMushroom.ingredientsList();
		myMushroom.preparation();
	}
}
java

Java-komennon System.out.println vastaava tulos näyttää tältä:

mushrooms, tomato sauce, oregano, mozzarella
The pizza will be ready in 15 minutes.
java

Esineet

Java-kielessä objektit ovat myös mo­ni­mut­kai­nen tie­to­tyyp­pi. Objektit ovat luokkien ins­tans­se­ja, jotka voivat olla vuo­ro­vai­ku­tuk­ses­sa keskenään me­ne­tel­mien avulla. Seu­raa­vas­sa esi­mer­kis­sä luomme useita objekteja Main-luokkaan:

public class Main {
	int a = 10;
public static void main(String[] args) {
	Main myObj1 = new Main();
	Main myObj2 = new Main();
	System.out.println(myObj1.a);
	System.out.println(myObj2.a);
	}
}
java

Tulostus näyttää tältä:

10
10
java

Enumit

Enumit ovat erityinen luokka, jonka avulla voit si­säl­lyt­tää muut­tu­mat­to­mia vakioita koodiisi. Näille muut­tu­jil­le annetaan kiinteät arvot, joita ei voi muuttaa. Tämä tie­to­tyyp­pi on erityisen hyö­dyl­li­nen, jos tarvitset muuttujia, joilla voi olla vain muutama mah­dol­li­nen tila. Enumin syntaksi näyttää tältä:

enum NameOfTheClass {
	VALUE1,
	VALUE2,
	VALUE3
}
java
Siirry pää­va­lik­koon