Android手把手编写儿童手机远程监控App之JAVA基础

概述

上节嘟宝工程Git配置。这节开始讲解java基础,学习Java语法糖。Java 是由 Sun Microsystems 公司于1995年5月推出的 Java 面向对象程序设计语言。 Java 语言的语法与 C 语言和 C++ 语言很接近,但也丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如指针、操作符重载、多继承、强制类型转换。特别是Java 语言不使用指针,而是引用。并提供了内存回收机制,使得程序员不必为内存管理而担忧,但也带来java内存泄漏问题。java语言有以下特点:

  • Java语言是面向对象
  • Java语言是安全
  • Java 语言是解释型
  • Java 语言是动态的

Java语法糖

打开嘟宝工程,第四节讲解嘟宝工程详解,项目只有一个HelloWorldActivity页面,该页面在AndroidManifest当中被设置为启动页面,如下代码:

ini 复制代码
 <activity
            android:name=".HelloWorldActivity"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

我们将在HelloWorldActivity页面中学习java语法。

类的概念

在 Java 里,class 是最核心的概念之一。如果用一句话说清楚:class = 自定义类型 + 数据(属性)+ 行为(方法)。如定义类Fish,鱼有名字是属性,游泳是方法。 类是用来描述事物的,类的实例就是对象,对象即是数据。

  • HelloWorldActivity 定义类Fish
  • 创建属性name
  • 创建方法swim
scala 复制代码
package com.zilong.dubao;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
class Fish{
    String name;
    void swim(){
        Log.d("test",name+"会游泳");
    }
}
public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
        Fish fish=new Fish();
        ish.name="鲫鱼";
        fish.swim();
    }
}

其他HelloWorldActivity 继承AppCompatActivity,先不关心它是什么,app打开首先调用onCreate函数。会执行

ini 复制代码
 Fish fish=new Fish();
 fish.name="鲫鱼";
 fish.swim();
  • name是成员变量,成员变量也有类型,String name类型是字符串
  • swim 是方法,是函数,他有函数体与返回值。返回值可以是void、String、int 成员变量与方法还可标记用private 、public、protected标记。
  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 内部可用
  • public : 外部、内部可用
  • protected :外部不可用,继承子类可用。
csharp 复制代码
class Fish{
    public String name;
    protected int price=0;
    private float weight=0;
    public void swim(){
        add();
        Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);
    }
    private void add(){
        price++;
        weight++;
    }

}

name外部可用,price与weight内容函数可用。addPrice也只能内部可用。其中add函数当中,Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);,Log.d是andorid自带日志输出信息,它传递两个参数,一个是标签(用于过滤),一个是日志内容。运行andorid提示,查看日志输出: test标签作用是过滤。

类中成员变量数据类型

如name的类型是String 字符串,price类型是 int

  • int 数据类型是32位、有符号的以二进制补码表示的整数;范围是-2^31^到2^31^-1
  • short 数据类型是16位、有符号的以二进制补码表示的整数;范围是-2^15^到2^15^-1
  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;;范围是-2^63^到2^63^-1
  • byte 数据类型是8位、有符号的,最小值是-127,最大值127
  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
  • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
  • boolean数据类型表示一位的信息

类的构造函数

构造函数,类的对象被定义时,如:Fish fish=new Fish();会被调用。构造函数可不写,他与类名同,可做成员变量数据初始化。

csharp 复制代码
class Fish{
    public String name;
    protected int price;
    private float weight;
    Fish(){
        name="未知鱼";
        price=0;
        weight=0;
    }
    public void swim(){
        addPrice();
        addPrice(10);
        Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);
    }
    private void addPrice(){
        price++;
        weight++;
    }
}

类的继承

如HelloWorldActivity继承自AppCompatActivity。Fish作为一个类,还可以淡水鱼、海洋鱼,这些都属于鱼,可以继承自Fish。

csharp 复制代码
class Fish{
    public String name;
    protected int price=0;
    private float weight=0;
    public void swim(){
        addPrice();
        addPrice(10);
        Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);
    }
    private void addPrice(){
        price++;
        weight++;
    }
    private void addPrice(int num){
        price+=num;
        weight+=num;
    }

}
class OceanFish extends Fish{
    int age;
}

OceanFish 拥有Fish类中除用private标记的所有属性与方法。

类的重载

重载,同一个类中可以有多个同名的方法,但参数不同。包含构造函数,如add函数

csharp 复制代码
class Fish{
    public String name;
    protected int price=0;
    private float weight=0;
    public void swim(){
        addPrice();
         addPrice(10);
        Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);
    }
    private void addPrice(){
        price++;
        weight++;
    }
    private void addPrice(int num){
        price+=num;
        weight+=num;
    }

}

很容易理解,add函数,有两种状态。addPrice() addPrice(int num)

类的多态

重载与多态的区别,一个是类同一个类中可以有多个同名的方法,但参数不同。一个是父类与子类具有同名函数。

scala 复制代码
package com.zilong.dubao;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;


class Fish{
    public String name;
    protected int price;
    private float weight;
    Fish(){
        name="未知鱼";
        price=0;
        weight=0;
    }
    public void swim(){
        addPrice();
        addPrice(10);
        Log.d("test0","Fish类:"+name+"会游泳"+"价格"+price+"体重"+weight);
    }
    private void addPrice(){
        price++;
        weight++;
    }
    private void addPrice(int num){
        price+=num;
        weight+=num;
    }

}
class OceanFish extends Fish{
    @Override
    public void swim() {
        super.swim();
        Log.d("test0","OceanFish类:"+name+"会游泳"+"价格"+price);

    }
}
public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
        OceanFish fish=new OceanFish();
        fish.name="鲫鱼";
        fish.swim();
    }
}

OceanFish与Fish同有函数名称swim函数,被称为多态,在OceanFish 的swim函数中调用父类的swim,super.swim();如在我们的HelloWorldActivity当中,onCreate函数即是多态。

类的接口

接口即是回调函数,程序设计时用的很多。简单理解,调用fish.swim()函数,函数执行完之后,需要告诉我一下。我在执行swim时,传递一个接口(回调函数),swim执行完,再调用这个接口。

typescript 复制代码
package com.zilong.dubao;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;


class Fish{
    public String name;
    protected int price=0;
    private float weight=0;
    public interface CB {
            void onSwim();
    }
    Fish(){
        name="未知鱼";
        price=0;
        weight=0;
    }
    public void swim(CB cb){
        addPrice();
        addPrice(10);
        Log.d("test",name+"会游泳"+"价格"+price+"体重"+weight);
        cb.onSwim();
    }
    private void addPrice(){
        price++;
        weight++;
    }
    private void addPrice(int num){
        price+=num;
        weight+=num;
    }

}
public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
        Fish fish=new Fish();
        fish.name="鲫鱼";
        fish.swim(new Fish.CB() {
            @Override
            public void onSwim() {
                Log.d("test","Swim函数已经执行完成");

            }
        });
    }
}
  • Fish定义接口CB,swim函数需要传递CB变量。
  • fish被定义,调用swim时,创建new CB变量传递给swim函数。
  • swim执行完成,回调cb
相关推荐
菠萝地亚狂想曲2 小时前
Zephyr_01, environment
android·java·javascript
sTone873753 小时前
跨端框架通信机制全解析:从 URL Schema 到 JSI 到 Platform Channel
android·前端
sTone873753 小时前
Java 注解完全指南:从 "这是什么" 到 "自己写一个"
android·前端
catoop3 小时前
Kotlin 协程在 Android 开发中的应用:定义、优势与对比
android·kotlin
撒旦物种3 小时前
Android WebView 获取内容高度
android·webview
空中海3 小时前
第七章:安卓性能优化
android·性能优化
空中海4 小时前
第四章:导航与路由
android
2501_916007475 小时前
iOS逆向工程:详细解析ptrace反调试机制的破解方法与实战步骤
android·macos·ios·小程序·uni-app·cocoa·iphone
空中海6 小时前
第三章:状态管理与 Jetpack 架构组件
android·架构