对类和对象的详细解析
目录
1.类的构成
2.this指针
3.C++类里面的静态成员
3.1 类里面的静态成员函数
3.2 类里面的静态成员变量
静态成员变量的特点
共享性
存储位置
生命周期
访问权限
如何初始化?
构造函数
1.类的构成
public修饰的成员在类外可以直接被访问
private和protected修饰的成员不能在类外被访问
如果变量没有被这三个修饰词来修饰的话,则默认为private
2.this指针
关于this指针的一个经典回答:
有一个房子类
当你进入这个房子的时候,你可以看见桌子、椅子等,但是房子的全貌你看不见了
对于一个类的实例来说,你可以看见他的成员函数、成员变量
但是实例本身呢?
this这个指针就时时刻刻指向这个实例本身
this指针是指向对象的指针,存放对象的首地址
#include <iostream> using namespace std; class Student { public:void Setage(int age){this->age = age;//this->age表示这个类所指向的age,单独的age是形参}void Showage(){cout << age << endl;}private:int age; }; int main() {Student s;s.Setage(18);s.Showage();return 0; } //输出结果为18
#include <iostream> using namespace std; class Student { public:void Setage(int age){age = age;//age=age,并不会改变类里面age的值}void Showage(){cout << age << endl;}private:int age; }; int main() {Student s;s.Setage(18);s.Showage();return 0; } //输出结果是0
this指针是编译器帮我们加上的,不占用空间
#include <iostream> using namespace std; class Student { private:int age; };int main() {cout << sizeof(Student) << endl;//结果为4return 0; }
既然this指针指向类,那么类的地址和this的地址是一样的
#include <iostream> using namespace std; class Student { public:void test(){cout << this << endl;}private:int age; };int main() {Student s;s.test();cout << &s << endl;return 0; }
输出的地址是一样的
3.C++类里面的静态成员
静态成员是属于整个类的而不是某个对象,静态成员只存储一份供所有对象使用
3.1 类里面的静态成员函数
静态成员函数没有隐藏的this指针
#include <iostream> using namespace std; class Student { public:void Set(int age){this->age = age;}void Showage(){cout << age << endl;}static void test(){cout<<this->age<<endl;//这个地方的age会报错,如果不加this也会报错//静态成员函数不能引用非静态成员,但是可以在类的非静态成员函数里面使用静态成员} private:int age; };int main() {Student s;return 0; }
这就说明了静态函数是在这个类创建出来之前就出现了,也就是说静态函数的创建时间比这个类早,所以在这个静态函数里面使用类里面的东西会报错
那么应该如何使用这个函数呢
首先要注意一点:这个静态函数不能使用类里面的东西
class Student {static void test(){cout<<"i want to sleep"<<endl;} };int main() {Student s;Student::test();//这里记住不能通过类名调用非静态成员函数s.test();//上面两句说明类的对象可以使用静态和非静态成员函数return 0; }
这两种方法都可以调用这个静态函数
3.2 类里面的静态成员变量
静态成员变量在类的所有实例之间共享,并且可以在不创建类的情况下访问(在类创建之前就创建好了)
3.3静态成员变量的特点
共享性
静态成员变量在类所有的实例之间共享,这个类的每个对象的静态变量都是相同的
存储位置
静态成员变量存储在静态存储区,而不是每个对象的堆栈中。这使得他们可以在不创建类的实例的情况下访问
生命周期
与程序的生命周期一样。在程序启动的时候就创建了,在程序结束的时候就销毁
访问权限
静态成员变量可以通过类名来访问,也可以通过对象来访问。但是建议前者,这样子能强调他们的共享性
如何初始化?
class Student { private:static int a; };int Student::a=0;
4构造函数
构造函数的主要作用不是开辟空间创建对象,而是为了初始化对象
特征
他不是开空间创建对象,而是初始化对象
1. 无返回值(也不用写void)
2. 函数名与类名相同
3. 构造函数可以重载
#include <iostream>using namespace std;class Student { public:Student(int a,int b,int c)//构造函数{_a=a;_b=b;_c=c;}Student(int a,int b){_a=a;_b=b;}void Show(){printf("%d %d %d",_a,_b,_c);} private:int _a,_b,_c; };int main() {Student s(1,2,3);//创建s对象的同时调用构造函数Student p(1,2);//函数重载s.Show();return 0; } //输出结果1 2 3
#include <iostream>using namespace std;class Student { public:void Show(){printf("%d %d %d",_a,_b,_c);} private:int _a,_b,_c; };int main() {Student s;s.Show();return 0; } /* 输出结果32767 0 0 如果类里面没有构造函数,则C++编译器会自动调用一个无参的默认构造函数 */
private:int _a=1,_b=1,_c=1;/* 这里对_a,_b,_c不是赋值不是初始化,而是给缺省值 原因:这里的变量都是声明,还没有创建出来 */
5析构函数
作用与构造函数相反。在对象销毁时自动调用,完成对象中资源的清理工作
特征
析构函数名是在类名的签名加~
无参数无返回值
一个类只能有一个析构函数,如果自己没有定义,系统会调用默认的析构函数。析构函数不能重载
对象生命周期结束时调用
析构函数的执行在return之前
#include <iostream> using namespace std; class S { public:S(){cout << "构造" << endl;}~S(){cout << "析构" << endl;} }; int main() {S s;return 0; }
先输出构造,然后再输出析构
作用
当我们在类中声明了一些指针变量的时候,我们一般在析构函数里面释放这些指针变量所占有的空间,因为系统不会释放指针变量指向的空间,我们需要自己来delete
6.构造函数和析构函数的一些应用
6.1 定义为局部变量
先补充一个知识点:局部变量存储在栈区,全局变量和静态变量存储在静态区
#include <iostream>using namespace std;class Date { public:Date(int a){_a = a;cout << "Date()->" << _a << endl;}~Date(){cout << "~Date()->" << _a << endl;}private:int _a; };int main() {Date a(1);Date b(2);return 0; }
输出结果
析构函数的时候为什么先输出~Date()->2呢?
首先我们要知道a和b变量都是局部变量,都存储在栈区,栈区遵循后进先出的原则
6.2 局部变量和全局变量同时存在时
#include <iostream>using namespace std;class Date { public:Date(int a){_a = a;cout << "Date()->" << _a << endl;}~Date(){cout << "~Date()->" << _a << endl;}private:int _a; };Date b(2);int main() {Date a(1);return 0; }
输出结果
全局变量先定义,在程序结束之后再销毁(在局部变量销毁之后再销毁)
6.3 静态变量、局部变量、全局变量共存
#include <iostream>using namespace std;class Date { public:Date(int a){_a = a;cout << "Date()->" << _a << endl;}~Date(){cout << "~Date()->" << _a << endl;}private:int _a; };Date b(2);int main() {Date a(1);static Date c(3);return 0; }
输出结果
创建变量按顺序来。首先是局部变量被销毁,静态区的变量(只考虑这个区域时)在销毁时也是类似“后进先出”一样来销毁
6.4 静态变量在循环中
#include <iostream>using namespace std;class Date { public:Date(int a){_a = a;cout << "Date()->" << _a << endl;}~Date(){cout << "~Date()->" << _a << endl;}private:int _a; };int main() {for (int i = 0; i <= 1; i++){static Date a(1);Date b(2);}return 0; }
输出结果
静态变量只会被创建一次,所以只有一次构造函数和一次析构函数
7.拷贝构造函数
浅拷贝
拷贝成员变量的值
#include <iostream>using namespace std;class Student { public:Student(int a, int b, int c){_a = a;_b = b;_c = c;}/*当有Student b(a)这行代码的时候问题1:为什么要写成 Student &s呢?写成Student &s表示s是a的别名,不需要调用拷贝构造函数如果写成Student s的话,会无限递归原因:在调用拷贝构造函数的时候, Student(Student s){this->_a = s._a;this->_b = s._b;this->_c = s._c;} 把a传给s也会调用拷贝够咱函数,也就是说,调用一个拷贝构造函数会使得其内部嵌套另一个拷贝构造函数 那这个嵌套的拷贝构造函数也会继续嵌套一个,依次无限嵌套下去而导致死循环;所以要加一个&问题2:那为什么加一个const呢?因为我们要a的值不变,将其内部的值赋给b(s),所以我们最好加一个const来修饰来让a的值不变 只要a里面的值变,就会报错 因为有可能出现以下情况 Student(const Student &s){a._a = this->_a;a._b = this->_b;a._c = this->_c;} 如果没有const,出现上述情况编译器是不会报错的*/Student(const Student &s){this->_a = s._a;this->_b = s._b;this->_c = s._c;}void Show(){printf("%d %d %d\n", _a, _b, _c);}private:int _a, _b, _c; };int main() {Student a(10, 20, 30);Student b(a);b.Show();return 0; }
输出结果
8.重载
关键字:operator
8.1 运算符重载
#include <iostream> using namespace std; class Student { public:Student(int a, int b, int c){_a = a;_b = b;_c = c;}bool operator==(const Student &b)//重载==运算符{return _a == b._a && _b == b._b && _c == b._c;//a和b相等的条件} private:int _a, _b, _c; };int main() {Student a(10, 20, 30);Student b(10, 20, 30);cout << (a == b) << endl;//这里判断a和b是否相等只需要判断a和b里面的_a,_b,_c是否分别相等return 0; }
#include <iostream> using namespace std; class Student { public:Student(int a, int b, int c){_a = a;_b = b;_c = c;}int operator-(const Student &b){return b._c - _c;}private:int _a, _b, _c; };int main() {Student a(10, 20, 30);Student b(10, 20, 50);cout << (b - a) << endl;return 0; } //输出结果是a._c - b._c 结果为-20
这里就有一个问题
void operator++是怎么区别前置++和后置++的呢?
int operator++();//前置++int operator++(int);//后置++ //规定:()里面无参数的为前置++,否则为后置++
注意点
#include <iostream> using namespace std; class A { public:A(int val){_val=val;}void operator+(const A& d){_val+=d._val;}void operator=(const A& d){_val=d._val;}void Print(){cout<<_val<<endl;} private:int _val; }; int main() {A a(3),b(4),c(7);c=a=b; /* c=a=b会报错,但是a=b,不会报错 因为c=a=b这句话首先执行的是a=b,然后返回值是void 所以 void operator=(const A& d){_val=d._val;} 应该改成 A operator=(const A& d){_val=d._val;return *this;//这里返回值是*this的一个拷贝(拷贝的话可能调用其中的拷贝函数或者构造函数什么的)} 所以最好写成 A& operator=(const A& d){_val=d._val;return *this;//这里返回的是*this的别名,不会再去调用拷贝函数} */a.Print();return 0; }
8.2 流重载
#include <iostream>using namespace std;class Date { public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void operator<<(ostream &out) // out是cout的别名{out << _year << '/' << _month << '/' << _day << endl;}void operator>>(istream &in){in>>_year>>_month>>_day;}private:int _year, _month, _day; };int main() {Date a(2023, 9, 16);a>>cin;//a是被操作的对象,cin传给ina<<cout;return 0; }
const的参与
#include <iostream> using namespace std; class Date { public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){printf("%d %d %d\n", _year, _month, _day);}private:int _year, _month, _day; }; int main() {Date a(2023, 9, 17);const Date b(1,1,1);a.Print();b.Print();//这里会报错 /* 因为b是一个const Date类型的 b.Print()的原型是b.Print(&b),&b是一个const Date*类型的 void Print()的原型是void Print(Date* const this) &b从const Date*变成Date*权限放大了 所以我们将void Print()写成void Print() const,这样他的原型变成了: void Print(const Date* const this)是const Date*类型,后面那个const是修饰this 让this一直指向这个类且不能变 */return 0; }
#include <iostream> using namespace std; class Date { public:Date(int year, int month, int day){_year = year;_month = month;_day = day;}void Print()const{printf("%d %d %d\n", _year, _month, _day);}bool operator<(const Date& d){return _year<d._year;}private:int _year, _month, _day; }; int main() {Date a(2023, 9, 17);const Date b(1,1,1);a<b;//不会报错b<a;//这里会报错 /* bool operator<(const Date& d)的原型是 bool operator<Date* const this,const Date& d) 所以写成b<a的时候(b是const Date*类型) b由const Date*变成Date*,权限变大 可以写成 bool operator<(const Date& d)const */return 0; }
9.初始化列表
初始化列表可以认为是成员变量定义的地方
(private里面是声明)
9.1格式
#include <iostream>
using namespace std;
class Date
{
public:
//格式如下Date(int a): _a(a),_b(a){}void Print(){cout << _a << endl;}private:int _a;int &_b;
};
int main()
{Date a(6);a.Print();return 0;
}
9.2例子
每个成员变量在初始化列表中只能出现一次
类中包含以下成员,必须放在初始化列表位置进行初始化
1.引用成员变量
2.const成员变量
3.自定义类型成员
class A { public:A(int a): _a(a){}void Print(){cout << _a << endl;}private:int _a; };class B { public:B(int a, int b): _b(b),_a(a),_n(10),_r(b){}void Print(){_a.Print();cout << _b << endl;}private:int _b;A _a;const int _n;int& _r; };
成员变量在类中声明的次序就是其在初始化列表里面初始化的次序,与其在初始话列表里面的先后顺序无关
例子:
#include <iostream>using namespace std;class A
{
public:A(int a):_a(a),_b(_a){}void Print(){cout<<_a<<endl;cout<<_b<<endl;}
private:int _b;int _a;
};int main()
{A a(3);a.Print();return 0;
}
/*
输出结果是 3 随机值
因为先是把_a赋值给_b,再把a赋值给_a
*/
9.3explicit关键字
用explicit修饰的构造函数,会禁止单参构造函数的隐式转换
首先搞明白什么是隐式转换
class A { public:A(int a)//单参构造函数: _a(a){}private:int _a; };//定义一个类对象 A a(10); /* 此时_a的值为10,如果进行以下操作,a=20,这样子会把_a的值变为20 编译器会用20(将20赋值给无名对象的_a)构造一个无名对象 最后用无名对象赋值给对象a,这种转换就叫隐式转换 */
隐式转换其实还有很多,比如
int a=2;
double b=a;
编译器会先引入一个中间变量,类型为double,然后再将这个值赋值给b
#include <iostream>using namespace std;class A { public:A(int a) /* 如果这里改成explicit A(int a)的话 a=5那行代码会报错 因为explicit会禁止单参构造函数的隐式转换 */: _a(a){}void Print(){cout << _a << endl;}private:int _a; };int main() {A a(3);a = 5;a.Print();return 0; }
9.4 匿名对象
生命周期只有它所在的那一行
class A { public:A(int a):_a=a{} private:int _a; }; A a(10);a = A(20);a.Print();如果不使用匿名对象,那就需要: A a(10); A b(20); a=b; 这样子来操作 /* A(20)表示创建一个匿名对象,他的_a值为20 这个匿名对象创建的时候也会调用构造函数和析构函数 */
10.友元类
如果类A是类B的友元类,那么B可以调用A里面的private成员和protected成员
但是这样子做会破坏类的封装性
注意点
1. 友元关系不能被继承
2. 友元关系是单向的,A是B的友元,但是B不一定是A的友元
3. 友元不具有传递性,比如A是B的友元,B是C的友元,但是A不是C的友元
#include <iostream>using namespace std;class A { public:friend class B;//代表A是B的友元类,B可以访问A里面的所有成员A(int a){_a=a;} private:int _a; };class B { public:B(int b){_b=b;}void Show_A_a(A a){cout<<a._a<<endl;//这里就体现了可以访问A定义的对象a里面的私有成员} private:int _b; };int main() {A a(666);B b(555);b.Show_A_a(a);return 0; }
10. 2内部类
定义:如果一个类定义在另一个类的里面,那这个里面的类就叫做内部类
内部类是外部内的友元类,但是外部类不是内部类的友元类
比如A是外部类,B是外部类
那么定义一个类的时候应该A::B b;定义一个对象b,b能调用A和B里面的成员,但是如果A a,那a不能调用B里面的成员
相关文章:
对类和对象的详细解析
目录 1.类的构成 2.this指针 3.C类里面的静态成员 3.1 类里面的静态成员函数 3.2 类里面的静态成员变量 静态成员变量的特点 共享性 存储位置 生命周期 访问权限 如何初始化? 构造函数 1.类的构成 public修饰的成员在类外可以直接被访问 private和protecte…...
matlab 间接平差法拟合二维圆
目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 圆的方程为: ( x - x 0 )...
pgzrun 拼图游戏制作过程详解(10)
10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名,Photo_ID用来统计当下是第几张拼图,Squares储存当下拼图的24张小拼图的文件名,Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…...
glog与pugi::xml使用方法
(一)glog的使用:google logging的简称; 1)需要安装,网上一搜一大堆,不在赘述; 2)在cmakelists.txt中,需要链接"-glog",如&a…...
windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”
文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”,可以参考以下方法。 我的电脑上安装了双版本MySQL,这里…...
剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。…...
嵌入式笔试面试刷题(day15)
文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟…...
【Docker】Dockerfile构建镜像
一、编写Dockerfile文件 编写镜像需要的运行环境(Linux、java等), Dockerfile文件内容如下: # 使用官方的 Ubuntu 16.04 镜像作为基础镜像 FROM ubuntu:16.04# 更新包列表 RUN apt-get update# 安装所需的软件包 RUN apt-get ins…...
fota升级,可卸载apk也进行更新
首先如题目要求 可卸载apk是通过刷机或恢复出厂设置之后执行脚本安装的 然后fota升级后,在判断是否“是第一次刷机和恢复出厂设置”时候会返回false,就导致脚本没有执行。导致apk升级不成功 所以我们要完成这个就是,确定fota什么时候升级完…...
ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码
技术架构:ASP.NET dotnet 3.5 LIMS作为一个信息管理系统,它有着和ERP、MIS之类管理软件的共性,如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产,最大限度地发挥现有设备、资源、人、技术的…...
2023!6招玩转 Appium 自动化测试
Appium是个什么鬼 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页…...
WireShark抓包分析TCP三次握手过程,TCP报文解析
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...
【C语言】指针和数组笔试题解析
大家好,我是苏貝,本篇博客带大家了解指针和数组笔试题解析,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...
Vue的模板语法(下)
一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符, .stop, .prevent,.capture,.self,.once .stop:阻止事件冒泡。当一个元素触发了事件,并且该元素包含嵌套的父元素时&#…...
Zookeeper客户端——I0Itec-zkClient
dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问题。 1)ZooKeeper的Watcher是一次性的,用过了需要再注册; 2) session的超时后…...
火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性
背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…...
hashmap使用
hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了,而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器(Iterator)EntrySetpublic static void main(String[] args) {// 创建并赋…...
Centos7配置国内yum源
目录 备份原系统中的repo文件配置国内开源镜像重新生成yum缓存 备份原系统中的repo文件 cd /etc/yum.repos.d/mkdir repo_bakmv *.repo repo_bak/配置国内开源镜像 到网易和阿里开源镜像站点下载系统对应版本的repo文件 curl -O http://mirrors.aliyun.com/repo/Centos-7.re…...
C#中async/await的线程ID变化情况
一、简单的起步 Console.WriteLine($"主线程开始ID:{Thread.CurrentThread.ManagedThreadId}");//aawait Task.Delay(100);//cConsole.WriteLine($"主线程结束ID:{Environment.CurrentManagedThreadId}");//b 结果: …...
网络安全—黑客技术—自学笔记
目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来…...
功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲
功夫再高也怕菜刀,专业的事情交给专业的人去做。 今年7月份中旬的时候,遇到一位老朋友,向我咨询某公司的信息,其实我根本不了解这家公司的情况与实力,向他说了,抱歉,我查下,等我晚上…...
numpy的多项式函数: `poly1d`
Python numpy.poly1d() numpy.poly1d()函数有助于定义一个多项式函数。它使得在多项式上应用 "自然操作 "变得容易。 语法: numpy.poly1d (arr, root, var) 参数 : arr : [array_like] 多项式系数按照幂的递减顺序给出。如果第二个参数(根)被…...
Python灰帽编程——错误异常处理和面向对象
文章目录 1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测(捕获)异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 2. 内网主机存活检测程序2.1 scapy 模块2.1.1 主要功能2.1.2 scapy 安装…...
【20230919】win11无法删除Chrome注册表项
win11无法删除Chrome注册表项 删除以下注册表项发生错误: 计算机\HKEY_LOCAL_MACHINE\SOFTWAR\Google计算机\HKEY_CURRENT_USER\Software\Google 尝试了很多删除注册表方法(例如:编辑remove.reg文件),都不行。 无法…...
TCP/IP客户端和服务器端建立通信过程
客户端和服务器端建立通信过程 使用Qt提供的类进行基于TCP的套接字通信需要用到两个类: QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。 QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。服务…...
Python ---使用Fake库向clickhouse造数据小案例
每次insert太麻烦了 先在clickhosue中建表 test_user表 CREATE TABLE dwh.test_user (name String,age Int32,address String,phone String,email String ) ENGINE MergeTree() ORDER BY name; 此时表中暂无数据 用Python脚本来造一些数据 from faker import Faker from c…...
09MyBatisX插件
MyBatisX插件 在真正开发过程中对于一些复杂的SQL和多表联查就需要我们自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件帮助我们简化开发 安装MyBatisX插件: File -> Settings -> Plugins -> 搜索MyBatisx插件搜索安装然后重启IDEA 跳转文件功能 由于一个项…...
使用 Messenger 跨进程通信
什么是Messenger Messenger 也是IPC的方案之一,是基于消息的跨进程通信。基于消息是什么意思?Handler是我们最常用的消息机制,所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已,它们…...
Spring Cloud Gateway
路由谓词工厂 Route Predicate Factory 1. The After Route Predicate Factory spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]# 用日期时间匹配 2. The Before Route Pr…...
JVM 优化技术
文章目录 JVM 优化技术概述方法内联优化说明优点内联条件 栈帧之间数据共享说明优点栈帧之间数据共享条件 JVM 优化技术 概述 JVM常见的优化技术: 方法内联优化。栈帧之间数据共享。 方法内联优化 说明 方法内联(Method Inlining)是JVM…...
做网站商城需要多少钱/怎么做网站排名
MySQL 有许多图形化的管理工具,我们在此介绍二个官方的工具「MySQL Administrator」及「MySQL Query Browser」。MySQL Administrator 是用来管理 MySQL Server 用的,您可以查看目前系统状态、新增使用者等。而 MySQL Query Browser 可以用来查看数据库内…...
合肥网站建设网站模板/广告投放都有哪些平台
开发工具下载地址...
石河子市住房和城乡建设局网站/网页加速器
解决中文乱码的问题 header(Content-type: text/html; charsetUTF8);一、PHP是什么? 超级文本预处理语言(Hypertext Preprocessor) 网站是多个网页构成的一个集合。 动态网页是指使用网页脚本语言,比如php、asp.net等,…...
wap网页编写/seo新人怎么发外链
1. 创建版本库 1.1 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: 1.2通过git init命令把这个目录变成Git可以管理的仓库(git进入空目录的路径) $ git init Initialized empty Git repo…...
青岛网站设计价格/公司个人怎么做网络推广
我在reactjs中使用formik,有一个onsubmit方法,它有一个setsubmitting参数。我想把它传给我的“然后”方法,但不知道怎么做。onSubmit{(values, { setSubmitting, setErrors }) > {setSubmitting(true);// how can I get away from doing this.const submitting setSubmitti…...
亚马逊服务器做影视网站/推广联系方式
大家好,我是华为云的产品经理 恒少: 作为布道师和产品经理,出差各地接触客户是常态,经常和华为云的客户交流、布道、技术沙龙,但是线下交流,覆盖的用户总还是少数。 我希望可以借线上的平台,和用…...