• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

Android 开发:Java 语法

在本教程系列中,您将熟悉 java,这是一种用于开发 android 应用程序编程语言

Android 开发:Java 语法  第1张

我们的目标是让那些已经熟悉一种编程语言(例如 php 或 Objective-C)的人做好准备,以便能够轻松地使用 Java 编程语言并投入到 Android 应用程序开发中。

在本特定教程中,您将学习 Java 语法的基础知识,包括如何创建注释、定义变量、制作条件语句以及使用循环进行迭代。如果您是 Java 的新手或者只是想温习一下细节,那么这就是适合您的教程系列!

入门

就先决条件而言,我们不会对您的编程经验做出很多假设。我们假设您了解如何编程(可能使用 PHP、Visual Basic 或 C++),但不熟悉 Java 语言编程的细节。

我们不打算详细说明为什么要执行 for 循环和 while 循环,但我们将在 Java 中向您展示这两种循环的语法。换句话说,我们不会教你编程;我们将为您提供常用 Java 语言结构和原则的清晰示例,同时指出一些特定于 Android 的提示和技巧。

你需要什么

从技术上讲,您不需要任何工具来完成本教程,但您肯定需要它们来开发 Android 应用程序。

要开发 Android 应用程序(或任何 Java 应用程序),您需要一个开发环境来编写和构建应用程序。Android Studio 是用于 Android 应用程序开发的官方集成开发环境 (IDE)。

它包括一个 Android 模拟器(用于模拟设备)、一个智能代码编辑器和其他对 Android 开发有用的功能。它还可免费用于 Windows、mac 和 Linux 操作系统。

有关如何安装 Android Studio 的完整说明,请参阅Android 开发人员网站。

现在让我们看看一些有用的 Java 语法。

注释

大多数编程语言都允许注释,Java 也不例外。您可以通过以 /* 开始注释并以 */ 结束注释来封装任意数量的文本行。例如:

/*    MULTILINE
COMMENT  */

您还可以使用 // 在单行代码后提供注释。例如:

int x = 7;        // First variable called x equals seven
int y = 8;    // Second variable called y equals eight
int result = x + y;    // The result variable value should equal 15

Java 还有一种称为 Javadoc 的标准注释类型,它不仅可以用来注释代码,还可以轻松创建代码文档。这个主题本身相当大,但这里有一个 Javadoc 注释的示例:

/** This method does something interesting
 *
 * @param someValue processed and returned
 * @param option changes the type of processing done to someValue
 * @return The result of someValue being processed
 */
public int sampleMethod(int someValue, boolean option) {
    //…
}

在上面的注释中,@param 描述了函数的参数, @return 描述了函数的返回值(即sampleMethod处理完参数后要返回的值)。

变量

变量只是一段数据。Java变量一般分为两类:

  • 原始数据类型,如 int、float、double、char 等。

  • Java 对象(由类定义定义)

变量用于不同的目的。有时,变量用于存储可以随时间变化或修改的值。例如,一个名为“counter”的变量有时可能会递增。

其他变量,特别是对于给定类的所有实例保持相同的类变量,应该使用static关键字定义。在其他时候,变量可能表示常量——这些变量应该使用final关键字来表明它们不会随时间变化。

变量仅在其领土或范围内有效。变量范围通常由花括号 { } 控制。定义变量后,它在这些大括号内有效。如果您尝试访问大括号外的变量,它将是undefined. 面向对象语言中的类成员变量通常称为属性。它们也可以称为字段或属性。

与其他常见的编程语言一样,您有赋值运算符,即等号:

int i = 5;

您还拥有算术运算符,例如 +、-、*、/。请记住根据需要使用括号来强制执行操作顺序:

int result = (a + b) / c;

最后,你有典型的一元运算符,它允许你用一个简单的语句修改单个变量:

iPositive++;    // increment by one; equivalent to iPositive = iPositive + 1;
iPositive --; // decrement by one; equivalent to iPositive = iPositive - 1;

请注意,递增 (++) 和递减 (--) 运算符可以是前缀或后缀,这意味着如果在循环中使用该项,则可以在确定任何条件之前或之后执行递增。通常,我们喜欢坚持使用后缀语句,这样代码更具可读性。

原始数据类型

让我们看一下 Java 编程语言中可用的一些原始数据类型:

  • byte:介于-128 和127 之间的8 位有符号整数。通常用于数组。

  • short:介于 -32,768 和 32,767 之间的 16 位有符号整数。同样,通常用于数组。

  • int:介于 -2,147,483,648 和 2,147,483,647 之间的 32 位有符号整数。这是最常用的“数字”变量。

  • long:介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的 64 位有符号整数。当 int 数据类型不够大时使用。

  • float:单精度 32 位浮点数。

  • double:双精度 64 位浮点数。将此数据类型用于十进制值。

  • 布尔值:只有两个可能的值:true 和 false。将此数据类型用于条件语句。

  • char:单个 16 位 Unicode 字符。

可以通过指定数据类型、后跟变量名、等号和初始值来定义原始类型变量。所有 Java 语句都以分号结尾。例如,下面的 Java 语句定义了一个名为 iVal 的变量,其初始值为 1:

int iVal = 1;

与许多其他语言一样,您可以定义特定数据类型的从零开始的数组。例如,下面定义了一个包含三个整数值(2 的前四次方)的数组:

int[] aiPowersOfTwo;
aiPowersOfTwo = new int[4];
aiPowersOfTwo [0] = 1;    //  2^0=1
aiPowersOfTwo [1] = 2;    //  2^1=2
aiPowersOfTwo [2] = 4;    //  2^2=4
aiPowersOfTwo [3] = 8;    //  2^3=8

常用的 Java 对象

Java 库提供了许多有用的对象以用于常见的数据结构。

所有对象都派生自 Object 类。所有原始数据类型都有相应的类。例如,Integer该类封装了一个int值并提供了许多有用的方法来处理整数数据值。让我们在代码中看到这一点。

以下 Java 代码实例化一个名为 的整数变量iVal,然后使用采用整数的构造函数创建一个Integer对象,然后使用 Integer 类中可用的句柄方法提取float等效变量。

int iVal = 1;
Integer integ1= new Integer(iVal);
float f = integ1.floatValue();

也许您将在 Android 应用程序中使用的最常见的对象是String. String 类用于封装人类可读的文本字符,这些字符经常显示在屏幕上。如果您正在从较小的部分修改或构建字符串,您还需要查看StringBuffer和StringBuilder类。

String strHello = new String("Hello World");

有关常见 Java 数据类型的列表,Android 参考包括java.lang 包的文档。您还可以在 java.io 包中找到通用输入/输出对象。

对于列表、队列、堆栈、日期和时间等更复杂的数据结构,相应的类位于java.util 包中。

最后,Android 应用程序依赖于许多有用的类,这些类定义了常用的应用程序组件,例如 Activity、Application、Dialog 和 Service。这些类可以在android.app 包中找到。

类权限和访问

您可以通过指定项的访问级别来控制类及其变量和方法的可见性。访问级别为公共、受保护、默认和私有。

一般来说,如果您希望可以从类外部访问某些内容,请使用public. 如果只能从类本身访问方法或变量,请使用private. protected当类或其任何子类需要访问时使用。最后,default如果方法或变量只能从包内而不是包外访问(默认情况下就是这种情况),则使用。

例如,下面的SillySensor类定义定义了几个具有不同访问级别的变量和方法:

  • 一个名为 的类变量sensordata,它仅在类内可见。

  • public可以在类外部调用 的构造函数。

  • 一个private名为 的方法calibrate(),只能从类本身内部调用。

  • 一个protected名为 的方法seedCalibration(),可以从类本身或子类(即“扩展”它的类)中调用。

  • 一个public名为 的方法,可以从任何地方调用,允许对变量getSensorData()进行“只读”访问。sensorData

public class SillySensor
{
    private int sensorData;
 
    public SillySensor()
    {
        sensorData=0;
    }
 
    private void calibrate(int iSeed)
    {
        // Calibrate here
    }
 
    protected void seedCalibration(int iSeed)
    {
        calibrate(iSeed);
    }
 
    public int getSensorData()
    {
        // Check sensor here
 
        return sensorData;
    }
 
}      
 
// Now that we're outside the class, you can't access these three fields:
SillySensor obj = new SillySensor()     
obj.calibrate()     
obj.sensorData     
obj.seedCalibration() 
 
// Only the public fields can be accessed when an object is created:  
SillySensor obj = new SillySensor()     
obj.getSensorData()

现在默认。如果您没有为类、方法或变量声明任何访问修饰符,那么default修饰符将自动应用于它,这意味着它也可以被同一包中的类访问。例如:

package myPackage;
 
class PrintSomething {
    void message(){
        System.out.println("I am printing something");
    }
}

在这里,PrintSomething该类使用默认访问修饰符。因此,它对包中的所有类都是可见的myPackage。但是,如果我们尝试PrintSomething在 之外的类中使用myPackage,则会出现编译错误。

条件句

Java 包含条件语句,当且仅当满足特定条件时,这些语句可用于执行代码片段。通常,条件语句涉及两个方面。如果两边相等,则命题为真;否则,它是错误的。

Java 具有所有典型的条件运算符,例如:

  • ==:等于

  • !=:不等于

  • >:大于

  • >=:大于或等于

  • <: 少于

  • <=:小于或等于

当您需要将多个条件语句组合成一个更大的条件测试时,您可以使用 and ( &&) 和 or ( ||)。例如:

  • ((a==b)&& (a==c))仅当 A 等于 B 且等于 C 时才为真

  • ((a==b) || (a==c))仅当 A 等于 B 或等于 C 时才为真

如果您需要,Java 还有按位运算符 ( &, |, ^)、移位 ( >>, <<) 和补码 ( ) 运算符。有关详细信息,~请参阅Java 文档。

现在您知道如何编写条件语句,您可以创建条件代码段。条件代码语句的最简单形式是 if 语句:

boolean condition = true;
if(condition==true)
{
    // Execute this code only if  condition variable is true
}

如果您想提供在条件不满足时运行的替代代码,请将 else 子句与 if 语句一起使用:

boolean condition = true;
if(condition==true)
{
    // Execute this code only if condition variable value is true
} else {
    // Execute this code only if condition variable value is false
}

如果要处理两种以上的情况,可以使用级联 if-else-if-else 语句,如下所示:

if(iVar==0) {
    // variable is zero
} else if (iVar > 0) {
    // variable is a positive number
} else {
    // variable is a negative number
}

开关案例声明

当您有多个可能从单个变量值分支的不同代码路径时,您可以使用 switch 语句。使用 switch 语句,您可以提供要检查的变量,并提供多种选项以针对特定情况执行。

如果没有其他情况适用,您还可以提供一个默认选项来执行。每个案例都可以以break声明结束。如果break未提供语句,代码将继续执行到下一个 case 语句。

char singleChar = 'z';
switch(singleChar) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
    // singleChar is a vowel! Execute this code!
    break;
default:
     // singleChar is a consonant! Execute this code instead!
     break;
}

循环

当您想重复执行代码或使用递归时(嘿,如果您不知道我们在说什么,请查阅那个),Java 支持多种不同类型的循环。

如果语句为真,要连续循环,请使用 while 循环:

int numItemsToProcess = 3;
while(numItemsToProcess > 0)
{
    // process an item
    numItemsToProcess--;
}

如果要在第一次迭代后评估条件循环表达式,可以改用 do-while 循环:

do
{
    // check for items to process, update numItemsToProcess as required
    // process item, updated numItemsToProcess
} while (numItemsToProcess > 0);

最后,如果要循环特定次数的迭代,可以使用 for 循环。for 循环具有三个参数:初始值、终止值和增量值。例如,要执行循环 100 次,打印从 1 到 100 的数字,您可以使用以下 for 循环:

for(int i = 1; i <=100; i++)
{
    // print i
}

注意:必要时,您还可以使用break语句跳出 while()、do-while() 或 for() 循环。您还可以使用 continue 语句跳过循环当前迭代的其余部分并继续进行下一次迭代(当然是重新计算条件表达式)。

按值传递与按引用传递

Java 中没有指针。好吧,好吧,继续吧,松一口气。没有指针把事情搞砸,生活已经够艰难了,对吧?

好了,现在又要注意了。在 Java 中,方法参数是按值传递的。但是,当方法参数是一个对象(即除原始类型之外的任何对象)时,只有对该对象的引用被传递到方法中——很像指针,抱歉!

因此,为了修改传递给给定方法的对象,您通常传入对象引用,然后对其进行操作,这会修改您传入的对象的基础数据。但是,您不能换出对象本身. 这是一个简单的例子:

在这里,我们有一个类叫做Cat:

public class Cat {
    private String mCatName;
 
    Cat(String name) {
        mCatName=name;
    }
 
    public String getName() {
        return mCatName;
    };
 
    public void setName(String strName) {
        mCatName = strName;
    };
}

所以在类中我们有设置名称的构造函数、getName获取存储名称的方法setName以及设置新名称的方法。

现在,让我们尝试使用这个类并将一个Cat对象传递给一些函数,看看会发生什么:

void messWithCat(Cat kitty) {
    kitty = new Cat("Han");
}
 
void changeKitty(Cat kitty) {
    kitty.setName("Wookie");
}
 
Cat haveKitten()
{
    Cat kitten = new Cat("Luke");
    return kitten;
}

最后,让我们调用这些方法,看看它们如何作用于Cat对象实例:

Cat cat1 = new Cat("Jabba");
Cat cat2 = new Cat("Leia");
 
cat1.getName();    // Returns Jabba
cat2.getName();    // Returns Leia
messWithCat(cat1);
changeKitty(cat2);
Cat cat3 = haveKitten();
cat1.getName();    // Returns Jabba – Note that object remains unchanged!
cat2.getName();    // Returns Wookie
cat3.getName();    // Returns Luke

概括

您刚刚完成了 Java 编程语言的速成课程。虽然您可能还没有准备好编写您的第一个 Java 应用程序,但您应该能够完成最简单的 Android 示例应用程序 Java 类并确定它们的用途,至少在 Java 语法方面是这样。

对于 Android 开发,您要研究的第一个类是 Activity 类。Android 应用程序使用活动来定义不同的运行时任务,因此您必须定义一个活动作为应用程序的入口点。现在您已经掌握了 Java 语法,我们强烈建议您学习 Android 初学者教程。

对于 Android 开发,您只是触及了 Java 开发的皮毛。欢迎浏览我们的Java 课程,了解有关移动应用程序开发的更多信息。


文章目录
  • 入门
  • 你需要什么
  • 注释
  • 变量
  • 原始数据类型
  • 常用的 Java 对象
  • 类权限和访问
  • 条件句
  • 开关案例声明
  • 循环
  • 按值传递与按引用传递
  • 概括
  • 发表评论