Java面向对象编程--高级

news2024/11/24 12:32:49

目录

一、static关键字

1.1 静态变量

1.2 静态内存解析

1.3 static的应用与练习

二、单例设计模式

2.1 单例模式

2.2 如何实现单例模式

三、代码块

3.1 详解

3.2 练习,测试

四、final关键字

五、抽象类与抽象方法

5.1 abstract

5.2 练习

六、接口

6.1 接口的理解

6.2 接口的多态性

6.3 抽象类和接口对比

6.4 接口的使用练习

6.4.1 练习1

1. 定义接口

2. 实现接口

3. 使用接口

4. 测试支付系统

5.结果

6.4.2 练习2

1. 接口

2. Developer类

3. 父类Vehicle

4. 三个子类   Bicycle  ElectricVhicle Car

5. VehicleTest测试类

6. 结果


一、static关键字

1.1 静态变量

static(静态的):用来修饰的结构、属性、方法;代码块、内部类

对比静态变量与实例变量:

①个数

  • >静态变量:在内存空间中只有一份, 被类的多个对象所共享。
  • >实例变量:类的每一个实例(或对象)都保存着一份实例变量。

②内存位置

  • >静态变量: jdk6及之前:存放在方法区。jdk7及之后: 存放在堆空间
  • >实例变量:存放在堆空间的对象实体中。

③加载时机

  • >静态变量:随着类的加载而加载,由于类只会加载一次, 所以静态变量也只有一份。
  • >实例变量:随着对象的创建而加载。每个对象拥有一份实例变量。

④调用者

  • >静态变量:可以被类直接调用,也可以使用对象调用。
  • >实例变量:只能使用对象进行调用。

⑤判断是否可以调用---> 从生命周期的角度解释

类变量实例变量
yesno
对象yesyes

⑥消亡时机.

  • 静态变量:随着类的卸载而消亡
  • 实例变量:随着对象的消亡而消亡

1.2 静态内存解析

1.3 static的应用与练习

import java.util.Objects;

public class Account {
    private int id;
    private String password;//密码

    private double balance;//金额

    private static double interestRate;//利率

    private static double minBalance = 1.0;

    private static int init = 1001;
    public Account(){
        this.id = init;
        init++;
        password = "000000";
    }

    public Account(String password, double balance) {
        this.password = password;
        this.balance = balance;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public static double getInterestRate() {
        return interestRate;
    }

    public static void setInterestRate(double interestRate) {
        Account.interestRate = interestRate;
    }

    public static double getMinBalance() {
        return minBalance;
    }

    public static void setMinBalance(double minBalance) {
        Account.minBalance = minBalance;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", password='" + password + '\'' +
                ", balance=" + balance +
                '}';
    }
}

public class Test {
    public static void main(String[] args) {
        Account acct1 = new Account();
        System.out.println(acct1);

        Account acct2 = new Account("123456",1155);
        System.out.println(acct2);

        Account.setInterestRate(0.0123);
        Account.setMinBalance(10);

        System.out.println("银行存款的利率:" + Account.getInterestRate());
        System.out.println("银行最小存款: " + Account.getMinBalance());
    }
}

二、单例设计模式

2.1 单例模式

何为单例模式?

  • 采取一定的办法保证在整个软件系统中,堆某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

经典设计模式:共23种

2.2 如何实现单例模式

1.饿汉式:

public class boyFirend {
    private int age;
    private String name;
    //1.私有化构造器
    private boyFirend(){

    }
    //2.创建对象私有化
    private static boyFirend b1 = new boyFirend();
    //3.
    public static boyFirend getG1(){
        return b1;
    }
}

2.懒汉式:

//懒汉式
public class GirlFirend {
    private int age;
    private String name;
    //1.私有化构造器
    private GirlFirend(){

    }
    //2.创建对象私有化
    private static GirlFirend g1 = null;
    //3.
    public static GirlFirend getG1(){
        if (g1 == null) {
            g1 = new GirlFirend();
        }
        return g1;
    }
}

两种模式的对比:

特点:

  • 饿汉式:"立即加载",随着类的加载,当前唯一的实例创建。
  • 懒汉式:"延迟加载",在需要使用时,进行创建

优缺点:

  • 饿汉式:(优点)写法简单,使用更快,线程安全(缺点)内存中占用时间长。
  • 懒汉式:(优点)节省内存空间(缺点)线程不安全

三、代码块

3.1 详解

用来初始化类或对象的信息(即初始化类或对象的成员变量)

代码块修饰:只能使用static进行修饰

代码块分类:

  • 静态代码块;使用static修饰
  • 非静态代码块:不适用static修饰

格式:

{

//内容

}

static{

//内容

}

3.2 练习,测试

class User {
    private String userName;
    private String password;

    private long registrationTime;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public long getRegistrationTime() {
        return registrationTime;
    }

    {
        System.out.println("新用户注册");
        registrationTime = System.currentTimeMillis();
    }
    public User() {
        userName = System.currentTimeMillis() +"";
        password = "123456";

    }

    public User(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    public String getInfo() {
        return
                "用户名='" + userName  +
                ", 密码='" + password  +
                ", 注册时间=" + registrationTime ;
    }
}
public class Test {
    public static void main(String[] args) {
       User u1 = new User();
       System.out.println(u1.getInfo());

       User u2 = new User("张三","654321");
       System.out.println(u2.getInfo());
    }
}

注意:运行上,由父及子,静态先行。记住:执行的先后顺序:默认-显式-代码块-构造器-对象

小测试:(请给出运行结果)

public class Test {
    public static void main(String[] args) {
        Sub s = new Sub();
    }
}

class Base{
    Base(){
        method(100);
    }

    {
        System.out.println("base");
    }

    public void method(int i){
        System.out.println("base :" + i);
    }
}

class Sub extends Base{
    Sub(){
        super.method(70);
    }

    {
        System.out.println("Sub");
    }

    public void method(int j){
        System.out.println("sub :" + j);
    }
}

答案:

四、final关键字

final关键字: 修饰符,用于限制类、方法和变量的行为。

可在哪些位置赋值:

  • 显示
  • 代码块中
  • 构造器中

final作用:

修饰类:表此类不能被继承

final class FinalClass {
    void display() {
        System.out.println("This is a final class.");
    }
}

// class SubClass extends FinalClass { // 这行代码会导致编译错误
// }

修饰方法:此方法不能被重写

class Parent {
    final void show() {
        System.out.println("This is a final method.");
    }
}

class Child extends Parent {
    // void show() { // 这行代码会导致编译错误
    //     System.out.println("Trying to override a final method.");
    // }
}

修饰变量:成员和局部变量都可修饰,此时“变量”其实变成了“常量”,不可更改。

final int x = 10;
// x = 20; // 这行代码会导致编译错误

final StringBuilder a1 = new StringBuilder("Hello");
// a1 = new StringBuilder("World"); // 这行代码会导致编译错误
a1.append(", World!"); // 这行是允许的,因为a1引用的对象内容是可以改变的

final搭配static使用:等于全局常量

class Constants {
    static final int MAX_USERS = 100;
    static final String APP_NAME = "MyApp";
}

习题练习:

报错:++x导致x的值改变

五、抽象类与抽象方法

5.1 abstract

abstract:抽象的

abstract修饰类:

  • 此类为抽象类。
  • 抽象类不能实例化。
  • 抽象类中包含构造器,因为子类实例化,直接或间接调用父类的构造器。
  • 抽象类可无抽象方法,有抽象方法一定为抽象类。

abstract修饰方法

  • 此方法为抽象方法。
  • 抽象方法只有方法声明,没有方法体。
  • 抽象方法的功能确定,不知具体实现。
  • 抽象方法必须重写父类中的所有抽象方法,才能实例化,否则,此子类还是抽象类。

abstract不能使用的场景:属性,构造器,代码块

5.2 练习

场景:编写工资系统,不同类型的员工(多态)按月发工资,如果某个月是某个employee对象的生日,则当月的工资增加100

代码:

//Employee类
public abstract class Employee {
    private String name;
    private int number;
    private MyDate birthday;

    public Employee() {
    }

    public Employee(String name, int number, MyDate birthday) {
        this.name = name;
        this.number = number;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

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

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public MyDate getBirthday() {
        return birthday;
    }

    public void setBirthday(MyDate birthday) {
        this.birthday = birthday;
    }

    public abstract double earnings();

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", number=" + number +
                ", birthday='" + birthday.toDateString() + '\'' +
                '}';
    }
}

//HourEmployee类
public class HourEmployee extends Employee{
    private double wage;
    private int hour;

    public HourEmployee() {
    }

    public HourEmployee(String name, int number, MyDate birthday, double wage, int hour) {
        super(name, number, birthday);
        this.wage = wage;
        this.hour = hour;
    }

    public double getWage() {
        return wage;
    }

    public void setWage(double wage) {
        this.wage = wage;
    }

    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    @Override
    public double earnings() {
        return wage * hour;
    }

    @Override
    public String toString() {
        return "HourEmployee{" +
                super.toString() +
                '}';
    }
}

//MyDate类
public class MyDate {
    private int year;
    private int month;
    private int day;

    public MyDate() {
    }

    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }
    public String toDateString(){
        return year + "年" + month + "月" + day +"日";
    }
}

//PayrollSystem类
import java.util.Scanner;

public class PayrollSystem {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        Employee[] emps = new Employee[2];
        emps[0] = new SalariedEmployee("张胜男", 1001,
                new MyDate(1992, 12, 30), 2000);
        emps[1] = new HourEmployee("李四", 1002,
                new MyDate(1992, 10, 10),15 ,240);

        System.out.println("请输入当前的月份: ");
        int month = scan.nextInt();

        for (int i = 0; i < emps.length; i++) {
            System.out.println(emps[i].toString());

            if (month == emps[i].getBirthday().getMonth()){
                double a = 100.0;
                double b =emps[i].earnings() + a;
                System.out.println("工资为:"+ b);
                System.out.println("生日快乐,加薪100");
            }else{
                System.out.println("工资为:"+emps[i].earnings());
            }
            scan.close();
        }
    }
}

//SalariedEmployee类
public class SalariedEmployee extends Employee{
    private double monthlySalary;

    public SalariedEmployee() {
    }

    @Override
    public  double earnings(){
        return monthlySalary;
    }

    public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {
        super(name, number, birthday);
        this.monthlySalary = monthlySalary;
    }

    public double getMonthlySalary() {
        return monthlySalary;
    }

    public void setMonthlySalary(double monthlySalary) {
        this.monthlySalary = monthlySalary;
    }

    @Override
    public String toString() {
        return "SalariedEmployee{" +
                super.toString() +
                '}';
    }
}

六、接口

6.1 接口的理解

1. 接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

2.定义接口的关键字: interface

3.接口内部结构的说明:

可以声明:

  • 属性:必须使用public static final修饰
  • 方法: jdk8之前:声明抽象方法,修饰为public abstractjdk8 :声明静态方法、默认方法
  • jdk9 :声明私有方法

不可以声明:构造器

4.接口与类的关系:实现关系

5.格式:

  • class A extends SuperA implements B C{}
  • A相较于SuperA来讲,叫做子类A相较于B, C来讲,叫做实现类。

6.满足此关系之后,说明:

  • 类可以实现多个接口。
  • 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。
  • 类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。

7.接口与接口的关系:继承关系,且可以多继承

6.2 接口的多态性

接口名  变量名  = new   实现类对象;

以下为举例:Computer是类,transferData()方法,USB是接口,printer打印机

  • 创建接口实现类的对象

Computer computer = new Computer();

Printer printer = new printer();

  • 创建接口实现类的匿名对象

computer.transferData (new Computer);

  • 创建接口匿名实现类的对象

USB usb1 = new USB(){

     //重写接口中方法

}

computer.transferData (usb1);

  • 创建接口匿名实现类的匿名对象

computer.transferData (new USB(){

     //重写接口中方法

});

6.3 抽象类和接口对比

6.4 接口的使用练习

6.4.1 练习1

假设要创建一个,不同的支付方式(如信用卡、支付宝)需要实现相同的接口。

1. 定义接口

定义一个支付接口 Payment,包括方法 pay()refund()

public interface Payment {
    void pay(double amount);
    void refund(double amount);
}
2. 实现接口

实现 CreditCardPaymentAliPay 两种支付方式。

public class CreditCardPayment implements Payment {
    @Override
    public void pay(double amount) {
        System.out.println("使用信用卡支付 " + amount + "元");
    }

    @Override
    public void refund(double amount) {
        System.out.println("退款到信用卡" + amount + "元");
    }
}

public class AliPay implements Payment {
    @Override
    public void pay(double amount) {
        System.out.println("使用支付宝支付 " + amount + "元");
    }

    @Override
    public void refund(double amount) {
        System.out.println("退款到支付宝 " + amount + "元");
    }
}
3. 使用接口

创建一个简单的支付处理类,使用接口来处理支付逻辑。

public class PaymentProcessor {
    private Payment payment;

    public PaymentProcessor(Payment payment) {
        this.payment = payment;
    }

    public void processPayment(double amount) {
        payment.pay(amount);
    }

    public void processRefund(double amount) {
        payment.refund(amount);
    }
}
4. 测试支付系统

在主程序中,创建不同的支付方式并测试。

public class Main {
    public static void main(String[] args) {
        // 使用信用卡支付
        Payment creditCardPayment = new CreditCardPayment();
        PaymentProcessor creditCardProcessor = new PaymentProcessor(creditCardPayment);
        creditCardProcessor.processPayment(100.0);
        creditCardProcessor.processRefund(50.0);

        // 使用支付宝支付
        Payment aliPayPayment = new AliPay();
        PaymentProcessor aliPayProcessor = new PaymentProcessor(aliPayPayment);
        aliPayProcessor.processPayment(200.0);
        aliPayProcessor.processRefund(80.0);
    }
}
5.结果

6.4.2 练习2

模拟场景:

UML类图:(UML类图讲解可跳转: ​​​​​​构造器和UML类图_类图中怎么创建加号-CSDN博客)

代码实现:

1. 接口
interface IPower {
    public void power();
}
2. Developer类
package test2;

public class Developer {
    private int age;
    public  String name;

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public void takingVehicle(Vehicle vehicle){
        vehicle.run();
    }
}
3. 父类Vehicle
package test2;

public abstract class Vehicle {
    private String brand;
    private String color;

    public Vehicle() {
    }

    public Vehicle(String brand, String color) {
        this.brand = brand;
        this.color = color;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public abstract void run();
}
4. 三个子类   

Bicycle-ElectricVhicle-Car

package test2;

public class Car extends Vehicle implements IPower{
    private String carName;

    public Car() {
    }

    public Car(String brand, String color, String carName) {
        super(brand, color);
        this.carName = carName;
    }

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    @Override
    public void run() {
        System.out.println("汽车靠内燃机驱动");
    }

    @Override
    public void power() {
        System.out.println("动力来自汽油");
    }
}

package test2;

public class ElectricVhicle extends Vehicle implements IPower{
    public ElectricVhicle() {
    }

    public ElectricVhicle(String brand, String color) {
        super(brand, color);
    }

    @Override
    public void run() {
        System.out.println("电动车电机驱动");
    }

    @Override
    public void power() {
        System.out.println("动力来自电力");
    }
}

package test2;

public class Bicycle extends Vehicle{
    public Bicycle() {
    }

    public Bicycle(String brand, String color) {
        super(brand, color);
    }

    @Override
    public void run() {
        System.out.println("靠脚蹬骑自行车");
    }
}

5. VehicleTest测试类
package test2;

public class VehicleTest {
    public static void main(String[] args) {
        Developer developer = new Developer();

        Vehicle[] vehicles = new Vehicle[3];

        vehicles[0] = new Bicycle("凤凰牌","黄色");
        vehicles[1] = new ElectricVhicle("理想","蓝色");
        vehicles[2] = new Car("奔驰","黑色","京A88888");

        for (int i = 0; i < vehicles.length; i++) {
            developer.takingVehicle(vehicles[i]);
            if (vehicles[i] instanceof IPower) {
                ((IPower) vehicles[i]).power();
            }
            System.out.println();
        }
    }
}
6. 结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于机器视觉的水果品质检测研究进展

摘 要&#xff1a;水果品质检测关系到水果的包装运输贮藏和销售的效果和收益。传统的外观品质检测主要是利用分级机械&#xff0c;其存在很多不足之处&#xff0c;因此提出了利用机器视觉进行无损检测的技术。利用机器视觉技术主要是检测水果的大小、形状、颜色和表面缺陷四个…

106. 从中序与后序遍历序列构造二叉树【 力扣(LeetCode) 】

文章目录 零、LeetCode 原题一、题目描述二、测试用例三、解题思路四、参考代码 零、LeetCode 原题 106. 从中序与后序遍历序列构造二叉树 一、题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵…

Static修饰不同对象

目录 Static修饰局部变量 Static修饰全局变量 Static修饰函数 Static修饰成员 Static修饰成员变量 Static修饰成员函数 Static修饰成员的特性&#xff1a; 静态成员变量和静态成员函数的使用案例&#xff1a; 案例1&#xff1a;求1 2 3...n 案例2&#xff1a;单例模…

【学术会议投稿链接】React前端框架:构建现代Web应用的强大工具

【即将截稿】第五届经济管理与大数据应用国际学术会议&#xff08;ICEMBDA 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 一、React简介 二、React的核心概念 1. 组件化 2. 虚拟DOM&#xff08;Virtua…

LOID:有效提升遮挡条件下的车道检测精度

1.论文信息 论文标题&#xff1a;LOID: Lane Occlusion Inpainting and Detection for Enhanced Autonomous Driving Systems 作者&#xff1a;Aayush Agrawal, Ashmitha Jaysi Sivakumar, Ibrahim Kaif∗, Chayan Banerjee† 作者单位&#xff1a;印度马德拉斯印度理工学院&…

数学建模算法与应用 第12章 现代优化算法

目录 12.1 粒子群优化算法 Matlab代码示例&#xff1a;粒子群优化算法求解函数最小值 12.2 遗传算法 Matlab代码示例&#xff1a;遗传算法求解函数最小值 12.3 蚁群算法 Matlab代码示例&#xff1a;蚁群算法求解旅行商问题 12.4 Matlab 遗传算法工具 使用遗传算法工具箱…

java的LinkedList

java的LinkedList 什么是LinkedListLinkedList的模拟实现LinkedList的使用ArrayList和LinkedList的区别 什么是LinkedList LinkedList的官方文档 LinkedList的底层是双向链表结构&#xff0c;由于链表没有将元素存储在连续的空间中&#xff0c;元素存储在单独的结点中&#xf…

一维数组的引用

#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然&#xff0c;可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值&#xff1a;",i1); scanf_s(&…

【机器学习】逻辑回归|分类问题评估|混淆矩阵|ROC曲线|AUC指标 介绍及案例代码实现

文章目录 逻辑回归逻辑回归简介逻辑回归的数学基础逻辑回归原理概念损失函数 逻辑回归API函数和案例案例癌症分类预测 分类问题评估混淆矩阵分类评估方法 - 精确率 召回率 F1ROC曲线 AUC指标案例AUC 计算的API分类评估报告api 电信客户流失预测案例 逻辑回归 逻辑回归简介 ​…

python爬虫 - 进阶正则表达式

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 &#xff08;一&#xff09;匹配单个中文字符 &#xff08;二…

【网易云音乐】--源代码分享

最近写了一个网易云音乐的音乐实现部分&#xff0c;是通过JavaScript和jQuery实现的&#xff0c;具体效果大家可以参照下面的视频 源代码分享 - git地址: 网易云音乐源代码 下面将着重讲解一下音乐实现部分 视频有点模糊&#xff0c;不好意思&#xff0c;在b站上添加视频的时候…

【Oracle DB故障分享】分享一次由于SGA设置太小导致的DP备份失败

List item 今天给客户做Oracle例行数据库健康巡检&#xff0c;过程中检出一些备份异常&#xff0c;分享如下。 排查问题&#xff1a; 打开DP备份软件&#xff0c;随即弹出如下提示&#xff1a; 登录DP&#xff0c;查看备份情况&#xff1a;发现从10/6开始&#xff0c;DP备份…

ESP32—C3实现DS18B20(温度传感器)检测温度(Arduino IED )

1源代码&#xff08;DS18B20&#xff09; #include <OneWire.h> // 引入OneWire库&#xff0c;用于与单总线设备通信 #include <DallasTemperature.h> // 引入DallasTemperature库&#xff0c;用于读取DS18B20温度传感器数据// 定义连接到DS18B20数据引脚的GPIO编…

Vue入门-指令修饰符-@keyup.enter

指令修饰符&#xff1a; 通过"."指明一些指令后缀&#xff0c;不同后缀封装了不同的处理操作 ->简化代码 ①按键修饰符 keyup.enter ->键盘回车监听 ".enter"if(e.keyenter){} //".enter"用来简化代码 demo&#xff1a; <!DOCTYPE…

Ubuntu系统可以使用WIFI上网,而插网线有线网不能上网,网卡驱动未安装问题解决

文章目录 问题分析解决结果 问题 linux ubuntn系统下可以正常连WiFi上网&#xff0c;但是不能插网线上网。 分析 首先要排除是否为硬件问题&#xff0c;我在windows下是可以正常使用网线的&#xff0c;所以排除硬件的问题。 查看网卡是否被检测(wifi有说明网卡是有检测的) …

有了WPF后Winform还有活路吗?

近年来&#xff0c;随着技术的不断发展&#xff0c;Windows Presentation Foundation&#xff08;WPF&#xff09;和Windows Forms&#xff08;WinForms&#xff09;这两种技术在开发桌面应用程序方面一直备受关注。虽然WPF以其强大的功能和灵活性吸引了众多开发者&#xff0c;…

【iOS】YYModel的初步学习

YYModel的初步学习 文章目录 YYModel的初步学习前言与JSONModel对比YYModel的优势如何使用YYModel最简单的Model形式容器类属性白名单和黑名单Model的嵌套 小结 前言 随着时代的发展&#xff0c;iOS解析JSON数据的第三方库越来越多&#xff0c;原先的JSONModel的性能上的问题逐…

【动手学深度学习】6.4 多输入多输出通道

彩色图像具有标准的RBG通道来代表红绿蓝&#xff0c;但是到目前位置我们仅展示了单个输入和单个通道的简化例子。这使得我们可以将输入&#xff0c;卷积核和输出看作二维张量而当我们添加通道时&#xff0c;输入和隐藏表示都变成了三维张量。例如每个RGB输入图像都具有 3 h …

工具篇-完整的 Git 项目管理工具教程(在命令框中使用 Git、在 IDEA 中使用 Git)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Git 概述 2.0 Git 的安装和配置 3.0 获取本地仓库 3.1 基础操作指令 3.2 分支 4.0 Git 远程仓库 4.1 创建远程仓库 4.2 配置 SSH 公钥 4.3 操作远程仓库 5.0 使用…

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

第二十四届 GOPS 全球运维大会暨研运数智化技术峰会上海站将于2024年10月18日-19日在上海中庚聚龙酒店召开。大会将为期2天&#xff0c;侧重大模型、DevOps、SRE、AIOps、BizDevOps、云原生及安全等热门技术领域。特设了如大模型 运维/研发测试、银行/证券数字化转型、平台工程…