16--常用类和基础API--06

1、包装类

1.1 包装类概述

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

基本类型

对应的包装类(位于java.lang包中)

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

1.2 装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为【装箱】与【拆箱】:

什么是装箱:从基本类型转换为对应的包装类对象。

什么是拆箱:从包装类对象转换为对应的基本类型。

以Integer与int为例演示他们之间的转换:

基本类型 转 包装对象(自动装箱)

Integer i = new Integer(4);				// 使用构造函数函数
Integer iii = Integer.valueOf(4);		// 使用包装类中的valueOf方法

包装对象 转 基本类型(自动拆箱)

int num = i.intValue();

1.3 自动装箱与自动拆箱

由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:

Integer i = 4;		// 自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;		// 等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
// 加法运算完成后,再次装箱,把基本数值转成对象。

1.4 基本类型与字符串之间的转换

1.4.1 基本类型 ---> String

//基本类型 --> String

int i = 10;
//拼接方式
String s = i +"";

//静态toString(参数)方法
String s =  Integer.toString(10);

//静态方法valueOf(参数), valueOf()这个方法可以把任意的基本类型转成String类型
String s = String.valueOf(20);

1.4.2 String ---> 基本类型

将字符串的数据转换成int类型的数据

public class Demo18WrapperParse {
    public static void main(String[] args) {
        //字符串 --> int 
        String i = "100";
        int num = Integer.parseInt(i); 
        double v = Double.parseDouble("3.34");
        float v1 = Float.parseFloat("3.3");
        //...所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型
    }
}

除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:

方法

说明

public static byte parseByte(String s)

将字符串参数转换为对应的byte基本类型。

public static short parseShort(String s)

将字符串参数转换为对应的short基本类型。

public static int parseInt(String s)

将字符串参数转换为对应的int基本类型。

public static long parseLong(String s)

将字符串参数转换为对应的long基本类型。

public static float parseFloat(String s)

将字符串参数转换为对应的float基本类型。

public static double parseDouble(String s)

将字符串参数转换为对应的double基本类型。

public static boolean parseBoolean(String s)

将字符串参数转换为对应的boolean基本类型。

如果字符串参数的内容无法正确转换为对应的基本类型,则会抛java.lang.NumberFormatException异常。

1.4.3 Integer 和 int 有什么区别?

Integer 和 int 有什么区别?

        int是基本数据类型, Integer是int的包装类

        int默认值为0 , Integer的默认值null

或者什么情况下使用Integer, int?

        举例:小明考试,最终得到0分,请问他是去考试还是没去考试?去考试 用int

        小明考试,最终null,请问他是去考试还是没去考试?没有考试 用Integer

2、BigInteger类

2.1 BigInteger类概述

java中long型为最大整数类型,对于超过long型的数据如何去表示呢?在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger类中,实现四则运算都是方法来实现,并不是采用运算符.

2.2 BigInteger类的构造方法

方法

说明

public BigInteger(String val)

将字符串的数组封装成BigInteger对象

2.3 BigInteger类的常用方法

方法

说明

public BigInteger add(BigInteger val)

两个BigInteger进行相加,并返回BigInteger

public BigInteger subtract(BigInteger val)

两个BigInteger进行相减,并返回BigInteger

public BigInteger multiply(BigInteger val)

两个BigInteger进行相乘,并返回BigInteger

public BigInteger divide(BigInteger val)

两个BigInteger进行相除,并返回BigInteger,整数相除只保留整数部分。

public BigInteger remainder(BigInteger val)

两个BigInteger进行取余数

package com.suyv.math;

import org.junit.Test;

import java.math.BigInteger;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:43
*@Description: TODO
*/
public class BigIntegerDemo01 {
    BigInteger big1 = new BigInteger("12345678912345678912345678");
    BigInteger big2 = new BigInteger("78923456789123456789123456789");

    @Test
    public void Test01(){
        // 加
        System.out.println(big1.add(big2));
        // 减
        System.out.println(big2.subtract(big1));
        // 乘
        System.out.println(big2.multiply(big1));
        // 除
        System.out.println(big2.divide(big1));
        // 取余
        System.out.println(big2.remainder(big1));
    }

}

3、BigDecimal类

3.1 BigDecimal类的引入

在程序中执行下列代码,会出现什么问题?

System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);

double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供我们BigDecimal类可以实现浮点数据的高精度运算

3.2 BigDecimal类的构造方法

方法名

说明

public BigDecimal(String val)

将String类型的数组封装为BigDecimal对象

建议浮点数据以字符串形式给出,因为参数结果是可以预知的

3.3 BigDecimal类的常用方法

方法名

说明

public BigDecimal add(BigDecimal augend)

浮点类型数据相加操作

public BigDecimal subtract(BigDecimal subtrahend)

浮点类型数据相减操作

public BigDecimal multiply(BigDecimal multiplicand)

浮点类型数据相乘操作

public BigDecimal divide(BigDecimal divisor)

浮点类型数据相除操作

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

浮点类型数据相除操作,按照指定的模式,保留几位小数

package com.suyv.math;

import org.junit.Test;

import java.math.BigDecimal;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:50
*@Description: TODO
*/
public class BigDecimalDemo01 {

    BigDecimal big1 = new BigDecimal("0.09");
    BigDecimal big2 = new BigDecimal("0.01");

    @Test
    public void Test01(){
        // 加
        System.out.println(big1.add(big2));
        // 减
        System.out.println(big1.subtract(big2));
        // 乘
        System.out.println(big2.multiply(big1));
        // 除
        System.out.println(big1.divide(big2));
    }
}

4. Java比较器

我们知道基本数据类型的数据(除boolean类型外)需要比较大小的话,之间使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢?

在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。

Java实现对象排序的方式有两种:

  • 自然排序:java.lang.Comparable
  • 定制排序:java.util.Comparator

4.1 自然排序:java.lang.Comparable

Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。

实现 Comparable 的类必须实现 compareTo(Object obj)方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。

public interface Comparable{
    int compareTo(Object obj);
}

实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或 Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致

Comparable 的典型实现:(默认都是从小到大排列的)

  • String:按照字符串中字符的Unicode值进行比较
  • Character:按照字符的Unicode值来进行比较
  • 数值类型对应的包装类以及BigInteger、BigDecimal:按照它们对应的数值大小进行比较
  • Boolean:true 对应的包装类实例大于 false 对应的包装类实例
  • Date、Time等:后面的日期时间比前面的日期时间大

4.1.1 举例1

package com.suyv.comparable;
/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 15:21
*@Description: TODO
*/
public class Student implements Comparable{

    private int id;
    private String name;
    private int score;
    private int age;

    public Student() {
    }

    public Student(int id, String name, int score, int age) {
        this.id = id;
        this.name = name;
        this.score = score;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
        "id=" + id +
        ", name='" + name + '\'' +
        ", score=" + score +
        ", age=" + age +
        '}';
    }

    @Override
    public int compareTo(Object o) {
        // 这些需要强制,将o对象向下转型为Student类型的变量,才能调用Student类中的属性
        // 默认按照学号比较大小
        Student stu = (Student) o;
        return this.id - stu.id;
    }
}

测试类

package com.suyv.comparable;
/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 15:24
*@Description: TODO
*/
public class StudentTest {
    public static void main(String[] args) {
        Student[] arr = new Student[5];
        arr[0] = new Student(3,"张三",90,23);
        arr[1] = new Student(1,"熊大",99,22);
        arr[2] = new Student(5,"王五",75,25);
        arr[3] = new Student(4,"李四",85,24);
        arr[4] = new Student(2,"熊二",85,18);

        //单独比较两个对象
        System.out.println(arr[0].compareTo(arr[1]));   // 2
        System.out.println(arr[1].compareTo(arr[2]));   // -4
        System.out.println(arr[2].compareTo(arr[2]));   //0

        System.out.println("所有学生:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("按照学号排序:");
        for (int i = 1; i < arr.length; i++) {
            for (int j = 0; j < arr.length-i; j++) {
                if(arr[j].compareTo(arr[j+1])>0){
                    Student temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

4.1.2 举例2

package com.suyv.comparable;
/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:05
*@Description: TODO
*/
public class Goods implements Comparable {
    private String name;
    private double price;

    public Goods() {
    }

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    //按照价格,比较商品的大小
    @Override
    public int compareTo(Object o) {
        if(o instanceof Goods) {
            Goods other = (Goods) o;
            if (this.price > other.price) {
                return 1;
            } else if (this.price < other.price) {
                return -1;
            }
            return 0;
        }
        throw new RuntimeException("输入的数据类型不一致");
    }
}

测试:

package com.suyv.comparable;

import java.util.Arrays;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:07
*@Description: TODO
*/
public class GoodsTest {
    public static void main(String[] args) {
        Goods[] all = new Goods[4];
        all[0] = new Goods("《红楼梦》", 100);
        all[1] = new Goods("《西游记》", 80);
        all[2] = new Goods("《三国演义》", 140);
        all[3] = new Goods("《水浒传》", 120);

        Arrays.sort(all);

        System.out.println(Arrays.toString(all));
    }
}

4.2 定制排序:java.util.Comparator

思考

  • 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码(例如:一些第三方的类,你只有.class文件,没有源文件)
  • 如果一个类,实现了Comparable接口,也指定了两个对象的比较大小的规则,但是此时此刻我不想按照它预定义的方法比较大小,但是我又不能随意修改,因为会影响其他地方的使用,怎么办?

JDK在设计类库之初,也考虑到这种情况,所以又增加了一个java.util.Comparator接口。强行对多个对象进行整体排序的比较。

  • 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
  • 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
public interface Comparator{
    int compare(Object o1,Object o2);
}

4.2.1 举例1

实体类:

上述Student类--无修改

添加一个StudentScore进行分数排序

package com.suyv.comparable;

import java.util.Comparator;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:16
*@Description: 定义定制比较器类
*/
public class StudentScore implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        int result = s1.getScore() - s2.getScore();
        return result != 0 ? result : s1.getId() - s2.getId();
    }
}

测试01:使用自然排序

package com.suyv.comparable;
/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:18
*@Description: TODO
*/
public class StudentTest02 {
    public static void main(String[] args) {

        Student[] arr = new Student[5];
        arr[0] = new Student(3, "张三", 90, 23);
        arr[1] = new Student(1, "熊大", 99, 22);
        arr[2] = new Student(5, "王五", 75, 25);
        arr[3] = new Student(4, "李四", 85, 24);
        arr[4] = new Student(2, "熊二", 85, 18);
        
        System.out.println("所有学生:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        System.out.println("按照成绩排序");
        StudentScore sc = new StudentScore();
        for (int i = 1; i < arr.length; i++) {
            for (int j = 0; j < arr.length - i; j++) {
                if (sc.compare(arr[j], arr[j + 1]) > 0) {
                    Student temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

测试02:自然排序和定制排序一起使用

package com.suyv.comparable;

import java.util.Arrays;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:22
*@Description: TODO
*/
public class StudentTest03 {
    public static void main(String[] args) {
        Student[] students = new Student[5];
        students[0] = new Student(3, "张三", 90, 23);
        students[1] = new Student(1, "熊大", 99, 22);
        students[2] = new Student(5, "王五", 75, 25);
        students[3] = new Student(4, "李四", 85, 24);
        students[4] = new Student(2, "熊二", 85, 18);

        System.out.println(Arrays.toString(students));

        // 自然排序
        Arrays.sort(students);
        System.out.println("使用自然排序");
        System.out.println(Arrays.toString(students));


        //定制排序
        StudentScore sc = new StudentScore();
        Arrays.sort(students, sc);
        System.out.println("使用定制排序");
        System.out.println(Arrays.toString(students));
    }
}

4.2.2 举例2

实体类:

上述Goods类--无修改

测试类:

package com.suyv.comparable;

import java.util.Arrays;
import java.util.Comparator;

/**
*@Author: 憨憨浩浩
*@CreateTime: 2023-12-14 16:37
*@Description: TODO
*/
public class GoodsTest01 {
    public static void main(String[] args) {
        Goods[] all = new Goods[4];
        all[0] = new Goods("War and Peace", 100);
        all[1] = new Goods("Childhood", 80);
        all[2] = new Goods("Scarlet and Black", 140);
        all[3] = new Goods("Notre Dame de Paris", 120);

        // 使用匿名内部类
        Arrays.sort(all, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Goods g1 = (Goods) o1;
                Goods g2 = (Goods) o2;
                // 根据名字排序
                return g1.getName().compareTo(g2.getName());
            }
        });

        System.out.println(Arrays.toString(all));
    }
}

补充:Java保留两位小数

1、使用String.format()方法

	@Test
    public void Test01(){
        double number = 3.1455926;
        String result = String.format("%.2f", number);
        System.out.println(result);
    }

2、BigDecimal保留两位小数

	@Test
    public void Test02(){
        double number = 3.1455926;
        BigDecimal decimal = new BigDecimal(number);
        BigDecimal rounded = decimal.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(rounded);
    }

3、使用DecimalFormat类

	@Test
    public void Test03(){
        double number = 3.1455926;
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        String result = decimalFormat.format(number);
        System.out.println(result);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue组件封装知识总结

一、为什么要封装组件 首先&#xff0c;一个好问题&#xff0c;面试要考的&#xff01;为什么要封装组件呢&#xff1f; 提高代码的复用性&#xff1a;通过封装&#xff0c;可以将一段代码或一部分功能抽象为一个独立的组件&#xff0c;并在不同的项目或场景中重复使用。这样可…

【自定义View】android自定义渐变色圆弧+水波纹布局

本次用ko t lin 写了自定义渐变色圆弧水波纹布局。 备注&#xff1a;双水波纹的手写代码我放在文末了。但我自己写的运行起来有 亿点点难看。 所以效果图里用的 com.scwang.wave:MultiWaveHeader:1.0.0-andx 实现水波纹。--重要的是知道原理。。嘻嘻&#xff01;&#x1f618; …

天猫数据分析(天猫数据查询):11月茅台涨价依然稳居销冠,白酒市场销售现状分析

11月份&#xff0c;贵州茅台宣布涨价。2023年11月1日起茅台上调53%vol贵州茅台酒&#xff08;飞天、五星&#xff09;出厂价格&#xff0c;平均上调幅度约为20%。有媒体报道&#xff0c;随着茅台酒出厂价宣布上调后&#xff0c;市场销售价普遍上涨50元至100元不等。 如今&#…

JVM类加载机制详解及双亲委派机制分析

类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 public class Math {public static final int initData 666;public static User user new User();public int compute() { //一个方法对应一块栈帧内…

Jmeter接口自动化测试

之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存放在cs…

Java 线程的基本概念

创建和运行线程 方法一&#xff0c;直接使用 Thread // 创建线程对象 Thread t new Thread() {public void run() {// 要执行的任务}};// 启动线程 t.start();例如&#xff1a; // 构造方法的参数是给线程指定名字&#xff0c;推荐 Thread t1 new Thread("t1") …

《PySpark大数据分析实战》-10.独立集群模式的代码运行

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

【每日一题】反转二叉树的奇数层

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;广度优先搜索方法二&#xff1a;深度优先搜索 写在最后 Tag 【深度优先搜索】【广度优先搜索】【二叉树】【2023-12-15】 题目来源 2415. 反转二叉树的奇数层 题目解读 反转二叉树奇数层的节点。 解题思路 对于二叉…

ACL原理和配置

一.ACL概述 1.介绍 ACL 访问控制列表&#xff0c;可以通过对网络中报文流的精确识别&#xff0c;与其他技术结合&#xff0c;达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的&#xff0c;从而切实保障网络环境的安全性和网络服务质量的可靠性。 2.概述 ACL是…

半导体行业CRM选型推荐,引领企业升级

随着半导体材料行业的快速发展&#xff0c;企业面临着越来越多的挑战。在这个高度竞争的市场中&#xff0c;如何提高销售管理效率、降低成本、优化资源配置成为各企业亟待解决的问题。而引入CRM系统则可以为企业提供一整套信息化解决方案&#xff0c;推动半导体材料行业的持续发…

YOLOv8改进 | 2023Neck篇 | 利用RepGFPN改进特征融合层(附yaml文件+添加教程)

一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN&#xff08;重参数化泛化特征金字塔网络&#xff09;&#xff0c;利用其优化YOLOv8的Neck部分&#xff0c;可以在不影响计算量的同时大幅度涨点&#xff08;亲测在小目标和大目标检测的数据集上效果均表现良好涨点…

typescript 实现Optional

我们先看下面的这段代码,一个学生接口,里面有成员id,name,age,gender等等成员, 有一个方法graduate,里面要接受一个Student类型的实参 interface Student {id: numbername: stringage: numbergender: string}function graduate(Student: Student) {//...}现在有一个问题,就是学…

【腾讯云 HAI域探秘】借助高性能服务HAI快速学会Stable Diffusion生成AIGC图片——必会技能【微调】

目录 Stable Diffusion基本使用方法 学术加速测试 配置中文插件 Prompt与Negative prompt 采样器说明 人像生成 水光效果 微调的使用 图像生成种子/seed使用 附加/Extra 微调实例测试 图生图微调 ​编辑 使用蒙版微调 Stable Diffusion基本使用方法 环境配置&am…

利用python进行数据分析 第十四章 数据分析案例

本书正文的最后一章&#xff0c;我们来看一些真实世界的数据集。对于每个数据集&#xff0c;我们会用之前介绍的方 法&#xff0c;从原始数据中ᨀ 取有意义的内容。展示的方法适用于其它数据集&#xff0c;也包括你的。本章包含了一 些各种各样的案例数据集&#xff0c;可以用…

【排序算法】快速排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 排序流程1.3 图解算法1.3.1 第一步1.3.2 第二步1.3.3 第三步1.3.4 第四步 1.4 动画展示 二&#xff1a;算法性能2.1 时间复杂度2.1.1 理想情况2.1.2 最坏情况 2.2 空间复杂度2.2.1 原地排序2.2.2 非原地排序2.2.3 稳定性 三&#x…

KT148A语音芯片一线串口的控制时序起始脉宽的长度说明

一、KT148A一线串口细节点 KT148A语音芯片支持一线串口控制&#xff0c;单线的时序逻辑&#xff0c;所以就存在两个注意细节 起始脉宽的长度要求数据0和数据1的脉宽分配 一线通讯的时序要求 详见完整开发资料的“KT148A语音芯片使用手册3_V4.pdf”文档 章节3.1有详细的描述…

AD20-Excel创建IC类元件库

目录 准备模板AD操作 准备模板 AD操作 结果生成如下&#xff1a; over&#xff01;&#xff01;&#xff01;

CRM客户管理系统好不好用,有哪些判断标准?

市场上有着众多的CRM客户关系管理系统&#xff0c;从中选择一个适合自己企业的系统并非易事。除了需要了解自己的业务需求之外&#xff0c;还需要对市场上CRM系统的区别有一定的了解。不同的CRM系统各有特点&#xff0c;但有一些通用的标准可以用来评估它们的适用性。那么&…

Three.js中文网14入门案例

Three.js中文网 <template><div id"webgl"></div> </template><script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Scene const scene new TH…

Vue学习计划-Vue2--VueCLi(五)全局事件总线、消息订阅与发布(pubsub)

抛出问题:我们多级组件&#xff0c;或者任意不想关的子组件如何传递数据呢&#xff1f; 1. 全局事件总线&#xff08;$bus&#xff09; 一种组件间通信的方式&#xff0c;适用于任意组件间通信 全局事件总线示意图&#xff1a; 安装全局事件总线&#xff1a; new Vue({..…