当前位置: 首页 > news >正文

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当中被设置为启动页面,如下代码:

<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
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函数。会执行

Fish fish=new Fish(); fish.name="鲫鱼"; fish.swim();
  • name是成员变量,成员变量也有类型,String name类型是字符串
  • swim 是方法,是函数,他有函数体与返回值。返回值可以是void、String、int
    成员变量与方法还可标记用private 、public、protected标记。
  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 内部可用
  • public : 外部、内部可用
  • protected :外部不可用,继承子类可用。
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位、有符号的以二进制补码表示的整数;范围是-231到231-1
  • short 数据类型是16位、有符号的以二进制补码表示的整数;范围是-215到215-1
  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;;范围是-263到263-1
  • byte 数据类型是8位、有符号的,最小值是-127,最大值127
  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数
  • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
  • boolean数据类型表示一位的信息

类的构造函数

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

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。

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函数

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)

类的多态

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

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执行完,再调用这个接口。

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
http://www.jsqmd.com/news/657207/

相关文章:

  • 新建了一个微信群深圳技术交流群
  • CISSP 域6知识点 安全评估与测试策略
  • 测试深度策略
  • 3个步骤轻松掌握PhotoGIMP:从Photoshop无缝迁移到开源图像编辑的终极方案
  • Python小白该这样入门呢
  • 从‘新建’到‘流转’:手把手教你用JIRA问题单驱动敏捷开发全流程
  • # AI Agent爬虫深度解析:从规则驱动到目标驱动,爬虫技术的终局之战
  • 基于忆阻器的自适应神经形态脑机接口解码系统
  • 象州站计算机联锁工程设计复现
  • 为什么 await 没生效?
  • 免费解锁Cursor AI Pro完整功能:5分钟掌握专业级AI编程助手
  • 可跑在STM32上的EtherCAT主机协议栈
  • 告别编译地狱!用Python的TenSEAL库5分钟上手同态加密实战(CKKS方案)
  • Electron 摄像头打不开/锁死问题排查手册
  • WebDebugx移动端网页调试实用技巧大全
  • 深入解析基4 Booth算法在定点乘法器中的高效实现
  • 告别手动复制粘贴:用Makefile自动化你的Vivado DPU XO文件生成流程
  • 【智能代码生成×DevOps流水线实战指南】:20年SRE亲授5大高危集成陷阱与零故障落地路径
  • 企业级仓库管理实战:若依WMS现代化仓储解决方案深度解析
  • MicMac终极指南:免费开源摄影测量软件从入门到精通
  • 03华夏之光永存:黄大年茶思屋榜文解法「第6期第3题」异构算力协同的HPC+AI实时训练算法
  • 从‘硬’到‘软’:一个老电源工程师的软启动电路设计笔记(基于光耦与比较器的经典实现)
  • 图像压缩ONNX模型跨平台推理一致性问题解决方案
  • 告别HAL库和寄存器:用Arduino语法在Keil5里玩转STM32F103(附完整移植流程)
  • UE4/UE5 Runtime FBX导入:从零到一构建高效动态模型加载方案
  • Nuke Survival Toolkit:150+专业插件如何彻底改变你的视觉特效工作流程
  • 嵌入式Linux驱动开发
  • PyTorch Transformer从入门到实战:手把手教你搭建中英翻译系统(附完整代码)
  • 微信小程序消息订阅踩坑实录:uni-app中withSubscriptions参数的那些‘坑’与最佳实践
  • 高效稳定的西门子200PLC和显控触摸屏编写的智能污水处理控制系统,实测一年运行稳定,无人值守可靠