嵌入式软件开发培训笔记——Java第二天(运算符、程序结构、数组与继承)

一、运算符
    分割符:,、;、[]、()
    算术运算符:+、-、*、/、%、++、--
    关系运算符:>、<、>=、<=、==、!=
    布尔逻辑运算符:!、&、|、^、&&、||
    位运算符:&、|、^、~、>>、<<、>>>
    赋值运算符:= 扩展赋值运算符:+=、-=、*=、/=
    字符串连接运算符:+
    造型操作符:() 

    其中位运算符^:
        一个数与另一个数按位异或得到的结果再次与这个数相异或,结果被还原。
        (A ^ B) ^ B == A
        1). A计划--->加密
        2). 不通过第三方变量进行两个数的交换

    其中无符号右移位运算符<<<:
    其中作为字符串连接符的“+”:把字符串连接起来生成一个新的字符串对象返回。
    字符串类型与其他任何类型的变量相“加”,其他的数据类型都会被自动转换成字符串类型。
    其中三目条件运算符x?y:z中x必须为布尔类型。
    其中移位运算符中:如(13 >> 35)等价于(13 >> 3)

    如何将一个数字转换成字符串?用“+”符号
    
二、程序结构
1、分支语句
    注意:if语句中括号内必须是一个布尔类型
            switch语句,表达式中的类型为byte/short/int/char    另String(在JDK1.7及以上版本合适)
            例:利用switch实现从健盘中输入星期几的字符串,按照输入的字符串输出相应的语句。
                键盘输入即C语言中scanf函数在JAVA中的实现是:
                    Scanner sc = new Scanner(System.in);
                    String province = sc.next();

2、循环语句
    for
    while
    do/while

    break/continue
        break可用于for/while/do-while/switch语句中,用于循环语句中,跳出一层循环。
        可以使用加标签的方式,直接从内层循环跳出外层循环,相当C语言中的goto语句。
        注意:所加的标签与C语言中不一样的地方,只能加在循环体的开头部分。

        continue语句,结束当前的循环,进入下次的循环,它也能用加标签的方法。

三、数组
    数组是用来存储一组相同数据类型数据的数据结构
    数组的元素可以是简单类型的数据,也可以是引用类型的数据
    
   掌握数组的声明
   掌握数组的初始化
   掌握数组的拷贝和排序

    一维数组用法四步走:
    1、声明
            int[] a;
    2、分配空间
            a = new int[5];
    3、赋值
            a[0] = 8;
    4、数据处理
            a[0] = a[0] * 10;

    
    任何数组对象都有一个length属性,直接返回数组长度。
    在java中数组是严格检查边界的。

    Array.sort()方法  调用后会自动进行排序
    public class ArraysSort{
        public static void main(String args[]){
            int[] a = {10, 3, 19, 2, 11, 15};
            System.out.println("排序前:");
            for(int i = 0; i < a.length; i++)
                    System.out.print(a[i]+"");
            Arrays.sort(a);
            System.out.println("排序后:");
            for(int i = 0; i < a.length; i++)
                    System.out.print(a[i]+"");
        }
    }

    数组值的拷贝
    System类的静态方法System.arraycopy()
    参数:
            ---src-->源数组
            ---srcPos-->源数组中的起始位置
            ---dest-->目标数组
            ---destPos-->目标数组中的起始位置
            ---length-->要复制的数组元素的数量
    作用:从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

    多维数组的声明:
        int[][] intArray;
        double dbArray[][];

        int[][][] intArray;
        String strArray[][][];
        需要注意的是:
        (1)多维数组中当使用new来创建时,不必指定每一维的大小,但要指定最左边的维的大小。
        如:int[][] array = new int[2][];
        (2)二维数组:int[][] array = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};    array.length = 4(即行数),array[i].length = 3(指的是某一行的长度)
        (3)二维数组的声明和初始化应按从高维到低维的顺序进行,例如:
                   int a[][] = new int[3][];
                    a[0] = new int[2];
                    a[1] = new int[4];
                    a[2] = new int[3];

    
    public static void main(String[] args)中自带参数用法
        public class test {
            public static void main(String[] args){
                    for(int i = 0; i < args.length; i++)
                        System.out.println(args[i]);
            }
        }
    参数设置方法:右击java源文件名选择run as,再选择run configrations,在打开的窗口中选择(x)=Arguments选项,然后在Program arguments文本框中输入参数,参数之间用空格或回车分开。

    数组实现堆栈的算法
stack类
测试程序
package stack;

public class stack {
 int[] mystack;
 int top;
 int maxsize;
 
 /*create empty stack*/
 public stack(int max){
  this.maxsize = max;
  mystack = new int[max];
  top = -1;
 }
 
 /*get stack size*/
 public int get_size(){
  return maxsize;
 }
 
 /*return element count*/
 public int get_count(){
  return top;
 }
 
 /*clear stack*/
 public void clear_stack(){
  top = -1;
  for(int i = 0; i < mystack.length; i++){
   mystack[i] = 0;
  }
 }
 
 /*if stack full*/
 public int full_stack(){
  if(top == (maxsize-1)){
   return 1;
  }else{
   return 0;
  }
 }
 
 /*if stack empty*/
 public int empty_stack(){
  if(top == -1){
   return 1;
  }else{
   return 0;
  }
 }
 
 /*pop stack*/
 public int pop_stack(){
  return mystack[top--];
 }
 
 /*push stack*/
 public void push_stack(int arg){
  mystack[++top] = arg;
 }
 
 /*get top*/
 public int get_top(){
  return mystack[top];
 }
}
package stack;
public class test {
 public static void main(String[] args){
  stack an = new stack(5);
   
  if(an.full_stack() == 0){
   an.push_stack(10);
  }
 
  if(an.full_stack() == 0){
   an.push_stack(9);
  }
 
  if(an.full_stack() == 0){
   an.push_stack(8);
  }
 
  if(an.full_stack() == 0){
   an.push_stack(7);
  }
 
  if(an.full_stack() == 0){
   an.push_stack(6);
  }
 
  if(an.full_stack() == 0){
   an.push_stack(5);
  }
  while(an.get_count() > 0){
   if(an.empty_stack() == 0){
    System.out.println(an.pop_stack());
   }
  }
 
  System.out.println(an.get_top());
 }
}

四、继承
extends
子类继承父类所有的属性和方法。构造器除外。
特点:面向对象的重要特征
          可以实现代码的复用

java只支持单继承,跟C++不一样。
即一个类父类只能有一个,子类可以有多个。
基本语法:
            访问控制                    子类名                            父类
            <modifier>    class    <name>    [extends<superclass>]
            {
                        <declaration>*
            }
在类、类的属性以及类的方法前面加修饰符可限定其访问权限,实现其在一定范围内的信息隐藏。
修饰符
同一个类中
同一个包中
子类中
全局
private
yes



default
yes
yes


protected
yes
yes
yes

public
yes
yes
yes
yes

父类
子类(并继承父类所有的东西)
测试程序
public class Animal {
 String name;
 int age;
 float weight;
 
 public Animal(){
  super();
 }
 
 public Animal(String name, int age, float weight){
  this.name = name;
  this.age = age;
  this.weight = weight;
 }
 
 public String getName(){
  return name;
 }
 
 public void setName(String name){
  this.name = name;
 }
 
 public int getAge(){
  return age;
 }
 
 public void setAge(int age){
  this.age = age;
 }
 
 public void setWeight(int weight)
    {
  this.weight = weight;
    }
 public float getWeight()
 {
  return weight;
 }
 
 public void eat(){
  System.out.println("动物在吃...");
 }
 
 public void roar(){
  System.out.println("动物在吼叫...");
 }
}

public class dog extends Animal {
 public void watchHome(){
  System.out.println(getName()+"在看门");
 }
}

/*新建子类时使用extends关键字,若使用eclipse创建子类时在新建向导框中的Superclass选项处填上父类名*/

public class Test {
 public static void main(String[] args){
  dog xiaobai = new dog();
  xiaobai.setName("小白");
  xiaobai.eat();
  xiaobai.roar();
 
  xiaobai.watchHome();
 
  System.out.println(xiaobai.getAge());
 }
}

方法覆盖(override)
    子类重写父类的同名方法和父类成员变量同名的成员变量
    1、方法名必须相同
    2、参数列表必须相同
    3、返回值类型必须相同
    4、子类的权限只能更开放
    5、抛出的异常只能列少
    @Override
    

super关键字
    super代表着父类对象的一个引用。 
    super关键字的用法
访问父类的成员变量——super.变量
访问父类中被重写的方法——super.方法([参数列表])
访问父类的构造器——supe([参数列表])
    
    将“方法覆盖(override)”下截图中super.eat()及super.roar()前注释去掉,即访问父类中被重写的方法。
    父类与子类中同名的变量并不是在同一存储空间的。

关于构造器的super
    创建子类对象时,要先创建父类对象。子类对象包含着父类对象。
    当子类构造器没有使用super显示地调用父类构造器时,系统会默认地调用父类的无参构造器。
【源码免费下载链接】:https://renmaiwang.cn/s/tskoo 《CCSS数据集详解》以'中国癌症筛查研究'为全称的数据集,作为公共卫生领域的重要资源,在癌症预防、筛查和早期发现策略等方面发挥着关键作用。该数据集通过系统性地整合和分析,旨在深入探讨癌症流行病学特征及其筛查效果之间的关系。其核心要素在于对参者多维度的详细记录,包括个人基本信息、健康状况、生活习惯以及癌前检查结果等。具体而言:首先,在个人基本信息方面,数据可能涵盖了年龄、性别、婚姻状况、教育程度及工作背景等信息;其次,在健康状况维度,则可能涉及慢性疾病史、家族癌症病史以及体重指数(BMI)等指标;再次,在生活习惯部分,将详细记录吸烟、饮酒习惯、饮食模式和运动频率等内容;此外,关于癌症筛查项目,数据集包含了乳腺癌钼靶X线检查、宫颈癌细胞学检测及肺癌低剂量CT扫描等多个关键领域;在筛查结果分析方面,则重点关注早期癌症发现率、假阳性假阴性比例等重要指标;同时,该数据集还提供了统计分析框架,包括描述性统计、生存分析和Logistic回归等方法,以评估不同因素对癌症风险的影响及筛查策略的效果。基于此,研究者可深入探讨如何优化筛查方案并提升早期诊断率。此外,在公共卫生政策制定层面,该数据集为制定科学的预防筛查策略提供了重要依据;同时,其标准化特征使其成为国际上比较分析癌症防治措施的有效资源。通过系统性研究和应用,CCSS数据集不仅为中国的癌症防控工作提供了实证支持,也为全球公共卫生研究贡献了宝贵的资源库。
《全面解析:北大青鸟app管理系统——打造高效应用发布审核流程》 在当今移动互联网时代,App已经成为人们生活中不可或缺的一部分。为了确保App的高效、安全发布,一款强大的App管理系统至关重要。本文将深入探讨北大青鸟开发的"app管理系统",它集开发者版和管理员审核版于一体,旨在提供全方位的App管理和审核解决方案。 我们要了解的是"开发者版"。这个版本是为App开发者设计的,其核心功能包括App的上传以及版本更新管理。开发者可以通过此系统便捷地上传他们的应用程序,无论是全新的App还是现有App的新版本,都能轻松处理。版本更新管理则允许开发者对已上线的应用进行迭代,及时修复问题,添加新功能,以满足用户不断变化的需求。此外,开发者版还可能包含权限管理、API接口文档、测试环境配置等功能,以便开发者在开发过程中实现无缝对接和高效协作。 接下来,我们转向"管理员审核版"。这一部分是针对平台管理者,它的主要任务是对开发者提交的App进行合规性审核。这包括但不限于检查App的内容是否合法,是否符合平台的政策和规定,是否存在恶意代码或侵犯用户隐私的行为。通过严格的审核流程,可以有效保障用户的安全,维护平台的良好秩序。管理员审核版可能还包含反馈机制,以便开发者进行沟通,提出修改意见,直至App符合发布标准。 北大青鸟的app管理系统,结合了开发者的工作流和管理员的监管职责,实现了从前端开发到后端审核的完整闭环。这样的设计不仅提高了工作效率,也确保了App的质量。同时,作为教育品牌北大青鸟的产品,这款系统或许还融入了其在IT职业教育领域的丰富经验,使得系统更加人性化,易于上手,对于开发者和管理员来说都是一种友好的工具。 在实际操作中,开发者和管理员需要熟悉系统的各项功能,掌握正确的使用方法,才能充分发挥其作用。例如,开发者需要学习如何优化App的打包方式,以适应系统的上传要求;而管理员则需熟练运用审核工具,快速准确地判断App的合规性。这需要双方不断地学习和实践,以便更好地利用北大青鸟app管理系统。 北大青鸟的app管理系统是移动应用生态中的一股强大力量,它通过专业化的工具和服务,助力开发者轻松管理App,同时保障了用户的权益和平台的健康发展。对于那些寻求高效、安全App管理方案的企业和个人,这款系统无疑是一个得考虑的选择。
【源码免费下载链接】:https://renmaiwang.cn/s/nxke9 在Android平台上,实时获取音量分贝是音频处理中常见的需求,这涉及到对音频数据的采集、处理以及转换成可读的分贝。在本文中,我们将深入探讨如何在Android环境中实现这一功能,主要关注基础知识、Android API以及相关的类如MediaRecorder和AudioRecord。了解分贝(dB)的概念至关重要。分贝是一个表示声音强度相对水平的无量纲单位,通常用于衡量声音相对于参考的响度。计算公式为:dB = 10 * log10(A1/A0),其中A1是测量得到的声压,A0是参考声压,通常取20微帕,代表人耳能感知的最小声压。在Android中,传感器提供的数据是振幅,我们需要将这个振幅转换为分贝。Android API提供了两种获取音频数据的类:MediaRecorder和AudioRecord。MediaRecorder主要设计用于录制完整音频并保存到文件,但也能提供获取最大振幅的简便方法——getMaxAmplitude()。这个方法返回最近采集的一小段音频数据中的最大振幅,范围在0到32767之间。然而,仅使用最大振幅可能造成分贝波动较大,因为极端数据的影响。为了计算分贝,我们需要一个稳定的参考A0。一些开发者可能会选择一个固定的数,如600,这将得出相对于背景噪音的分贝。但更准确的做法是找到20微帕声压对应的振幅,或者使用标准分贝计进行校准。在此文中,作者选择A0为1,这样可以直接用最大振幅计算分贝,其范围为0 dB到90.3 dB。下面是一个使用MediaRecorder获取分贝的简化示例:```javapackage com.example.myapp;import android.media.MediaRecorder;import android.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值