Java复习

填空题

课程推荐的 jdk 下载网址为 jdk.java.net

使用命令行编译程序:javac -d bin stc*.java

使用命令行运行程序: java -cp bin 类名

java 语言标识符:字母、数字、下划线和美元符号,数字不能做首字母

java 语言中标识符区分大小写

java 语言中基本类型:byte boolean char short int long float double

java 语言中数据类型分为基本数据类型引用类型

Java语言中基本数据类中的数值类型都是有符号的

java 语言声明常量时应使用的关键字是 final

String str = “ ”+ 23 //在23前面添加语句把23转换成String类型

int x = Integer.valueOf (“23”); int y = x + 1; //添加语句将字符串“23”转换为整型

int[] x 中变量 x 属于引用类型数据

封装


绝大多数情况下,interface 只有借助具体的 class 实现它的功能。

java 语言中核心的概念是 class ,不能在 class 的“{”和“}”之外定义变量和函数。

顶层语法元素是指在源文件中可以直接定义的程序语言语法元素。

其他的如变量、方法只能定义在顶层语法元素之内。

class 把一组相关的数据和操作封装在其中,而 package 将一组相关的 class (和 interface、enum、record)封装在其中。

class中的内容


  • 成员

    • 成员变量:表示对象的属性
    • 成员方法:表示对象的行为
    • (其他的内部顶层语法元素)
  • 非成员

    • 构造方法

实例成员和类成员


实例成员必须创建所属类的对象,只能通过对象的变量利用 “.”操作符加上成员名称来访问。

成员定义时添加 static 关键字,称为类成员。

类成员不需要创建对象,可以直接通过可以直接通过类名称“.”操作符加类成员来访问。

类方法只能访问类成员,不能在方法的代码中使用实例成员。

可以在 class 中定义其他的 class。(称为内部类或者接口)

非成员(构造方法)


构造方法不属于类的成员。

构造方法没有返回值,名称与类名相同。

构造方法在使用 new 关键字创建对象时使用,返回对象的引用。

如果构造方法被重载,则根据传递的实参的类型和数量确定实际执行时调用的构造方法。

构造方法重载是指在同一个类中定义了多个构造方法,它们的方法名相同但参数列表不同

只有在源代码中没有定义构造方法的情况下,编译器才会创建一个无参数的构造方法,这个无参构造方法称为默认构造方法(无参构造方法不一定是默认构造方法)

构造方法也和成员方法一样,可以被重载。

可以在定义构造方法时,使用 this 关键字调用其他重载的构造方法,必须是方法体中第一句。

this关键字表示对象自身,通常用在方法形参与成员变量同名时,也可以在其他为了区分二者的情况下使用。

this 关键字不能用于 static 方法内


包将一组相关的 class 、interface组织在一起,主要起到区分命名空间的作用,不同的包中可以各自定义自己类,即使相同的类名称,也不会造成命名冲突。

包名由一个或多个子包名用“.”连接起来组成,每个子包名必须符合 Java 语言的标识符命名规则

标识符由字母、数字、下划线(_)和美元符号($)组成。,第一个字符不能是数字。

包名一般使用小写字母,且采用逆域名命名规则。

如果要将源文件中的所有类都添加到某个包中,必须在源文件中添加 package语句,例如 package pack.age.name

包声明语句必须是源文件中第一行非注释语句。

没有包声明语句的源文件,其中的类属于默认包。

如果要使用包中的若干类,则必须在源文件中添加 import 语句:

  1. 导入包中的所有类:import pack.age.name.*;
  2. 导入包中的某个类:import pack.age.name.ClassName;
  3. 导入包中某个类的类成员:import static Math.PI;

主类


一个类成为主类必须同时具备两个条件:

  • 具有 public static void main(String[] args)方法
  • 在使用 java 命令执行时作为命令行参数指定该类。

一个类如果位于某个包中,则它的完整类名 = 包名+类名,如:xsyu.java2023.demo.Hello

运行时必须指定主类的完整名称

一个 class 定义必备的三个条件是:class 关键字、类名、{}

Java 源文件的名称必须和其中的 public 类的名称相同。

对于一个属于非默认包的类,它编译后的 class 文件必须保存在和包名对应的目录结构下。

开发过程的改变


假设 Hello.java 保存在 当前目录的 src 子目录下,编译命令为:javac -d bin src\*.java

这条命令把位于当前目录的 src 子目录中所有 java 源文件都编译成 .class 文件,保存在当前目录的 bin 目录下,可以看到 bin 目录下自动根据包名建立好了嵌套好的文件夹结构,Hello.class 保存在最底层的 demo 目录下。

要运行上面编译好的 Hello.class 程序,运行命令为java -cp bin xsyu.java2023.demo.Hello

interface


interface 中通常只定义两类内容:

  • 常量,但 public static final通常省略
  • 抽象方法,但 public abstract 通常省略

实现接口

class ClassName implements[interface列表]{//······
}

一个 class 可以实现多个 interface

所谓实现(implements)就是把 interface 中定义的抽象方法具体化,定义出这些方法的具体代码

如果一个类只实现了部分 interface 中定义的抽象方法具体化,则该类必须被定义为 abstrac class .未实现的方法无需在 abstrac class 中再声明。

一个非抽象类必须实现 implemnts 列表中的所有接口的所有方法。

可以声明 interface 类型的变量,把实现了同一 interface 的 class 对象赋值给对应 interface 类型的变量。但不可以用 new 关键字创建 interface 类型的变量,因为其中有未明确定义的抽象方法。

interface MyInterface {void myMethod();
}class MyClass implements MyInterface {public void myMethod() {System.out.println("Implementation of myMethod");}
}public class Main {public static void main(String[] args) {// 声明接口类型的变量MyInterface myObject;// 将实现了相同接口的类对象赋值给变量myObject = new MyClass();// 调用接口方法myObject.myMethod();  // 输出:Implementation of myMethod}
}

abstract class


抽象方法:abstract Type method([参数列表]); 添加了 abstract 关键字装饰,但没有定义方法体的方法。

抽象类中可以包含 abstract 方法 ,也可以不包含 abstract 方法。

如果一个 class 中定义了 abstract 方法,则这个 class 必须被定义为 abstract class

抽象类中可以定义构造方法

和 interface 一样,可以声明某个 abstract class 类型的变量,把某个继承了这个 abstract class 的具体类对象赋值给对应 abstract class 类型的变量。但不可以使用 new 关键字创建 abstract class 类型的变量

访问控制关键字


public: 所有代码都可以访问

protected: 除同一个 package 中的其他类可以访问外,即使属于不同包的子类也可以访问。

默认(无修饰符): 默认只有同一个 package 中的其他类可以访问

private: 只有类自身的成员方法和构造方法可以访问

通常情况下,成员变量都定义为 private ,然后根据需要定义读取或者修改成员变量的方法。

成员方法也只在明确需要外界访问时,定义成 public 等相对宽松的访问范围

继承


class ClassName extends SuperClass{//
}interface InterfaceName extends /*[interface列表]*/{//
}

在 java 语言中,class 是单继承,extends 关键字后只能有一个类名,即只能有一个直接父类;interface 是单继承,extends 关键字后可以有多个 interface 名称。

如果一个类定义时没有使用 extends 关键字,则它的超类是 Object 类

Object类是Java中所有类的根类,它定义了一些通用的方法,如toString()equals()hashCode()等。因此,所有的Java类都最终是Object类的子类,直接或间接地。

子类的代码中,可以直接访问所有符合访问控制规则的超类中的成员。

子类的构造方法总会调用超类的构造方法。如果在子类的构造方法中,没有调用超类构造方法的语句,则编译器会插入调用超类无参构造方法的语句

子类中明确调用超类构造方法时,使用 super 关键字。

需要时,子类中可以使用 super 关键字访问超类的成员变量或者成员方法。

可以把子类对象赋值给超类类型的变量。(向上转型)

可以使用子类类型的变量访问超类中符合访问规则的成员

如果把子类对象赋值给超类类型变量,则不能使用超类类型变量访问只在子类中定义的成员’

不属于和超类同一包中的类,无法通过子类变量来访问 protected 成员。

  1. 在同一包中的类:
    • 类可以访问同一包中其他类的 protected 成员。
  2. 不同包中的子类:
    • 子类可以访问其父类中声明为 protected 的成员。
  3. 不同包中的非子类:
    • 非子类的类无法直接访问其它包中类的 protected 成员。

final class ClassName {…},则该类不能被继承

多态


  • 重载:同一个类中多个方法具有相同的方法名,参数列表不同

  • 覆盖:指子类中重新定义超类中已有的一个或者多个方法/以及实现接口中的方法。

    • 覆盖是,子类中覆盖的方法只能扩大访问范围,不能限制的更小。所以实现接口的方法只能定义为 public
    • 如果在某个类的方法前添加final关键字,则该方法不能被覆盖。
  • 隐藏:子类中定义了与超类中同名的成员变量,默认情况下,这个变量名指代子类的成员变量,称该超类变量被隐藏。

覆盖所产生的多态效应,特别的是指在变量为某超类类型,而实际对象为其子类对象时,调用被覆盖方法,执行实际对应子类对象方法。

object 类


Object 类是所有类的超类,因为所有类都是直接或间接继承自它。

Object 类中重点关注的方法:

  • equals: 默认判单是否同一对象(比较内存地址),String中覆盖了它,判断字符串的内容。
  • toString: 在对象变量被自动转换为字符串的情况下(例如:“”+obj),返回对象的字符串表示。默认是一个与对象地址相关的数字/字符串。可以覆盖成有意义的字符串表示。

Java I/O(输入/输出)

控制台

输出:

System.out.println//打印输出并换行
System.out.printf//格式化输出
System.out.print//打印输出不换行

输入:

Scanner input = new Scanner(System.in);
//intput.nextXXX
String userInput = input.nextLine(); // 读取用户输入的一行字符串
int userNumber = input.nextInt();    // 读取用户输入的整数
input.close()

Files

//Path path = Path.of(<filepath>);
String content = "Hello,wotld!";
//Files.writeString(path,content);
//Files.writeString(path,content,StandardOpenOption.APPEND);
//Files.writeString(path,content,Charset.forName("UTF-8"),StandardOpenOption.APPEND);

PrintWriter

PrintWriter out = new PrintWriter("filename.txt","UTF-8");//Charset.forName("UTF-8")
//out.println
//out.printf
//out.print
//write,write(String s)
out.close();

异常

异常:在程序运行中发生的,导致程序不能正常执行的事件对象 Error 类和Exception类都继承自Throwable类,RuntimeException类是Exception类的子类

三种异常

  1. Error 一般无法恢复:比如磁盘环,导致无法读取文件
  2. RuntimeException:一般是逻辑错误,可以避免,如数组越界
  3. Exception 子类中除RuntimeException中的类:checked异常,一般可恢复,比如文件名不正确导致FileNotFoundException

抛出异常的关键字:throw ExceptionObj

异常处理原则:捕获或者声明

对于编译时检查,必须编写应对可能抛出的异常。有两种方式:

  1. 捕获异常,并根据具体情况,在 catch 块中写明出现异常时执行的代码。
  2. 在方法声明的(参数列表)后中使用 throws 关键字声明异常,交由上层调用者处理异常。(因为底层被调用方法对高层应用的相关信息了解较少,由上层的方法处理更合适,这个层次可能是多层)需要掌握的主要是相关的关键字以及语法句式。

第一种捕获异常的句式(try-catch-[finally]):

try{............
}catch(ExceptionType1 ex){.............
}catch((ExceptionType2 ex){..............
}catch((ExceptionTypeN ex){.........
}catch(Exception1|Exception2|ExceptionN ex){........
}
//[如果有类似文件等资源需要释放,添加finally子句
finally{//finally块中的代码无论是否发生异常,都会执行。//资源释放代码
}

第二种捕获异常句式(try-with-resources)

//try-with-resources  句式中,try()之间可以创建多个I/O对象(比如,有时同时需要读、写文件),中间用“;”
try(StreamType1 objRef1 = new StreamType1(...);StreamType2 objRef2 = new StreamType2(....)){}catch(ExceptionType1 ex){.............
}catch((ExceptionType2 ex){..............
}catch((ExceptionTypeN ex){.........
}catch(Exception1|Exception2|ExceptionN ex){........
}//[如果有其他非I/O流资源需要释放,添加finally子句
finally{//finally块中的代码无论是否发生异常,都会执行。//资源释放代码
}

可以通过继承 Exception 类创建自定义异常,使用 throw 关键字抛出

catch 语句是按照编码顺序进行匹配,所以,多个catch子句包含子类和父类异常时,子类catch语句应在前

finally子句总是被执行,所以应在finally子句中释放资源

try块中定义的变量在catch子句中无法访问

子类覆盖方法时,不能添加异常

如果自定义的方法中,有代码可能抛出 checked 异常,如果没有使用 try-catch 语句捕获,方法定义时必须使用 throws 关键字声明这些 checked 异常 vod method() throws exception1,exception2(...)

调用可能抛出异常的方法可以捕获,或者再次声明throws

线程和进程

进程:内存等计算资源分配单位(文件句柄)

线程:CPU 调度单位

并发: 并发是指多个任务在一段时间内同时执行,可能是交替执行,但在宏观上看起来是同时的。在并发模型中,多个任务可以在同一个时间段内启动、执行和完成。

并行:并行是指多个任务在同一时刻同时执行。在并行计算中,多个处理器或核心可以同时执行多个任务,提高计算速度。

并行是并发的一种特例

创建线程的两种基本方法

1. 继承 Thread 类

class Task extends Thread{public void run(){//}
}
Thread taskRef = new Task();
taskRef.start();

2. 实现 Runnable 接口

class Task implements Runnable{public void run(){//}
}Thread taskRef = new Thread(new Task());
taskRef.start();

编程题

Hello World

public class HelloWorld{public static void main(String[] args){system.out.println("Hello world!");}
}

编写Swing程序,显示一个空白窗口

import javax.swing.*;public class EmptyWindow extends JFrame{public EmptyWindow(){setSize(1024,768);//设置窗口大小setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String[] args){SwingUtilies.invokeLater(()->{JFrame frame = new EmptyWindow();frame.setVisible(true);//显示窗口});}
}

import javax.swing.*;public class AddComponentDemo extends JFrame{public AddComponentDemo(){setSize(800,600);//设置窗口大小//确保点击窗口关闭按钮时,程序能正常退出setDefaultCloseOperation(EXIT_ON_CLOSE);initComponents();}private void initComponents(){inputField = new JTextField();    //创建输入框//输入框左上角坐标(500,500),宽度180,高度25inputField.setBounds(500,500,180,25);bt = new Jbutton("按钮")//创建按钮//按钮左上角坐标(700,500),宽度60,高度25bt.setBounds(700,500,60,25);setLayout(null);   //为了使得 setBound 能够正常工作,需要设置布局管理器为 nulladd(bt);           //添加按钮组件add(inputField);   //添加文本输入框组件}public static void main(String[] args){SwingUtilities.invokeLater(()->{JFrame frame = new AddComponentDemo();frame.setVisible(true);//显示窗口})}private JButton bt;private JTextField inputField;
}
import javax.swing.*;public class AddComponentDemo extends JFrame {private JButton bt;private JTextField inputField;public AddComponentDemo() {setSize(800, 600);  // 设置窗口大小setDefaultCloseOperation(EXIT_ON_CLOSE); // 设置点击窗口关闭按钮时程序能正常退出initComponents(); // 初始化组件}private void initComponents() {inputField = new JTextField();    // 创建文本输入框// 设置输入框左上角坐标(500,500),宽度180,高度25inputField.setBounds(500, 500, 180, 25);bt = new JButton("按钮"); // 创建按钮// 设置按钮左上角坐标(700,500),宽度60,高度25bt.setBounds(700, 500, 60, 25);setLayout(null);   // 为了使得 setBounds 能够正常工作,需要设置布局管理器为 nulladd(bt);           // 添加按钮组件add(inputField);   // 添加文本输入框组件}public static void main(String[] args) {SwingUtilities.invokeLater(() -> {JFrame frame = new AddComponentDemo();frame.setVisible(true); // 显示窗口});}
}
  1. AddComponentDemo 类: 继承自 JFrame 类,表示一个窗口。

  2. initComponents 方法: 初始化窗口中的组件,包括文本输入框和按钮。通过 setBounds 方法设置组件的位置和大小,通过 setLayout(null) 禁用布局管理器,使得 setBounds 能够正常工作。

  3. main 方法: 使用 SwingUtilities.invokeLater 来确保窗口在事件分派线程上创建,避免多线程问题。创建 AddComponentDemo 的实例并显示窗口。
    // 添加按钮组件
    add(inputField); // 添加文本输入框组件
    }

    public static void main(String[] args) {
    SwingUtilities.invokeLater(
    () -> {
    JFrame frame = new AddComponentDemo();
    frame.setVisible(true); // 显示窗口
    }
    );
    }
    }


1. **`AddComponentDemo` 类:** 继承自 `JFrame` 类,表示一个窗口。
2. **`initComponents` 方法:** 初始化窗口中的组件,包括文本输入框和按钮。通过 `setBounds` 方法设置组件的位置和大小,通过 `setLayout(null)` 禁用布局管理器,使得 `setBounds` 能够正常工作。
3. **`main` 方法:** 使用 `SwingUtilities.invokeLater` 来确保窗口在事件分派线程上创建,避免多线程问题。创建 `AddComponentDemo` 的实例并显示窗口。
4. **`bt` 和 `inputField`:** 分别表示按钮和文本输入框的实例变量,可以在类的其他方法中使用。

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

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

相关文章

【QT实战】使用QT5制作一个简易串口助手详细教程,支持打包转发

文章目录 制作串口助手工程所涉及到的头文件ui布局制作串口配置选项添加修饰制作串口打印信息界面添加背景图片 函数查找串口并且添加到ui界面上显示串口数据接收槽函数串口发送槽函数打开串口槽函数 将串口助手封装成可执行文件 本项目的开发环境&#xff1a;windowsQT5qtcrea…

从vue小白到高手,从一个内容管理网站开始实战开发第八天,登录功能后台功能设计--业务逻辑层基础接口和基础服务实现

上一篇我们介绍了项目后续要使用到的工具类,关于工具类的创建可以查看 从vue小白到高手,从一个内容管理网站开始实战开发第七天,登录功能后台功能设计--通用分页、枚举以及相关工具类-CSDN博客文章浏览阅读2次。本次内容主要介绍了项目后续用到的部分工具类,这些工具类,在…

ES索引原理

ES在检索时底层使用的就是倒排索引&#xff0c;正向索引是通过key找value&#xff0c;反向索引则是通过value找key。 索引会分为两个区域&#xff1a;索引区和元数据区。数据是这样存储在里面的&#xff1a; 简单理解就是&#xff1a;当要录入一条数据时&#xff0c;首先会将完…

【国产之光】开年尝鲜——优秀的AI编码助手 Fitten Code

文章目录 前言1. 工具准备1.0 事先说明1.1 VSCode1.2 Fitten Code1.3 GitHub Copilot 2. 使用测评2.1 需求理解2.2 上下文理解 3. 总结推荐链接 开年尝鲜高质量国产AI编码助手——FittenCode 前言 2024年刚刚开局&#xff0c;清华大学 与 非十科技 就发布了全新的 VSCode AI…

并发编程(十)

带有Scheduled的基本都是定时器 Executor框架的成员 &#xff08;1&#xff09;ThreadPoolExecutor ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor&#xff1a;SingleThreadExecutor、FixedThreadPool和CachedThreadPool…

2024软件测试该如何发展?测试员怎样在内卷中走出来?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、行业现状 目前…

2024.1.22

今天主要是写了一个项目——通讯录&#xff0c;然后做了一下学校的C语言的期末复习题&#xff0c;已经开始准备C的期末了。通讯录目前是我写过最长的代码&#xff0c;但其实实现不是最复杂的&#xff0c;是因为我为了让用户友好&#xff0c;所以说加了一些很多重复的代码&#…

MySQL 8.0中新增的功能(九)

FROM_UNIXTIME()、UNIX_TIMESTAMP()和CONVERT_TZ()的64位支持 根据MySQL 8.0.28版本的更新&#xff0c;FROM_UNIXTIME()、UNIX_TIMESTAMP() 和 CONVERT_TZ() 函数现在在支持64位的平台上处理64位值。这包括64位版本的Linux、MacOS和Windows。在兼容的平台上&#xff0c;UNIX_T…

Java并发Condition 详解

1.引言 在Java并发编程中&#xff0c;线程间的协作是一个核心话题。为了实现线程间的协作&#xff0c;Java提供了多种机制&#xff0c;其中等待/通知机制是最常见的一种。在早期版本中&#xff0c;我们通过Object类提供的wait、notify和notifyAll方法来实现这种机制。然而&…

前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上&#xff0c;应用于vue3、typescript、vite2基础上延伸出来的扩展补充&#xff0c;持续完善 一、编码规范 ESLint 代码检测工具 Pretter 代码格式化工具配合双校验代码 Git 规范 - 编码工具 vscode 同步参考文档中…

kylin集群使用nginx反向代理

前文已经提到&#xff0c;我安装了kylin集群。 kylin3集群问题和思考&#xff08;单机转集群&#xff09;-CSDN博客文章浏览阅读151次&#xff0c;点赞3次&#xff0c;收藏6次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用…

基础篇_开发命令行程序(输入输出,类型、变量、运算符,条件语句,循环语句,方法,package与jar)

文章目录 一. 输入输出1. System.out2. System.in3. Scanner4. 变量名5. 关键字 二. 类型、变量、运算符1. 字符与字符串字符值与字符串值转义字符文本块 2. 类型何为类型数字类型字符类型 3. 变量与运算符变量运算符 4. 练习 - 房贷计算器Math.pow()数字格式化查阅 Javadoc 三…

什么是云服务器CVM?

腾讯云服务器CVM提供安全可靠的弹性计算服务&#xff0c;腾讯云明星级云服务器&#xff0c;弹性计算实时扩展或缩减计算资源&#xff0c;支持包年包月、按量计费和竞价实例计费模式&#xff0c;CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格&#xff0c;提供9个9的数…

MySQL 图书管理系统

1.需求分析 1.1项目需求分析简介 1.1.1信息需求分析 (1) 图书信息&#xff1a;包括书籍编号&#xff0c;书籍名称&#xff0c;出版社&#xff0c;作者&#xff0c;库存量&#xff0c;出版日期&#xff0c;价格&#xff0c;库存&#xff0c;剩余量&#xff0c;类别等&#xf…

rhel 9 mysql 无法远程访问(linux)

1.防火墙开启3306端口 firewall-cmd --add-port3306/tcp2.防火墙生效 firewall-cmd --runtime-to-permanent3.其他命令(停止和启动防火墙) systemctl stop firewalld systemctl start firewalld4.检查防火墙状态 firewall-cmd --check-config5.查看防火墙开启端口 firewal…

Android Retrofit使用详情

一、 Retrofit是什么 Retrofit是Android用来接口请求的网络框架&#xff0c;内部是基于OkHttp实现的&#xff0c;retrofit负责接口请求的封装&#xff0c;retrofit可以直接将接口数据解析为Bean类、List集合等&#xff0c;直接简化了中间繁琐的数据解析过程 二、 Retrofit的简单…

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切&#xff0c;对长亭晚&#xff0c;骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名&#xff0c;可以将比较长的命令进行简化。 默认情况下会输出当前的设置&#xff1a; $ alias lls -lah lals -lAh llls -lh lsls --…

C++学习笔记——多态与静态联编和动态联编

目录 一、多态 二、静态联编&#xff08;Static Binding&#xff09;和动态联编&#xff08;Dynamic Binding&#xff09; 2.1静态联编 2.2动态联编 一、多态 是C中面向对象编程的一个核心概念&#xff0c;它允许派生类对象替代其基类对象&#xff0c;从而实现代码重用和扩…

ARM CCA机密计算架构软件栈(下)

三、Realm管理 本节描述软件组件中引入的软件组件如何在Realm的创建和执行期间进行交互。 3.1 资源管理 领域资源管理的基本原则是主机保持控制。这意味着主机决定使用哪个物理内存来支持给定的领域中间物理地址(IPA),或者存储RMM使用的Realm元数据的给定片段。 主机始终…

Pandas实战100例 | 案例 7: 数据分组与聚合 - 使用 `groupby` 进行分析

案例 7: 数据分组与聚合 - 使用 groupby 进行分析 知识点讲解 数据分组和聚合是数据分析中的强大工具&#xff0c;它们使我们能够按照某个或某些特定的列将数据分组&#xff0c;并对每个分组应用聚合函数&#xff0c;以便进行分析。 示例代码 基本分组与聚合 # 按照某列分…