number; } } public class Homework { public static void main(String[] args) { //第二种赋值方法
2.包装器 2.1 function包装器 function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。那么我们来看看,我们为什么需要function呢?...Args> bind (Fn&& fn, Args&&... args); 可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。...<< endl; return 0; } thread类是防拷贝的,不允许拷贝构造以及赋值,但是可以移动构造和移动赋值,即将一个线程对象关联线程的状态转移给其他线程对象,转移期间不意向线程的执行。...不允许原子类型进行拷贝构造、移动构造以及operator=等,为了防止意外,标准库已经将atmoic模板类中的拷贝构造、移动构造、赋值运算符重载默认删除掉了。...> a2(0); //a2 = a1; // 不允许赋值编译失败 return 0; } 3.4lock_guard与unique_lock 在多线程环境下,如果想要保证某个变量的安全性
捕捉列表不允许变量重复传递,否则就会导致编译错误。比如:[=, a] 上图是值捕捉和引用捕捉的例子。 上图都是混合捕捉。图二是a,b传引用捕捉,d,e传值捕捉。...效率比较结论: 包装器 function包装器 function包装器也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。...包装器不是定义可调用对象,而是包装可调用对象。 现今所学的可调用对象有函数指针、仿函数对象、lambda。但他们有各有缺点: 因此,使用function包装起来,这样方便统一类型。...可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对 象来“适应”原对象的参数列表。...线程函数一般情况下可按照以下三种方式提供: 函数指针 lambda表达式 函数对象 thread类是防拷贝的,不允许拷贝构造以及赋值,但是可以移动构造和移动赋值,即将一个 线程对象关联线程的状态转移给其他线程对象
【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。...2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。 3) 【强制】所有的局部变量使用基本数据类型。...成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1) 不允许被继承的类,如:String 类。 ...2) 不允许修改引用的域对象。 3) 不允许被重写的方法,如:POJO 类的 setter 方法。 4) 不允许运行过程中重新赋值的局部变量。 ...【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
“boolean”是基元,但“Boolean”是包装器对象。如可能首选使用“boolean”。...alert('My name is Tom'); } null 和 undefined undefined 类型的变量只能被赋值为 undefined,null 类型的变量只能被赋值为 null...person2 赋值,未定义只读属性id person2.id = 1; // => 编译报错:id为只读, 不可修改 函数类型接口 // 只有参数列表和返回值类型的函数定义, 参数列表里的每个参数都需要名字和类型...比如 public 表示公有属性或方法 抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。...抽象类是提供给其他类继承的基类(父类),是不允许被实例化 抽象方法只能包含在抽象类中 子类继承抽象类,必须实现抽象类中的抽象方法 abstract class Animal { abstract
所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。...关于基本数据类型与包装数据类型的使用标准如下: 1) 【强制】所有的POJO类属性必须使用包装数据类型。 2) 【强制】RPC方法的返回值和参数必须使用包装数据类型。...成员变量、方法、以及本地变量,下列情况使用final关键字: 1) 不允许被继承的类,如:String类。...2) 不允许修改引用的域对象,如:POJO类的域变量。 3) 不允许被重写的方法,如:POJO类的setter方法。 4) 不允许运行过程中重新赋值的局部变量。...【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。 2) 工具类不允许有public或default构造方法。
【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。 说明:对于 Integer var = ?...关于基本数据类型与包装数据类型的使用标准如下: 1) 【强制】所有的 POJO 类属性必须使用包装数据类型。 2) 【强制】RPC 方法的返回值和参数必须使用包装数据类型。...【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1) 不允许被继承的类,如:String 类。...2) 不允许修改引用的域对象,如:POJO 类的域变量。 3) 不允许被重写的方法,如:POJO 类的 setter 方法。 4) 不允许运行过程中重新赋值的局部变量。...【推荐】类成员与方法访问控制从严: 1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。 2) 工具类不允许有 public 或 default 构造方法。
捕捉列表不允许变量重复传递,否则就会导致编译错误。 比如:[=, a]:=已经以值传递方式捕捉了所有变量,捕捉a重复 d. 在块作用域以外的lambda函数捕捉列表必须为空。 e....f. lambda表达式之间不能相互赋值,即使看起来类型相同 int main() { //最简单的lambda表达式,该表达式没有任何意义 [] {}; //省略参数列表和返回值类型, 返回值类型由编译器自动推导为...PF = f2; PF(); return 0; } 1.3 函数对象与lambda表达式 函数对象,又称为仿函数,即可以想函数一样使用的对象,就是在类中重载了operator()运算符的类对象...包装器 2.1 function包装器 function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。 那么我们来看看,我们为什么需要function呢?...Args> /* unspecified */ bind (Fn&& fn, Args&&... args); 可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来
对于Integer类来说,当相应的变量数值范围在-128到127之间的时候,该对象会被存储在IntegerCache.cache里面,因此会有对象复用的情况发生。...所以对于包装类进行比较的时候,最好统一使用equal方法。 ...RPC方法的返回值和参数都统一使用包装类数据。局部变量中使用基本的数据类型。...下列情况使用 final 关键字: 不允许被继承的类,如:String 类。 不允许修改引用的域对象,如:POJO 类的域变量。 不允许被重写的方法,如:POJO 类的 setter 方法。...不允许运行过程中重新赋值的局部变量。 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好地进行重构。
5、OOP规约 避免通过类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 所有的覆写方法,必须加@ Override 注解。...比如: 正例: ”test”.equals(object); 反例: object.equals( ”test” ); 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。...在-128 至 127 之间的赋值, Integer 对象是在IntegerCache . cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据...关于基本数据类型与包装数据类型的使用标准如下: 1)所有的 POJO 类属性必须使用包装数据类型。 2)RPC 方法的返回值和参数必须使用包装数据类型。...final 可提高程序响应效率,声明成 final 的情况: 1)不需要重新赋值的变量,包括类属性、局部变量。 2)对象参数前加 final ,表示不允许修改引用的指向。
正例: “test”.equals(object); 22、所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较 23、关于基本数据类型与包装数据类型的使用标准如下: 1...2) 【强制】RPC方法的返回值和参数必须使用包装数据类型。 3) 【推荐】所有的局部变量使用基本数据类型。 24、定义DO/DTO/VO等POJO类时,不要设定任何属性默认值。...30、下列情况,声明成final会更有提示性: 1) 不需要重新赋值的变量,包括类属性、局部变量。 2) 对象参数前加final,表示不允许修改引用的指向。 ...3) 类方法确定不允许被重写。 31、类成员与方法访问控制从严: 1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private。 ...2) 工具类不允许有public或default构造方法。 3) 类非static成员变量并且与子类共享,必须是protected。
左值:可以取地址,一般情况下,值可以被修改,左值可以出现在赋值符号的左右边;例如变量名,解引用的指针 右值:不可以取地址,右值只能出现在赋值符号的右边;例如字面常量,表达式,函数返回值 是否能取地址是左值和右值最大的区别...return 0; } 注意: 父作用域指包含lambda函数的语句块 捕捉列表不允许变量重复传递,否则就会导致编译错误 在块作用域以外的lambda函数捕捉列表必须为空 lambda表达式之间不能相互赋值...}; 九.包装器 迄今为止,学过的可调用对象有3种: 函数指针 仿函数 lambda表达式 但是怎么把这三种对象存到一个对象里呢?...function包装器 包含在头文件 中 function包装器 也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。...Ret 是返回值类型,Args...是一个可变参数包,也就是可调用对象的参数类型 十.bind 绑定 std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可
,想要将一个泛型是子类的容器赋值给这个变量,编译器是不允许的;因为运行时会将泛型擦除,一旦将一个泛型是子类的容器赋值给泛型是基类的容器变量,在运行时就可以将一个这个基类的其他子类对象放入这个窗口,造成在取出对象时的类型不安全...,所以编译期不允许这样赋值; public class WildCardTest & Iterable & InterfaceA赋值,那么之后 的操作会出现类型问题,比如此例,将一个ArrayList 赋值给 List变量list, // 那么之后可以向list 中add...class Impl2 implements InterfaceA {} 容器的这一特点与数组不同,子类数组对象可以赋值给基类数组变量(类似向上转型),但是在运行期jvm 可以知道数组元素中的对象类型是哪个具体子类...InterfaceA[4]; arr2[0] = new Impl(); arr2[0] = new Impl2(); } } 为了保证类型安全,又可以将子类泛型容器赋值给基类泛型变量
Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。...主要作用如下: 集合不允许存放基本数据类型,用包装类作为对象就可以传入 使基本类型有了属性,如最大值、最小值、所占位数等 使之有了实用的对象操作,如类型转换、进制转换 JVM会自动维护八种基本类型的常量池...Integer i3 = new Integer(10); Integer i4 = new Integer(10s); System.err.println(i3 == i4); //false 赋值是有返回值的...new的话就不起作用,当包装类加载时内部会初始化一个缓存数组,如果数值在缓存范围内会直接返回缓存数组的对象,而不会新建对象 Boolean:(全部缓存) Byte:(全部缓存) Character(<=...() 包装类 --> 基本类型 包装类实例.XXXValue(); 初始值: 成员变量才会有初始值,局部变量必须先赋值才能编译通过 运算符: &&等一对的具有短路功能,即前面能判断结果就不判断后面的
【1】继续使用 UserDO 作为方法返回值: >: 省事,减少对象定义 >: 无法根据函数名或返回值明确知道哪些属性被赋值哪些属性没有被赋值。...【2】定义新的 DO 对象 >: 1)可以根据方法名和返回值,明确感知当前业务获取的字段 2)专用查询和通用查询很好地作区分 >: 当场景较多时,需要定义的 DO 对象过多...【推荐】如果需要定制化查询,函数名不能有歧义,要体现出业务含义;不允许使用通用 DO 对象,需使用包装类型或者定义专有 DO 。...正例: String getEmailById(Long id) UserSimpleDO getSimpleById(Long id) [1] 如果使用容易歧义的类通用化的函数名称,返回值是通用的...[2] 创建 DO 工作量并不大,对象的转换也可以通过工具类加以转化。
例如匿名对象,传值返回的函数调用的返回值等,因为匿名对象在其所在代码行执行完毕后就会被销毁,并且传值返回的函数调用实际利用了中间生成的一个临时变量将返回值从被调用的函数栈帧即将销毁时带出,这个临时变量的值一旦被接收...假设我们现在要实现一个不能被拷贝的类,也就是这个类的对象不允许被拷贝,这种场景叫做防拷贝,某些类的成员并不想被拷贝。我们该怎么解决这个问题呢?...C++允许使用一个lambda表达式拷贝构造一个新的副本,但不允许lambda表达式之间相互赋值。...事实上,你可以这么理解包装器,包装器也是一个仿函数对象,他的内部也实现了operator(),但他的operator()内部又调用了包装器包装的可调用对象的operator(),所以包装器这个类可以理解为他内部封装了三个可调用对象的...,固定第一个参数为类的匿名对象,这样在使用包装器调用类成员函数的时候,就不需要再显示传一个匿名对象了。
参考链接: C++附近的int() C++11之前写回调函数的时候,一般都是通过 typedef void CALLBACK (*func)(); 方式来声明具有某种参数类型、返回值类型的通用函数指针...上面例子声明了一个返回值是void,无参数的函数指针。 其中,返回值和参数可以使用 boost::any 或者 auto进行泛型指代。...其中std::function学名是可调用对象的包装器,作用和上面 typedef void CALLBACK (*func)(); 差不多,都是指代一组具有参数个数和类型,以及返回值相同的函数。...,绑定后可以赋值给std::function对象上,并且可以通过占位符std::placeholders::决定空位参数(即绑定时尚未赋值的参数)具体位置。... std::function fr2 = std::bind(&A::i_, &a); fr2() = 100;// 对成员变量进行赋值 std::cout
捕捉列表不允许变量重复传递,否则就会导致编译错误。比如:[=, a]:=已经以值传递方式捕捉了其他所有变量,捕捉a重复。 在块作用域以外的lambda函数捕捉列表必须为空。...3 -> 包装器 function包装器 function包装器,也叫作适配器。C++中的function本质是一个类模板,也是一个包装器。...Args> /* unspecified */ bind(Fn&& fn, Args&&... args); 可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来...<< endl; return 0; } 4. thread类是防拷贝的,不允许拷贝构造以及赋值,但是可以移动构造和移动赋值,即,将一个线程对象关联线程的状态转移给其他线程对象。 5....,不允许原子类型进行拷贝构造、移动构造以及operator=等,为了防止意外,标准库已经将atomic模板类中的拷贝构造、移动构造、赋值运算符重载默认删除了。
它们允许开发者在需要函数对象的地方直接定义并使用函数逻辑,无需显式定义和命名函数或函数对象类。...这一特性极大地增加了模板的灵活性和扩展性,使得开发者可以定义更加通用和灵活的函数或类模板 C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比C++98/03,类模版和函数模版中只能含固定数量的模版参数...a和b,值传递方式捕捉其他所有变量 [&,a, this]:值传递方式捕捉变量a和this,引用方式捕捉其他变量 捕捉列表不允许变量重复传递,否则就会导致编译错误 比如:[=, a]:=已经以值传递方式捕捉了所有变量...,捕捉a重复 在块作用域以外的lambda函数捕捉列表必须为空 在块作用域中的lambda函数仅能捕捉父作用域中局部变量,捕捉任何非此作用域或者 非局部变量都会导致编译报错 lambda表达式之间不能相互赋值...,即使看起来类型相同 在使用lambda时,其实就是相当于调用了一个函数 ⭐函数对象与lambda表达式 函数对象,又称为仿函数,即可以像函数一样使用的对象,就是在类中重载了operator()运算符的类对象
领取专属 10元无门槛券
手把手带您无忧上云