Java for Android 教程:从零开始构建你的第一个 App
这份教程分为几个核心部分,建议你按照顺序学习。

第一部分:为什么是 Java?—— Android 开发的基石
在开始之前,你需要明白为什么 Android 开发主要使用 Java(以及后来的 Kotlin)。
- 官方支持:Android 操作系统本身以及其核心的软件开发工具包都是用 Java 语言编写的,这意味着使用 Java 可以最直接、最全面地调用 Android 的所有功能。
- 成熟稳定:Java 是一门非常成熟、稳定、拥有庞大社区和丰富资源的语言,遇到任何问题,你几乎都能找到解决方案。
- 面向对象:Android 应用开发的核心思想是面向对象,而 Java 是一门纯粹的面向对象编程语言,两者完美契合。
注意:Google 在 2025 年宣布 Kotlin 是 Android 的首选开发语言,Kotlin 更简洁、更安全,100% 兼容 Java。强烈建议新手直接学习 Kotlin,由于市面上仍有大量使用 Java 的项目和教程,并且学习 Java 有助于你理解计算机科学的底层概念,因此学习 Java 依然是 Android 开发者一项非常有价值的技能。
第二部分:Java 基础语法(Android 开发视角)
我们将通过 Android 应用的例子来学习 Java。
Hello World! —— 你的第一个 Android 项目
当你创建一个新的 Android 项目时,系统会自动为你生成一个 MainActivity.java 文件,打开它,你会看到类似下面的代码:

package com.example.myfirstapp; // 包名,用于组织代码
import androidx.appcompat.app.AppCompatActivity; // 导入 Android 的一个基础活动类
import android.os.Bundle; // 导入 Bundle 类,用于保存活动状态
public class MainActivity extends AppCompatActivity { // 定义一个 MainActivity 类,继承自 AppCompatActivity
@Override // 重写父类的方法
protected void onCreate(Bundle savedInstanceState) { // onCreate 是活动的生命周期方法,App 启动时首先调用它
super.onCreate(savedInstanceState); // 必须先调用父类的 onCreate 方法
setContentView(R.layout.activity_main); // 设置此活动的布局文件,即显示哪个界面
}
}
核心概念解读:
package:就像你的文件夹,com.example.myfirstapp是项目的唯一标识符。import:告诉 Java 编译器去哪里找用到的类(AppCompatActivity),Android Studio 会自动帮你管理。class:类是 Java 程序的基本单元,在 Android 中,一个屏幕通常对应一个Activity类。public class MainActivity extends AppCompatActivity:定义了一个名为MainActivity的公共类,并且它继承自AppCompatActivity,继承是面向对象的核心概念,MainActivity获得了AppCompatActivity的所有功能(如处理按键、横竖屏切换等),我们只需要专注于自己的逻辑。@Override:注解,它告诉编译器,我们下面的方法onCreate是要重写(覆盖)父类的方法,这可以防止你写错方法名。onCreate(Bundle savedInstanceState):这是 Android 应用的“入口”方法之一,当你的 App 启动并显示这个界面时,这个方法就会被执行。setContentView(R.layout.activity_main):这是最关键的一行!它告诉 Android 系统:“请把res/layout/activity_main.xml这个布局文件解析并显示在屏幕上”。R是一个自动生成的类,存放了所有资源(图片、布局、字符串等)的 ID。
变量与数据类型
你的 App 需要存储信息,比如用户的名字、分数、开关状态等。
// 在 MainActivity 类的 onCreate 方法中或类的顶部定义
// 整数类型,用于年龄、分数等
int userAge = 25;
// 浮点数类型,用于价格、身高等
double userHeight = 1.75;
// 字符类型,用于单个字符
char gender = 'M';
// 布尔类型,用于判断开关、是否登录等
boolean isLoggedIn = false;
// 字符串类型,用于文本信息
String userName = "Alice";
// 在 Android 中,我们通常用 TextView 来显示文本
// 假设你在布局文件中定义了一个 id 为 tv_name 的 TextView
TextView nameTextView = findViewById(R.id.tv_name); // 通过 ID 找到这个视图
nameTextView.setText("Hello, " + userName); // 设置它的显示文本
方法
方法是一段可以重复执行的代码块,在 Android 中,方法用于封装逻辑。
// 定义一个方法,用于计算并返回用户的 BMI
public double calculateBMI(double weight, double height) {
// BMI = 体重(kg) / 身高(m) 的平方
return weight / (height * height);
}
// 在 onCreate 方法中调用这个方法
double bmi = calculateBMI(70, 1.75);
TextView bmiTextView = findViewById(R.id.tv_bmi);
bmiTextView.setText("Your BMI is: " + bmi);
控制流
让你的 App 能够根据不同情况做出不同反应。

if-else 语句:
int score = 85;
if (score >= 90) {
TextView resultView = findViewById(R.id.tv_result);
resultView.setText("Grade: A");
} else if (score >= 80) {
TextView resultView = findViewById(R.id.tv_result);
resultView.setText("Grade: B");
} else {
TextView resultView = findViewById(R.id.tv_result);
resultView.setText("Grade: C or below");
}
for 循环:当你需要重复执行某项操作时使用,比如显示一个列表。
// 假设我们有一个字符串数组
String[] fruits = {"Apple", "Banana", "Cherry"};
// 遍历数组
for (int i = 0; i < fruits.length; i++) {
// 在 Android 开发中,你可能会用这个循环来动态添加列表项
Log.d("FruitList", "Fruit " + i + ": " + fruits[i]);
}
第三部分:Android 核心组件与 Java 的结合
这是 Java 在 Android 中的实际应用。
使用 XML 布局
Android 的界面布局通常写在 XML 文件中(如 activity_main.xml),而 Java/Kotlin 代码负责控制这些界面元素。
activity_main.xml 示例:
<LinearLayout ...>
<TextView
android:id="@+id/tv_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:id="@+id/btn_click_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me" />
</LinearLayout>
MainActivity.java 中如何使用:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1. 通过 findViewById 找到 Button 和 TextView
Button myButton = findViewById(R.id.btn_click_me);
TextView myTextView = findViewById(R.id.tv_hello);
// 2. 为 Button 设置一个点击监听器
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 当按钮被点击时,这个方法里的代码会执行
myTextView.setText("Button was clicked!");
}
});
}
}
setOnClickListener 是 Android 中最常用的交互方式,它需要一个 View.OnClickListener 对象,这个对象里有一个 onClick() 方法,当点击事件发生时,系统会自动调用它。
处理用户输入
最常见的输入是 EditText(文本框)。
activity_main.xml 添加一个 EditText:
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter your name" />
MainActivity.java 中获取输入内容:
// 在 onCreate 方法中
EditText nameEditText = findViewById(R.id.et_name);
Button submitButton = findViewById(R.id.btn_submit); // 假设有一个提交按钮
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 获取 EditText 中的文本
String name = nameEditText.getText().toString();
// 检查输入是否为空
if (name.isEmpty()) {
Toast.makeText(MainActivity.this, "Name cannot be empty!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Hello, " + name, Toast.LENGTH_LONG).show();
}
}
});
getText().toString():这是从 EditText 获取文本的标准做法。getText() 返回的是 Editable 类型,需要用 .toString() 转换成字符串。
Toast.makeText(...).show():这是一个非常方便的 Android API,用于在屏幕上短暂地显示一个小提示框。
第四部分:进阶 Java 概念(Android 必备)
列表
几乎所有的 App 都有列表(如联系人、新闻、设置项),在 Android 中,这通常通过 RecyclerView 实现。
- 数据源:一个
List或ArrayList,用来存放你的数据(如一个字符串列表)。 - 适配器:一个 Java 类(如
MyAdapter),它负责将数据源中的每一项数据“适配”并“填充”到列表的每一个条目布局中。 - 布局管理器:决定列表如何排列(垂直、水平、网格)。
基本流程:
- 在 XML 中定义
RecyclerView。 - 在 Java 中创建一个数据源(
ArrayList<String>)。 - 创建一个
Adapter类,接收数据源,并实现其必要方法(onCreateViewHolder,onBindViewHolder)。 - 在
MainActivity中,找到RecyclerView,设置LayoutManager和Adapter。
Intent
Intent 是 Android 的“信使”,用于启动组件(如从 Activity A 跳转到 Activity B)或发送广播。
显式 Intent(明确知道要启动哪个组件):
// 从 MainActivity 跳转到 SecondActivity Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); // 启动新的活动
隐式 Intent(声明一个动作,让系统选择合适的组件来处理,如打开网页、拨打电话):
// 打开一个网页
Uri webpage = Uri.parse("https://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
异步任务
网络请求、文件读写、数据库操作等都不能在主线程(UI线程)中进行,否则会导致应用“卡死”(ANR - Application Not Responding),Java 提供了多种方式来处理耗时任务:
- AsyncTask(简单但已过时,不推荐新项目使用):可以轻松地在后台线程执行任务,并在完成后更新 UI。
- Thread + Handler:更底层的方式,通过
Handler在不同线程间通信。 java.util.concurrent包:提供了强大的线程池工具,如ExecutorService。- RxJava / Kotlin Coroutines:现代 Android 开发中处理异步操作的主流和推荐方式。
第五部分:学习路径与资源推荐
-
打好 Java 基础:
- 书籍:《Head First Java》(图文并茂,适合入门)、《Java核心技术 卷I》(更系统、深入)。
- 在线教程:W3Schools, TutorialsPoint, Runoob 的 Java 教程。
- 视频:B站、YouTube 上的 "Java for beginners" 系列视频。
-
结合 Android 实践:
- 官方文档:Google Android Developers,这是最权威、最准确的资源,从 "Build your first app" 开始。
- 官方 Codelabs:动手实践的项目式教程,非常棒。
- 书籍:《Android编程权威指南》(被誉为“Android 圣经”,使用 Kotlin,但思想通用)。
- 视频课程:Udemy, Coursera, B站 上的高质量 Android 课程(注意选择使用 Java 的或同时讲解 Java/Kotlin 的)。
-
实践!实践!再实践!
- 模仿:跟着教程做一个简单的计算器、天气预报 App。
- 创造:尝试自己做一个你想用的 App,哪怕功能很简单。
- 阅读源码:去 GitHub 上找一些简单的开源 Android 项目,看看别人是怎么写的。
祝你学习顺利,早日开发出自己的 Android 应用!
