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

Java面向对象(详细解释)

第一章 Static关键字

1.static的介绍以及基本使用

1.概述:static是一个静态关键字

2.使用:

        a.修饰一个成员变量:

                static  数据类型  变量名

        b.修饰一个方法:

                修饰符  static  返回值类型  方法名(形参){

                        方法体

                        return  结果

                }

3.调用静态成员:

        类名直接调用(不用new对象)

4.静态成员特点:

        静态成员属于类成员,不属于对象成员(非静态成员属于对象成员)

        静态成员会随着类的加载而加载

        静态成员优先于非静态成员存在在内存中

        凡是根据静态成员所在的类创建出来的对象都可以共享这个静态成员

public class Student {String name;int age;static  String ClassRoom;}
public class Test01 {public static void main(String[] args) {//先给静态成员赋个值Student.ClassRoom = "后陡门58号";Student s1 = new Student();s1.name = "张钥沅";s1.age = 26;
//        s1.ClassRoom = "后陡门58号";System.out.println(s1.name+","+s1.age+","+Student.ClassRoom);System.out.println("========================");Student s2 =new Student();s2.name  = "路卓豪";s2.age = 29;
//        s2.ClassRoom = "后陡门58号";System.out.println(s2.name+","+s2.age+","+Student.ClassRoom);}
}

2.static修饰成员的访问特点

1.在静态方法中能直接访问非静态成员吗?不能

        想要调用的话需要先new对象调用

2.在非静态方法中能直接访问静态成员吗?能

        同类中可以直接调用,也可以类名调用

        不同类中类名调用
3.在静态方法中能直接访问静态成员吗?能

        同类中可以直接调用,也可以类名调用

        不同类中类名调用

4.在非静态方法中能直接访问非静态成员吗?能

        同类直接调用,也可以new对象调用

        不同类new对象调用

总结:

        1.不管在不在同一个类中,非静态成员都可以new对象调用

        2.不管在不在同一个类中,静态成员都可以类名调用

问题1:既然static成员那么好使(类名直接调用),那么我们在实际开发中,能不能将所有的成员都定义成静态的?不能

        由于静态成员会随着类的加载而加载,如果将所有的成员都定义成静态的,那么类一加载静态成员都会进内存,会大量占用内存空间,所以说不能把所有的成员定义成静态成员

问题2:静态成员都啥时候定义?

        一般情况下,我们在抽取工具类的时候,可以将工具类中所有的成员都定义成静态的

问题3:啥时候定义工具类?

        我们在写代码的时候发现有的功能在反复实现,代码一样功能一样,此时就可以抽取出来,形成工具类

public class ArraysUtils {/*构造方法用private修饰工具类中的成员都是静态的,静态成员都是类名调用,不需要new对象所以工具类中的构造方法都是private修饰如果构造方法被private修饰,那么在别的类中就不能利用构造方法new对象* */private ArraysUtils(){}//定义一个方法,实现获取int数组最大值public static int getMax(int[] arr){int max =arr[0];for (int i=1;i<arr.length;i++){if (max<arr[i]){max = arr[i];}}return max;}
}
public class Test01 {public static void main(String[] args) {int[] arr = {5,34,7,3,45,12};
//        int max = arr[0];
//        for (int i=1;i<arr.length;i++){
//            if (max<arr[i]){
//                max = arr[i];
//            }
//        }
//        System.out.println("max = " + max);int max = ArraysUtils.getMax(arr);System.out.println("max = " + max);}
}
public class Test02 {public static void main(String[] args) {int[] arr = {2,354,56,78,54,3,65,6};
//        int max =arr[0];
//        for (int i=1;i<arr.length;i++){
//            if (max<arr[i]){
//                max = arr[i];
//            }
//        }
//        System.out.println("max = " + max);int max = ArraysUtils.getMax(arr);System.out.println(max);}
}

第二章 可变参数

需求:定义一个方法,实现n个整数相加

分析:

        方法参数位置,只明确参数类型,但是不明确参数个数,此时就可以定义成可变参数

1.可变参数的使用和注意事项

1.定义格式:

        数据类型...变量名

2.注意:
        可变参数的本质是一个数组

        参数位置不能连续写多个可变参数,而且当可变参数和其他普通参数一起使用时,可变参数需要放到列表最后

public class Demo01Var {public static void main(String[] args) {sum(1,2,3,4,5);sum1(1,1,2,3,4,5);}public static void sum(int...arr){int sum = 0;for (int i = 0; i < arr.length; i++) {sum+=arr[i];}System.out.println(sum);}public static void sum1(int i,int...arr){}
}

2.可变参数的练习

需求1:返回n个字符串拼接结果,如果没有传入字符,那么返回经字符串“”

public class Demo02Var {public static void main(String[] args) {/*返回n个字符串拼接结果,如果没有传入字符,那么返回经字符串“”*/String str = concat("蒋敦豪","鹭卓","李耕耘","李昊","赵一博","卓沅","赵小童");System.out.println("str = " + str);}public static String concat(String...s){String str = "";for (int i= 0;i<s.length;i++){str+=s[i];}return str;}
}

需求2:n个字符串进行拼接,每一个字符串之间使用某字符进行分隔,如果没有字符串,那么返回空字符串“”

public class Demo03Var {public static void main(String[] args){/*n个字符串进行拼接,每一个字符串之间使用某字符进行分隔,如果没有字符串,那么返回空字符串“”*/String str = concat("-","蒋敦豪","鹭卓","李耕耘");System.out.println("str = " + str);}public static String concat(String s1,String...s2){String str = "";for (int i = 0; i < s2.length; i++) {if (i!=s2.length-1){
//                str = str+s2[i]+s1;str+=s2[i]+s1;}else {str+=s2[i];}}return str;}
}

第三章 递归

1.概述:方法内部自己调用自己

2.分类:

        a.直接递归:

        public static meyhod(){

                method();

        }

        b.间接递归:

        A(){

                B();

        }

        B(){

                C();

        }

        C(){

                A();

        }

3.注意:

        递归必须要有出口,否则就会出现栈内存溢出

        递归即使有出口,递归次数也不要太多

public class Demo01Recursion {public static void main(String[] args) {method();}public static void method(){method();}
}

示例1:利用递归输出3到1

法1:

public class Demo02Recursion {public static void main(String[] args) {method(3);}public static void method(int i){System.out.print(i+" ");if (i-1>0){method(i-1);}}
}

法2:

public class Demo02Recursion {public static void main(String[] args) {method(3);}//    public static void method(int i){
//        System.out.print(i+" ");
//        if (i-1>0){
//            method(i-1);
//        }
//    }public static void method(int i){if (i==1){System.out.println(i);//结束方法return;}System.out.print(i+" ");method(i-1);}
}

示例2:求n!(n的阶乘)

需求:定义一个方法,完成3的阶乘          3*2*1

分析:假如定义一个方法,代表n的阶乘   ->method(n)   n接收几,就代表几的阶乘

public class Demo03Recursion {public static void main(String[] args) {int method = method(3);System.out.println(method);}public static int  method(int i){if (i==1){return 1;}return i*method(i-1);}
}

示例3:求斐波那契数列

规律:一个数等于前两个数之和,比如 1,1,2,3,5,8,13,21,34,55......

public class Demo04Recursion {public static void main(String[] args) {int result = method(12);System.out.println("result = " + result);}public static int  method(int month){if(month==1||month==2){return 1;} else {return method(month-1)+method(month-2);}}
}

第四章 数组常见算法

1.数组翻转

1.概述:数组对称索引位置上的元素互换

法1:

public class Demo01Arrays {public static void main(String[] args) {int[] arr1 = {1,2,3,4,5,6,7};int[] arr2 = Reverse(arr1);for (int i=0;i<arr1.length;i++){System.out.print(arr1[i]+" ");}System.out.println();for (int i=0;i<arr2.length;i++){System.out.print(arr2[i]+" ");}}public static int[] Reverse(int[] arr){if (arr.length!=0){int[] newarr = new int[arr.length];int min = 0;int max = newarr.length-1;int mid = (min+max)/2;for (int i=0;i<=mid;i++){newarr[min] = arr[max];newarr[max] = arr[min];min++;max--;}return newarr;}else {return arr;}}
}

法2:

public class Demo02Arrays {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};for (int min =0,max=arr.length-1; min<max ;min++,max--){int temp = arr[min];arr[min] = arr[max];arr[max] = temp;}for (int i = 0; i < arr.length; i++) {System.out.print( arr[i]+" ");}}
}

2.冒泡排序

        数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序形式进行排序,数组排序的方法很多,我们讲解的是数组的冒泡排序

        排序,都要进行数组元素的大小比较,在进行位置的交换,冒泡排序是采用数组中相邻元素进行比较换位

法1:

public class Demo03Arrays {public static void main(String[] args) {int[] arr = {2,35,6,8,97,3,57};BobbleSort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}public static int[] BobbleSort(int[] arr) {for (int i=1;i<arr.length;i++){for (int max = arr.length - 1; max > 0; max--) {if (arr[max] < arr[max - 1]) {int temp = arr[max];arr[max] = arr[max - 1];arr[max - 1] = temp;}}}return arr;}
}

法2:

public class Demo04Arrays {public static void main(String[] args) {int[] arr = {2,35,6,8,97,3,57};BobbleSort(arr);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}public static int[] BobbleSort(int[] arr) {for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1-i; j++) {if (arr[j]>arr[j+1]){int temp = arr[j];arr[j] =arr[j+1];arr[j+1] = temp;}}}return arr;}
}

控制台输入一组数,进行冒泡排序,并且打印输出

import java.util.Scanner;public class Demo05Arrays {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入想要排序的数字个数:");int n = sc.nextInt();int[] arr = new int[n];System.out.println("请输入想要排序的"+n+"个数:");for (int i = 0; i < n; i++) {arr[i]=sc.nextInt();}boolean swapped = false;for (int j = 0; j < n-1; j++) {for (int i = 0; i < n-1-j; i++) {if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] =arr[i+1];arr[i+1] =temp;swapped = true;}}if (!swapped){System.out.println("不需要排序");break;}}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}
}

3.二分查找

1.前提:数组中的数据必须是有序的

2.查询思想:

        a.老式查询:遍历数组,一个一个比较,查询效率慢

        b.二分查找:每次找中间索引对应的元素进行比较查询(每次查询少一半数据)

法1:

import java.util.Scanner;public class Demo06Binary {public static void  main(String[] args) {int[] arr = {1,2,3,4,5,6,7};int min = 0;int max = arr.length-1;int mid = (min+max)/2;System.out.println("请输入想要查找的数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();while (min<=max){if (arr[mid]==n){System.out.println("查找成功!,索引是"+mid);break;} else if (arr[mid]<n) {min = mid+1;mid = (min+max)/2;}else {max = mid-1;mid = (min+max)/2;}}if (min>max){System.out.println("查找失败!");}}
}

法2:

import java.util.Scanner;public class Demo07Binary {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};System.out.println("请输入欲查询数字:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int result = Binary(n,arr);if (result!=-1){System.out.println("查询成功!索引是"+result);}else {System.out.println("查询失败!");}}public static int Binary(int n,int[] arr){int min = 0;int max = arr.length-1;int mid = 0;while (min<=max){mid = (min+max)/2;if (arr[mid]<n){min = mid+1;} else if (arr[mid]>n) {max = mid-1;}else {return mid;}}return -1;}
}

第五章 数组操作

1.对象数组:

需求:定义一个长度为3的数组,存储3个Person对象,遍历数组,将3个Person对象中的属性值获取出来

public class Person {private String name;private int age;public Person(){}public Person(String name,int age) {this.name = name;this.age = age;}public void setName(String name){this.name = name;}public String getName(){return name;}public void setAge(int age){this.age = age;}public int getAge(){return age;}
}
public class Demo01ObjectArray {/*定义一个长度为3的数组,存储3个Person对象,遍历数组,将3个Person对象中的属性值获取出来*/public static void main(String[] args) {Person[] arr = new Person[3];Person p1 = new Person("蒋敦豪",29);Person p2 = new Person("鹭卓",29);Person p3 = new Person("李耕耘",28);arr[0] = p1;arr[1] = p2;arr[2] = p3;/*遍历当i等于0时,arr[0]就是p1对象当i等于1时,arr[1]就是p2对象当i等于2时,arr[2]就是p3对象*/for (int i = 0; i < arr.length; i++) {System.out.println(arr[i].getName()+"   "+arr[i].getAge());}}}

练习1:

(1)定义学生类Student

        声明姓名和成绩成员变量

(2)测试类ObjectArrayTest的main中创建一个可以装3个学生对象的数组,并且按照学生成绩排序,显示学生信息

public class Student {private String name;private int score;public Student(){}public Student(String name,int score){this.name = name;this.score = score;}public void setName(String name){this.name = name;}public void setScore(int score){this.score = score;}public String getName(){return name;}public int getScore(){return score;}
}
public class ObjectArrayTest {public static void main(String[] args) {Student[] arr1 = new Student[3];arr1[0] = new Student("卓沅",100);arr1[1] = new Student("赵小童",98);arr1[2] = new Student("何浩楠",99);boolean swapped = false;for (int i = 0; i < arr1.length-1; i++) {for (int j = 0; j < arr1.length-1-i; j++) {if (arr1[j].getScore()<arr1[j+1].getScore()){Student temp = arr1[j];arr1[j] = arr1[j+1];arr1[j+1] = temp;swapped = true;}}if (!swapped){break;}}for (int i = 0; i < arr1.length; i++) {System.out.println(arr1[i].getName()+"..."+arr1[i].getScore());}}
}

第六章 方法参数

1.基本数据类型做方法参数传递

基本数据类型作为实参传递,传递的是值不是变量本身

方法运行,压栈保存

方法运行结束,弹栈   ->释放栈内存

public class Demo01Param {public static void main(String[] args) {int a = 10;int b = 20;/*基本数据类型当做实参传递传递的是值,不是变量本身*/method(a, b);System.out.println(a);//10System.out.println(b);//20}public static void method(int a ,int b){a+=10;b+=20;System.out.println(a);//20System.out.println(b);//40}
}

2.引用数据类型做方法参数传递

引用数据类型作为方法参数传递时,传递的是地址值而不是具体的数据

public class Demo02Param {public static void main(String[] args) {int[] arr = {10,20};method(arr);System.out.println(arr[0]);//20System.out.println(arr[1]);//40}public static void method(int[] arr){arr[0]+=10;arr[1]+=20;System.out.println(arr[0]);//20System.out.println(arr[1]);//40}
}

第七章 命令行参数(了解)

通过命令行给main方法的形参传递的实参称为命令行参数

第八章 其他操作

1.快速生成方法

1.初学者要求先定义在调用;不是初学者就可以先调用在定义方法

        快捷键:Alt+回车

2.快速将一段代码抽取到一个方法中:

        选中要抽取的方法,按 Ctrl + Alt + m

2.debug调试

1.概述:调试代码的一种手段

2.作用:能清楚的看到每个变量在代码执行过程中的变化,还可以找错

3.使用:在想要开始Debug的代码那一行最左边点击一下,出现红色小圆点(断点),右键点击Debug

相关文章:

Java面向对象(详细解释)

第一章 Static关键字 1.static的介绍以及基本使用 1.概述&#xff1a;static是一个静态关键字 2.使用&#xff1a; a.修饰一个成员变量&#xff1a; static 数据类型 变量名 b.修饰一个方法&#xff1a; 修饰符 static 返回值类型 方法名&#xff08;形参&#xff09;{…...

qt ui相关的第三方库插件库

Qt UI相关的第三方库和插件库有很多&#xff0c;能帮助开发者提高开发效率&#xff0c;扩展UI功能&#xff0c;增强可用性和美观度。以下是一些常见的第三方库和插件&#xff1a; 1. QCustomPlot 功能&#xff1a;用于在Qt应用程序中创建交互式的二维绘图。特点&#xff1a;支…...

详解动态规划算法

动态规划 一、动态规划的核心思想二、动态规划的步骤1. 定义状态&#xff08;State&#xff09;2. 确定状态转移方程&#xff08;State Transition Equation&#xff09;3. 确定边界条件&#xff08;Base Case&#xff09;4. 填表&#xff08;Table Filling&#xff09;或递归计…...

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…...

慕慕手记项目日志 项目从开发到部署多环境配置 2025-3-8

慕慕手记项目日志 项目从开发到部署多环境配置 2025-3-8 现在是已经到了课程的第十章了&#xff0c;开始进行配置项目环境了。现在要完成的任务是项目可以正常运行&#xff0c;而且可以自由切换配置&#xff0c;开发/测试。 下面是当前的目录结构图&#xff1a; 现在来解释一…...

华为配置篇-OSPF基础实验

OSPF 一、简述二、常用命令总结三、实验3.1 OSPF单区域3.2 OSPF多区域3.3 OSPF 的邻接关系和 LSA 置底 一、简述 OSPF&#xff08;开放式最短路径优先协议&#xff09; 基本定义 全称&#xff1a;Open Shortest Path First 类型&#xff1a;链路状态路由协议&#xff08;IGP&…...

闭包:JavaScript 中的隐形大杀器

你可能已经在很多地方听说过闭包这个词&#xff0c;尤其是涉及到 JavaScript 的作用域和异步操作时。闭包是 JavaScript 中非常核心的概念&#xff0c;然而它又非常容易让开发者感到困惑。今天我们就来深入剖析闭包&#xff0c;帮助你真正理解它的工作原理&#xff0c;以及如何…...

【消息队列】数据库的数据管理

1. 数据库的选择 对于当前实现消息队列这样的一个中间件来说&#xff0c;具体要使用哪个数据库&#xff0c;是需要稍作考虑的&#xff0c;如果直接使用 MySQL 数据库也是能实现正常的功能&#xff0c;但是 MySQL 也是一个客户端服务器程序&#xff0c;也就意味着如果想在其他服…...

玩转ChatGPT:GPT 深入研究功能

一、写在前面 民间总结&#xff1a; 理科看Claude 3.7 Sonnet 文科看DeepSeek-R1 那么&#xff0c;ChatGPT呢&#xff1f; 看Deep Research&#xff08;深入研究&#xff09;功能。 对于科研狗来说&#xff0c;在这个文章爆炸的时代&#xff0c;如何利用AI准确、高效地收…...

Centos8部署mongodb报错记录

使用mongo ops安装mongodb6.0.4副本集报错 error while loading shared libraries: libnetsnmpmibs.so.35: cannot open shared object file: No such file or directory 解决 yum install net-snmp net-snmp-devel -y建议&#xff1a;初始化系统时把官网上的依赖包都装一遍 即…...

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...

前端面试题 口语化复述解答(从2025.3.8 开始频繁更新中)

背景 看了很多面试题及其答案。但是过于标准化&#xff0c;一般不能直接用于回复面试官&#xff0c;这里我将总结一系列面试题&#xff0c;用于自我复习也乐于分享给大家&#xff0c;欢迎大家提供建议&#xff0c;我必不断完善之。 Javascript ES6 1. var let const 的区别…...

更多文章请查看

更多文章知识请移步至下面链接&#xff0c;期待你的关注 如需查看新文章&#xff0c;请前往&#xff1a; 博主知识库https://www.yuque.com/xinzaigeek...

vulnhub靶场之【digitalworld.local系列】的vengeance靶机

前言 靶机&#xff1a;digitalworld.local-vengeance&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&#xff…...

MySql的安装及数据库的基本操作命令

1.MySQL的安装 1.1进入MySQL官方网站 1.2点击下载 1.3下拉选择MySQL社区版 1.4选择你需要下载的版本及其安装的系统和下载方式 直接安装以及压缩包 建议选择8.4.4LST LST表明此版本为长期支持版 新手建议选择红框勾选的安装方式 1.5 安装包下载完毕之后点击安装 2.数据库…...

中性点直接接地电网接地故障Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.系统仿真图&#xff1a; 3.中性点直接接地电网接地故障基本概念&#xff08;本仿…...

Linux16-数据库、HTML

数据库&#xff1a; 数据存储&#xff1a; 变量、数组、链表-------------》内存 &#xff1a;程序运行结束、掉电数据丢失 文件 &#xff1a; 外存&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; …...

SpireCV荣获Gitee 最有价值开源项目称号

什么是GVP&#xff1f; GVP全称Gitee Valuable Project&#xff0c;意思为Gitee最有价值开源项目。作为GVP称号的获得者&#xff0c;SpireCV在开源社区中展现出了卓越的实力和影响力&#xff0c;为开源软件的发展和推广做出了积极的贡献。 这一荣誉不仅充分肯定了过去阿木实验…...

open-webui+deepseek api实现deepseek自由

虽然deepseek是免费的&#xff0c;但是官网的体验感太差。 所以才会有某种想法&#xff0c;想要更加舒服的使用deepseek。 1.Python虚拟环境 这个我就不多赘述&#xff0c;切记Python版本一定要和open-webui制定的版本一致。 2.deepseek api 去这个网站充点钱&#xff08;…...

Hadoop八股

Hadoop八股 HadoopMapReduce考点MR on Yarn 分布式工作原理shuffle&#xff1a;MapTask 和 ReduceTask的处理流程MR中的MapTask 和 ReduceTask 的数量决定MR和Spark两者Shuffle的区别简单讲一下map- reduce 原理**MapReduce 的核心概念****MapReduce 的工作流程****MapReduce 的…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...