Java: vilket språk är det, dess egenskaper och Android-utveckling

Författare: IT Sectr Publicerad: 2026-02-10 Lästid: 11 min

Java — ett objektorienterat programmeringsspråk som i mer än tio år var det primära språket för Android SDK. Trots Googles officiella övergång till Kotlin förblir Java en viktig del av ekosystemet: äldre projekt, företagsapplikationer och miljontals rader kod i Google Play fortsätter att fungera i Java. Enligt JetBrains Developer Ecosystem-rapporten (2025) använder cirka 35 % av Android-projekten fortfarande Java. Läs mer om aktuella trender i JetBrains officiella rapport.

Huvudpunkter

  • Java — Androids primära språk fram till 2019, äldre kod utgör ~35 % av projekt
  • JVM — virtuell maskin som säkerställer Java-bytekodens plattformsoberoende
  • Android SDK — komplett verktygssats inklusive kompilator, emulator och profilerare
  • Kotlin — Javas efterträdare, men båda språken kompileras till samma JVM-bytekod
  • Gradle — byggsystem som hanterar beroenden och konfigurationer i Android-projekt

Vad är Java?

Java — ett allmänt programmeringsspråk, skapat av Sun Microsystems 1995. Huvudprincipen — «Write Once, Run Anywhere»: kompilerad Java-bytekod körs på vilken plattform som helst där JVM är installerad. Inom mobilutveckling blev Java det första officiella språket för Android SDK, som släpptes av Google 2008.

Java-arkitekturen baseras på tre komponenter: JDK (Java Development Kit) — utvecklarverktyg, JRE (Java Runtime Environment) — körningsmiljö och JVM (Java Virtual Machine) — virtuell maskin. Android använder sin egen implementation av JVM — Android Runtime (ART), som ersatte Dalvik i version 5.0 (Lollipop). ART exekverar DEX-bytekod, som kompileras från Java-bytekod via verktyget dx/d8.

En nyckelfunktion i Java — automatisk minneshantering via Garbage Collector (GC). Utvecklaren behöver inte explicit frigöra minne — GC spårar oanvända objekt och tar bort dem. I Android ART används Concurrent Mark Sweep (CMS) och Generational GC, optimerade för mobila enheters begränsade resurser. Detta minskar belastningen på utvecklaren men kan orsaka «lagg» vid skräpinsamling i UI-tråden.

Java-versioner och Android API

Android stöder en delmängd av Java API, som utökas med varje ny OS-version. Android 12 (API 31) lade till stöd för Java 11, inklusive lambdas med variabelfångst, modulära JPMS-systemet och HTTP-klienten java.net.http. Android 14 (API 34) introducerade experimentellt stöd för Java 17 via D8/R8-desugaring — vissa funktioner (records, sealed classes) översätts till kompatibel kod för äldre versioner.

Java-versionAndroid API (min)Android-versionNyckelfunktioner
Java 7API 194.4 KitKattry-with-resources, multi-catch
Java 8API 247.0 NougatLambda, Stream API, Optional
Java 11API 3112HTTP Client, Local-Variable Syntax
Java 17API 3414Records, Sealed Classes (D8)

Java SDK och Android-utveckling

Android SDK innehåller Java-kompilatorn, verktyget dex (d8), aapt (Asset Packaging Tool), emulator och biblioteken android.* och java.*. Utvecklaren skriver kod i Java, kompilerar den till .class-filer (JVM-bytekod), sedan omvandlar d8 dem till .dex-filer (Dalvik Executable), som paketeras i APK tillsammans med resurser och AndroidManifest.xml.

Gradle — byggsystemet för Android-projekt. Filen build.gradle (Groovy) eller build.gradle.kts (Kotlin DSL) beskriver beroenden, SDK-versioner, produktvarianter (product flavors) och signaturer. Android Gradle Plugin (AGP) version 8.x automatiserar desugaring — översättning av moderna Java-funktioner till bakåtkompatibel kod. Till exempel omvandlas java.time.LocalDate till kod kompatibel med API 21+ utan ändringar i utvecklarens källkod.

java
// En enkel Android Activity i Java
package com.example.myapp;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById(R.id.textView);
        tv.setText("Hej från Java!");
    }

    // Metod för att hantera knapptryckning
    public void onButtonClick(View view) {
        TextView tv = findViewById(R.id.textView);
        tv.setText("Knapp tryckt");
    }
}

Klassen MainActivity ärver AppCompatActivity — basklassen från AndroidX för bakåtkompatibilitet. Metoden onCreate anropas när Activity skapas, där layouten ställs in via setContentView. findViewById kopplar en Java-variabel till ett element från XML-layouten. Metoden onButtonClick är kopplad till knappen via attributet android:onClick i XML.

Arbeta med Activity och livscykel

Activitys livscykel i Java — en sekvens av callbacks: onCreate → onStart → onResume (aktiv), onPause → onStop → onDestroy (avslutning). Utvecklaren åsidosätter dessa metoder för att hantera resurser. onCreate — initiering, onPause — spara data, onDestroy — frigöra resurser. Android anropar dessa metoder vid skärmrotation, övergång till bakgrunden och mottagning av samtal.

java
// Activity-livscykel med tillståndshantering
public class DetailActivity extends AppCompatActivity {
    private String itemId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        itemId = getIntent().getStringExtra("ITEM_ID");
        loadData(itemId);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("item_id", itemId);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        itemId = savedInstanceState.getString("item_id");
        loadData(itemId);
    }

    private void loadData(String id) {
        // Ladda data efter ID
    }
}

Metoden onSaveInstanceState sparar Activitys tillstånd vid skärmrotation eller växling av uppgifter. Bundle innehåller nyckel-värdepar — enkla typer, Parcelable- eller Serializable-objekt. onRestoreInstanceState återställer sparat tillstånd. Detta mönster är kritiskt för Android eftersom systemet kan förstöra Activity vid minnesbrist och återställa den när användaren återvänder.

Java-syntax: klasser, metoder och typer

Java-syntax — C-liknande, starkt typad, objektorienterad. Varje .java-fil innehåller en publik klass vars namn överensstämmer med filnamnet. Java stöder inte funktioner utanför klasser — allt är metoder. Startpunkten är den statiska metoden public static void main(String[] args) för konsolapplikationer eller Android Activitys livscykelmetoder för mobila enheter.

Datatyper i Java

Java delar in typer i primitiver (int, double, boolean, char, byte, short, long, float) och referenstyper (klasser, gränssnitt, arrayer, enum). Primitiver lagras på stacken och skickas efter värde. Objekt — på heapen, skickas efter referens. Autoboxning (autoboxing) konverterar automatiskt en primitiv till ett wrapper-objekt (Integer, Double, Boolean) men skapar extra objekt — i Android är detta kritiskt för UI-prestanda.

java
// Exempel på Java-datatyper och strukturer
public class DataTypes {
    // Primitiver
    int count = 42;
    double price = 19.99;
    boolean isActive = true;
    char grade = 'A';

    // Referenstyper
    String name = "Android";
    Integer boxed = 100; // autoboxing
    List<String> items = new ArrayList<>();

    // Metod med Generics
    public <T> T getFirst(List<T> list) {
        return list.isEmpty() ? null : list.get(0);
    }

    // Enum för fast uppsättning värden
    public enum Status {
        PENDING, LOADING, SUCCESS, ERROR
    }
}

Generics List<T> säkerställer typ säkerhet för samlingar. Metoden getFirst returnerar ett element av vilken typ som helst — den konkreta typen bestäms vid anropsplatsen. Enum Status kompileras till en klass med en fast uppsättning konstanter, varje instans är en singleton. I Android används enum mer sällan på grund av minnesförbrukning: ProGuard/R8 optimerar enum till int-konstanter där det är möjligt.

Java vs Kotlin: jämförelse i Android

Jämförelse mellan Java och Kotlin för Android-utveckling — ett av huvudämnena sedan 2019, när Google förklarade Kotlin som prioriterat språk. Kotlin är helt kompatibelt med Java — båda kompileras till JVM-bytekod, kan anropa varandra och använda samma bibliotek. Men sätten att skriva kod skiljer sig fundamentalt.

Standardkod

Kotlin eliminerar Javas mångordighet: data class ersätter 50+ rader Java-klass med getters, setters, equals, hashCode, toString och copy. Null safety är inbyggt i Kotlins typsystem — NullPointerException är praktiskt taget omöjligt. Extension-funktioner gör det möjligt att lägga till metoder till befintliga klasser utan arv. Smart Casts konverterar automatiskt typer efter kontroll.

AspektJavaKotlin
Null safety@Nullable / @NonNull-annotationerString? / String — inbyggt
Data class50+ rader med Lombokdata class User(val name: String)
ExtensionStatiska hjälpklasserfun String.isEmail(): Boolean
CoroutinesAsyncTask / ExecutorServicesuspend + Structured Concurrency
LambdaFunctionalInterface + ::methodLambda som standard
DI-annotationer@Inject, @Module, @ProvidesAnalogt, men mindre kod

Prestanda

Prestandamässigt är Java och Kotlin identiska — båda kompileras till JVM-bytekod som Android ART exekverar på samma sätt. Skillnaden i APK-storlek: Kotlin lägger till ~200-400 KB för kotlin-stdlib-biblioteket. Java-projekt har mindre APK-storlek på grund av avsaknaden av extra runtime, men vid användning av Java Stream API och Optional kan APK-storleken öka på grund av desugaring.

Java-utvecklarens verktyg för Android

Java-utvecklarens verktyg för Android inkluderar Android Studio, Gradle, profilerare och emulator. Android Studio — den officiella IDE:n baserad på IntelliJ IDEA Community, innehåller editor med Java-autokomplettering, kodanalysator (lint), refaktorering och visuell layouteditor (Layout Editor).

Huvudverktyg

Android Gradle Plugin (AGP) version 8.x hanterar bygget: kompilering av Java till klasser, desugaring, minifiering ProGuard/R8, paketering till APK/AAB. R8 — förbättrad desugaring och obfuskerare som ersätter ProGuard. Byggvarianter (debug/release + product flavors) konfigureras via build.gradle. Gradle Daemon snabbar upp efterföljande byggen genom cachning.

groovy
// build.gradle (app) — konfiguration av Java-modul
android {
    compileSdk 34
    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
    testImplementation 'junit:junit:4.13.2'
}

Blocket compileOptions anger Java-version för kompilering — Java 17 är tillgänglig från AGP 8.x. Minsta SDK (minSdk) anger den lägsta Android-version som appen fungerar på. Target SDK — den version som appen testats för. Skillnaden mellan compileSdk och targetSdk: compileSdk — API för kompilering, targetSdk — runtime-beteende.

Begränsningar för Java i mobilutveckling

Begränsningar för Java i Android blev anledningen till Googles övergång till Kotlin. NullPointerException — det vanligaste undantaget i Java-Android-appar, eftersom typsystemet inte skiljer mellan nullable och non-null-referenser. Google rekommenderar @Nullable- och @NonNull-annotationer från paketet androidx.annotation, men kompilatorn kontrollerar dem inte — endast lint gör detta.

Avsaknaden av coroutines — ytterligare en begränsning: asynkrona operationer i Java kräver callbacks, AsyncTask (föråldrad sedan API 30), ExecutorService eller RxJava. Detta leder till callback hell och minnesläckor vid skärmrotation. Kotlin-coroutines med Structured Concurrency löser detta problem på språknivå: coroutinen avbryts när Activity förstörs utan manuell hantering.

Standardkod i Java — en källa till fel vid manuell skrivning av equals/hashCode, Parcelable-implementationer och ViewHolder för RecyclerView. Android KTX-bibliotek och Jetpack Compose är inriktade på Kotlin. Nya Android API:er (Room, Navigation, Compose) publicerar exempel i Kotlin som standard, även om Java-versioner finns.

Vanliga frågor

Vad är Java?

Java — ett objektorienterat programmeringsspråk från Sun Microsystems (1995) som körs på JVM. Det var det primära språket för Android SDK fram till 2019. Det används inom mobilutveckling för äldre projekt, serversidan (Spring) och företagsapplikationer. Det kännetecknas av stark typning, automatisk skräpinsamling och plattformsoberoende bytekod.

Varför anses Java vara ett äldre språk för Android?

Google förklarade Kotlin som prioriterat språk för Android 2019. Nya AndroidX-bibliotek, Jetpack Compose, arkitekturrekommendationer och dokumentation ges som standard på Kotlin. Java förblir fullt stött, men API:er designas med Kotlin-first-metod. Java-projekt kräver mer standardkod och får inte nya språkmöjligheter först.

Vilken version av Java används i Android?

Android stöder Java 8 fullt ut, Java 11 — delvis med Android 12+, Java 17 — experimentellt via D8-desugaring. Android Gradle Plugin (AGP) 8.x översätter modern bytekod till kompatibel kod för gamla API:er via desugar. Utvecklaren kan skriva i Java 11+ med lambda, Optional och DateTime API, men records och sealed classes är endast tillgängliga via D8.

Vad skiljer Java från Kotlin?

Kotlin kräver mindre kod: data class ersätter dussintals rader Java-boilerplate, null safety är inbyggt i typer, coroutines förenklar asynkronitet. Java erbjuder enklare syntax för nybörjare, beprövat biblioteksekosystem och stabila verktyg. Runtime-prestandan är identisk — båda kompileras till JVM-bytekod som exekveras av Android ART.

Vilka IDE:er används för Java-utveckling på Android?

Android Studio — den standardmässiga IDE:n för Android-utveckling med stöd för Java och Kotlin. Innehåller emulator, profilerare (CPU, memory, network), Layout Inspector, APK Analyzer. IntelliJ IDEA passar för server-Java. Eclipse ADT är föråldrat och stöds inte av Google. Android Studio tillhandahåller även verktyg för migrering av Java-kod till Kotlin via inbyggd konverterare.

Sammanfattning

  • Java — ett objektorienterat språk som var det primära språket för Android SDK i 11 år
  • JVM-bytekod översätts till DEX via d8 och exekveras av Android Runtime (ART) med GC
  • Android stöder Java 8-17 med D8/R8-desugaring för bakåtkompatibilitet
  • Java Activity — grundkomponenten med livscykel onCreate → onStart → onResume → onPause → onStop → onDestroy
  • Gradle — byggsystem med stöd för Java 17, AGP 8.x och byggvarianter
  • Kotlin — Javas efterträdare med samma bytekod men modern syntax och null safety
  • Java-äldre kod utgör ~35 % av Android-projekt, Google fortsätter stödja båda språken

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också