Java:这是什么语言,它的特性与Android开发

作者: IT Sectr 发布日期: 2026-02-10 阅读时间: 11 分钟

Java — 一种面向对象的编程语言,十多年来一直是Android SDK的主要语言。尽管谷歌正式转向Kotlin,Java仍然是生态系统的重要组成部分:遗留项目、企业应用程序和Google Play中的数百万行代码继续在Java上运行。根据JetBrains Developer Ecosystem(2025)报告,约35%的Android项目仍在使用Java。更多关于当前趋势的信息,请阅读JetBrains官方报告

要点

  • Java — 2019年前Android的主要语言,遗留代码约占项目的35%
  • JVM — 确保Java字节码跨平台运行的虚拟机
  • Android SDK — 包含编译器、模拟器和性能分析器的完整工具集
  • Kotlin — Java的继任者,但两种语言都编译为相同的JVM字节码
  • Gradle — 管理Android项目中依赖关系和配置的构建系统

什么是Java?

Java — 由Sun Microsystems于1995年创建的一种通用编程语言。其主要原则是「Write Once, Run Anywhere」:编译后的Java字节码可在任何安装了JVM虚拟机的平台上运行。在移动开发背景下,Java成为谷歌于2008年发布的Android SDK的第一个官方语言。

Java架构基于三个组件:JDK(Java开发工具包)——开发者工具集,JRE(Java运行环境)——运行时环境,以及JVM(Java虚拟机)——虚拟机。Android使用自己的JVM实现——Android Runtime(ART),它在5.0(Lollipop)版本中取代了Dalvik。ART执行通过dx/d8工具从Java字节码编译而来的DEX字节码。

Java的关键特性——通过垃圾回收器(GC)自动管理内存。开发者无需显式释放内存——GC跟踪未使用的对象并将其删除。在Android ART中,使用Concurrent Mark Sweep(CMS)和Generational GC,针对移动设备的有限资源进行了优化。这减轻了开发者的负担,但可能在UI线程的垃圾收集中导致「卡顿」。

Java版本与Android API

Android支持Java API的子集,该子集随着每个新操作系统版本而扩展。Android 12(API 31)添加了对Java 11的支持,包括变量捕获的lambda表达式、模块化JPMS系统和HTTP客户端java.net.http。Android 14(API 34)通过D8/R8脱糖引入了对Java 17的实验性支持——某些功能(records、sealed classes)被转换为与旧版本兼容的代码。

Java版本Android API(最低)Android版本关键特性
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与Android开发

Android SDK包含Java编译器、dex(d8)工具、aapt(资源打包工具)、模拟器以及android.*和java.*库。开发者用Java编写代码,将其编译为.class文件(JVM字节码),然后d8将其转换为.dex文件(Dalvik可执行文件),这些文件与资源和AndroidManifest.xml一起打包到APK中。

Gradle——Android项目的构建系统。build.gradle(Groovy)或build.gradle.kts(Kotlin DSL)文件描述依赖关系、SDK版本、产品风味(product flavors)和签名。Android Gradle Plugin(AGP)8.x版本自动化脱糖——将现代Java特性转换为向后兼容的代码。例如,java.time.LocalDate无需更改开发者的源代码即可转换为与API 21+兼容的代码。

java
// Java中的简单Android Activity
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("来自Java的问候!");
    }

    // 处理按钮点击的方法
    public void onButtonClick(View view) {
        TextView tv = findViewById(R.id.textView);
        tv.setText("按钮已点击");
    }
}

MainActivity类继承自AppCompatActivity——来自AndroidX的基类以实现向后兼容。onCreate方法在创建Activity时调用,通过setContentView设置布局。findViewById将Java变量与XML布局中的元素关联。onButtonClick方法通过XML中的android:onClick属性绑定到按钮。

使用Activity与生命周期

Activity的生命周期在Java中——一系列回调:onCreate → onStart → onResume(活动),onPause → onStop → onDestroy(结束)。开发者重写这些方法来管理资源。onCreate——初始化,onPause——保存数据,onDestroy——释放资源。Android在屏幕旋转、进入后台和接听电话时调用这些方法。

java
// 带状态管理的Activity生命周期
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) {
        // 根据标识符加载数据
    }
}

onSaveInstanceState方法在屏幕旋转或切换任务时保存Activity的状态。Bundle包含键值对——简单类型、Parcelable或Serializable对象。onRestoreInstanceState恢复保存的状态。这个模式对于Android至关重要,因为系统可能在内存不足时销毁Activity,并在用户返回时恢复它。

Java语法:类、方法和类型

Java语法——类似于C,强类型,面向对象。每个.java文件包含一个公共类,其名称与文件名相同。Java不支持类之外的函数——一切都是方法。入口点是控制台应用程序的静态方法public static void main(String[] args)或移动应用的Android Activity生命周期方法。

Java数据类型

Java将类型分为基本类型(int、double、boolean、char、byte、short、long、float)和引用类型(类、接口、数组、枚举)。基本类型存储在栈中并按值传递。对象在堆中,按引用传递。自动装箱(autoboxing)自动将基本类型转换为包装对象(Integer、Double、Boolean),但会创建额外对象——在Android中这对UI性能至关重要。

java
// Java数据类型和结构示例
public class DataTypes {
    // 基本类型
    int count = 42;
    double price = 19.99;
    boolean isActive = true;
    char grade = 'A';

    // 引用类型
    String name = "Android";
    Integer boxed = 100; // autoboxing
    List<String> items = new ArrayList<>();

    // 带泛型的方法
    public <T> T getFirst(List<T> list) {
        return list.isEmpty() ? null : list.get(0);
    }

    // 用于固定值集合的枚举
    public enum Status {
        PENDING, LOADING, SUCCESS, ERROR
    }
}

泛型List<T>确保集合的类型安全。getFirst方法返回任何类型的元素——具体类型在调用点确定。枚举Status编译为具有固定常量集的类,每个实例都是单例。在Android中,枚举由于内存消耗而较少使用:ProGuard/R8在可能的情况下将枚举优化为int常量。

Java与Kotlin:在Android中的对比

Java与Kotlin的比较用于Android开发——自2019年谷歌宣布Kotlin为首选语言以来的主要话题之一。Kotlin与Java完全兼容——两者都编译为JVM字节码,可以相互调用并使用相同的库。然而,编写代码的方法根本不同。

样板代码

Kotlin消除了Java的冗长性:数据类(data class)取代了50多行带有getter、setter、equals、hashCode、toString和copy的Java类。空安全内置于Kotlin的类型系统中——NullPointerException几乎不可能发生。扩展函数允许向现有类添加方法而无需继承。智能转换(Smart Casts)在检查后自动转换类型。

方面JavaKotlin
空安全@Nullable / @NonNull注解String? / String — 内置
数据类50+行(带Lombok)data class User(val name: String)
扩展静态工具类fun String.isEmail(): Boolean
协程AsyncTask / ExecutorServicesuspend + Structured Concurrency
LambdaFunctionalInterface + ::method默认Lambda
DI注解@Inject, @Module, @Provides类似,但代码更少

性能

在性能方面,Java和Kotlin是相同的——两者都编译为JVM字节码,Android ART执行方式相同。APK大小的差异:Kotlin为kotlin-stdlib库添加了约200-400KB。Java项目由于没有额外的运行时,APK大小更小,但在使用Java Stream API和Optional时,APK大小可能因脱糖而增加。

Android Java开发者的工具

Java开发者的工具用于Android包括Android Studio、Gradle、性能分析器和模拟器。Android Studio——基于IntelliJ IDEA Community的官方IDE,包括具有Java自动完成功能的编辑器、代码分析器(lint)、重构和可视化布局编辑器(Layout Editor)。

主要工具

Android Gradle Plugin(AGP)8.x版本管理构建:将Java编译为类、脱糖、ProGuard/R8压缩、打包为APK/AAB。R8——改进的脱糖和混淆器,取代ProGuard。构建变体(debug/release + product flavors)通过build.gradle配置。Gradle守护进程通过缓存加速后续构建。

groovy
// build.gradle (app) — Java模块的配置
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'
}

compileOptions块指定用于编译的Java版本——Java 17从AGP 8.x开始可用。最低SDK(minSdk)确定应用程序运行的最低Android版本。目标SDK——应用程序测试所针对的版本。compileSdk和targetSdk之间的区别:compileSdk——用于编译的API,targetSdk——运行时行为。

Java在移动开发中的局限性

Java的局限性在Android中成为了谷歌转向Kotlin的原因。NullPointerException——Java-Android应用程序中最常见的异常,因为类型系统不区分可空和非空引用。谷歌推荐来自androidx.annotation包的@Nullable和@NonNull注解,但编译器不检查它们——只有lint进行检查。

缺少协程——另一个局限性:Java中的异步操作需要回调、AsyncTask(自API 30起已弃用)、ExecutorService或RxJava。这导致了回调地狱和屏幕旋转时的内存泄漏。Kotlin协程通过结构化并发(Structured Concurrency)在语言层面解决了这个问题:协程在Activity销毁时自动取消,无需手动管理。

Java中的样板代码——手动编写equals/hashCode、Parcelable实现和RecyclerView的ViewHolder时错误来源。Android KTX库和Jetpack Compose面向Kotlin。新的Android API(Room、Navigation、Compose)默认发布Kotlin示例,尽管Java版本也存在。

常见问题

什么是Java?

Java — Sun Microsystems(1995年)开发的面向对象编程语言,运行在JVM虚拟机上。在2019年之前是Android SDK的主要语言。用于移动开发中的遗留项目、服务器端(Spring)和企业应用程序。以强类型、自动垃圾回收和字节码跨平台为特点。

为什么Java被认为是Android的遗留语言?

谷歌于2019年宣布Kotlin为Android的首选语言。新的AndroidX库、Jetpack Compose、架构建议和文档默认以Kotlin提供。Java仍然完全受支持,但API是以Kotlin优先的方法设计的。Java项目需要更多样板代码,并且不能首先获得新的语言特性。

Android使用哪个版本的Java?

Android完全支持Java 8,部分支持Java 11(Android 12+),通过D8脱糖实验性支持Java 17。Android Gradle Plugin(AGP)8.x通过脱糖将现代字节码转换为与旧API兼容的代码。开发者可以使用lambda、Optional和DateTime API编写Java 11+代码,但records和sealed classes只能通过D8使用。

Java与Kotlin有何不同?

Kotlin需要更少的代码:数据类取代了数十行Java样板代码,空安全内置于类型中,协程简化了异步操作。Java为初学者提供更简单的语法、经过验证的库生态系统和稳定的工具。运行时性能相同——两者都编译为JVM字节码,由Android ART执行。

在Android上使用哪些IDE进行Java开发?

Android Studio — 支持Java和Kotlin的Android开发标准IDE。包括模拟器、性能分析器(CPU、内存、网络)、布局检查器、APK分析器。IntelliJ IDEA适用于服务器端Java。Eclipse ADT已过时,不受谷歌支持。Android Studio还提供通过内置转换器将Java代码迁移到Kotlin的工具。

总结

  • Java — 一种面向对象的语言,11年来一直是Android SDK的主要语言
  • JVM字节码通过d8转换为DEX,由Android Runtime(ART)使用GC执行
  • Android支持Java 8-17,通过D8/R8脱糖实现向后兼容
  • Java Activity — 具有生命周期onCreate → onStart → onResume → onPause → onStop → onDestroy的基本组件
  • Gradle — 支持Java 17、AGP 8.x和构建变体的构建系统
  • Kotlin — Java的继承者,具有相同的字节码,但语法更现代且具有空安全
  • Java遗留代码约占Android项目的35%,谷歌继续支持两种语言

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读