引言 我是@程序员小助手 Rman,昨天看到一个题目,说在两台PC之间快速传几百G的文件,有没有什么好的快的办法。 考虑到操作系统平台,有Windows,Linux,MaxOS,这些都有差异。...所以给出了5种解决方法。但是只说了其中三种。参看 两台电脑之间如何快速传输几百G的文件?-两台,传输,文件,电脑 ? 这里说说为什么不推荐另外2种。 一个是网络存储。...这个在国外,是Dropbox,是google cloud,是微软的OneDrive,在国内就是百度云盘,各个厂商云盘。...为什么不推荐,因为pandownload的被举报,开发者收监,百度的名声臭的不可救药。所以不推荐。 国外的网速,你我都是知道的。 还有一个是,软件共享。 有人说这很简单啊,局域网有QQ,不就行了?...回答发出后,有不少网友回复说, “我直接拔下来硬盘,接到新主机上。新主机启动,挂载为新的磁盘,立马可用!” 这个也是经不起推敲的。
为什么需要内部类? 为什么内部类(包括匿名内部类、局部内部类),会持有外部类的引用? 为什么匿名内部类使用到外部类方法中的局部变量时需要是final类型的? 如何创建内部类实例,如何继承内部类?...内部类能够更好的封装,内聚,屏蔽细节 我们在Job的run方法中,打印了外部Worker的mJobList列表中剩余Job数量,代码这样写没问题,但是细想,内部类是如何拿到外部类的成员变量的呢?...为什么内部类(包括匿名内部类、局部内部类),会持有外部类的引用? 问这个问题,显得我是个杠精,您先别着急,其实我想问的是,内部类Java是怎么实现的。...方法局部内部类,我这里就不赘述了,原理都是一样的,大家可以自行试验。 这样我们算是解答了第二个问题,来看第三个问题。 为什么匿名内部类使用到外部类方法中的局部变量时需要是final类型的?...如果将age改为private,编译器会在Demo类中生成二个方法,分别用于读取age和设置age,篇幅关系,这种情况留给大家自行测试。 解答为何局部变量传递给匿名内部类需要是final?
What 局部内部类就是定义在某个方法内部的内部类,它的作用域仅限于这个方法。 Why 当我们在外围类中定义的内部类仅仅在某个方法中使用了一次,这种情况下,我们就可以选择去使用局部内部类。...看到这里,我相信大部分人会有疑问,为什么beep变量被回收,但是actionPerformed方法仍然可以调用到这个方法?...当创建一个对象的时候,beep就会传递给构造器,并存储在val$beep域中。...:创建一个实现ActionListener接口的类的新对象,需要实现的方法定义在括号内。...与常规内部类不同的地方是,静态内部类可以有静态域和方法,声明在接口中的内部类自动生成static和public类。
,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...0; } 六、拷贝对象时的一些编译器优化 在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还是非常有用的。...例如 A a1 = 1;,在这种情况下,编译器会识别出这是一个对象初始化的过程,可以直接调用构造函数,而不是先创建临时对象再调用拷贝构造函数。 当函数调用跨越不同表达式时,编译器无法进行同样的优化。...临时对象:临时对象通常是在表达式中临时创建的对象,它们的生命周期仅限于表达式范围内。const 引用允许将临时对象绑定到引用上,从而避免了临时对象的拷贝。...引用传参:使用 const & 传参,函数接收的是对象的引用,而不是对象本身。引用仅占用指针大小的空间,不涉及对象的拷贝。因此,传递引用比传递整个对象更加高效。
因为这个是默认成员函数,我们不写,编译器默认生成的 就是我们在这里些&d1 &d2 默认调用了两个operator &函数的 为什么说是两个呢?...不涉及权限的放大和缩小 我被我拷贝一份,给你进行赋值操作 又不改变我本身 指向内容的const才会存在权限的放大和缩小的问题的 上面的是const Date * 我指向的内容我都改变不了...这意味着你可以在不创建外部类对象的情况下创建内部类对象: ```C++ Outer::Inner innerObj; // 创建内部类对象,而不需要外部类对象 但在某些设计中,内部类可能需要一个外部类对象来操作外部类的成员...这种对象通常被立即使用,并且不需要在变量中保存引用。匿名对象通常用于简化代码结构,特别是在需要临时对象但不需要它们长期存在或复用的情况下。...如果多个地方需要使用相同的对象,建议使用具名对象。 8.对象拷⻉时的编译器优化 •现代编译器会为了尽可能提⾼程序的效率,在不影响正确性的情况下会尽可能减少⼀些传参和传返回值的过程中可以省略的拷⻉。
我想你作为用户来说,肯定也是希望一个应用在保证功能的前提下越小越好,所以这种方案没有被采纳。...这种方式在我们看来已经相当不错了,不用再将每个函数的地址都单独存储起来,除了成员变量以外只是多存放了一个地址不过是四个字节而已。但是这种方式在大佬看来还是不够完美,所以还有第三种方法。...默认成员函数 如果类中什么成员也不写,就称之为空类,空类中真的什么都没有吗?其实并不是,任何类在什么都不写的情况下编译器会自动生成六个默认成员函数。...构造函数虽然可以重载,但是无参和全缺省是不能构成重载的,因为在调用的时候这两种函数都可以不传参会产生二义性。...,那就因小失大了,所以最好的办法就是讲运算符重载写在类里面,否则是无法访问到成员变量的: ---- 那么为什么我在写运算符重载的时候只传了一个参数,而且是需要加的天数而不对象呢?
) d2.Print(); } 但是这样代码的可读性会降低,如果我们不希望构造函数中存在隐式类型转换的情况,可以使用explicit关键字禁止构造函数的隐式类型转换。...,但不是类的成员函数 友元函数不能用const修饰 因为友元函数没有this指针,它是一个的类外的函数,不过可以访问类内的成员。...特殊的,我们可以定义一个没有名字的对象——匿名对象。 这种对象的生命周期只有它定义所在的那一行,运行到下一行就会销毁,属于一次性的对象,所以不需要命名。...在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还是非常有用的。...描述该对象具有那 些属性,那些方法,描述完成后就形成了一种新的自定义类型,采用该自定义类型就可以实例化出具体的对象。
: 虽然经过上述构造函数的调用之后,对象中的成员变量已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋值。...道理好像是这样的,但是呢?看这种情况: 我们现在给这个类里面再增加一个const的成员变量。 那这时我们再去运行程序: 哦豁,发生错误了,这么回事? 为什么会这样呢?...但是大家说当前这种方法好吗? 其实是不太好的,为什么?...当然如果是私有的情况下,这样写是不是统统不行啊: 那我们就可以写一个Get方法: 成员函数是需要通过对象去调用的。 这样就可以了。 那如果我们的程序是这样的呢?...那除此之外,在某些传参和传返回值的过程,也会有这样的优化。
的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...在_a2初始化时,_a1是未定义的(即处于未初始化状态),但C++标准并不要求在这种情况下编译器产生错误或警告。...非静态成员函数可以调用类的静态成员函数吗? 可以。静态成员函数属于类本身,而非类的某个特定对象。非静态成员函数则依赖于类的特定实例,所以它们可以在没有任何对象实例的情况下被调用。...Solution().Sum_Solution(10); return 0; } 拷贝对象时的一些编译器优化 在传参和传返回值的过程中,编译器会做一些优化,减少一些对象的拷贝。...描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。
一、深入解析构造函数 如上图,在一般情况下,我们认为A类中的_a1和_a2只不过是声明,并没有开空间,而真正的空间开辟是在【定义】的时候,也就是我们根据这个类实例化出整个对象的时候。...,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...这样虽然可以解决问题,但是也会有另一个问题就是这个count是一个全局变量,也就是说我有可能在写程序的时候会不小心修改它,比如说++了一下 这就很尴尬的了,所以我们希望该变量可以在构造函数里被访问到,...但是不希望他在全局被访问到,,这个诉求要怎么实现呢??...2、函数中返回对象时,尽量返回匿名对象 3、在条件允许的情况下,用传引用返回,避免拷贝返回值带来的损耗。 七、类和对象思想的转变 现实生活中的实体计算机并不认识,计算机只认识二进制格式的数据。
内部类的使用方式实际上总共包括:成员内部类, 方法局部类,匿名内部类,下面,我就给大家来一一介绍: 为什么要使用内部类 有的时候你可能有这样一种需求:对一个类(假设它为MyClass.java)创建一个和它相关的类...(假设它是Part.java),但因为Part.java和MyClass之间的联系“紧密”且“单一”,导致我们在这种情况下,不希望像下面这样增加一个额外的兄弟类 ├─MyClass └─Part...,内部类内声明的数据会覆盖外部类的同名数据。...final修饰 这里要注意一点, 局部类所使用的外部类方法的形参必须用final修饰,否则会编译不通过,也就是说传入后不许改变 为什么这个方法形参一定要用final修饰? ...(基本类型数据拷贝副本,对象等则拷贝引用) OK,现在的情况是: 方法内的局部类对data拷贝了两次:外部方法outterPrint值传递时的拷贝,和LocalInner构造函数的拷贝 方法内除了局部类外的作用域只拷贝了
2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...代码中需要给按钮设置监听器对象,使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,但是前提是这个父类或者接口必须先存在才能这样使用。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非...从前面可以知道,静态内部类是不依赖于外部类的,也就说可以在不创建外部类对象的情况下创建内部类的对象。...三.内部类的使用场景和好处 为什么在Java中需要内部类?
这个我是不建议使用,因为 一是有被回收的危险,导致值为空,二是会有值需要清理的问题。 什么意思呢?这个说来话长 ,简单来说 是因为静态变量和类一样都是在进程加载的时候被加载,在进程结束的时候被结束。...,内部使用二分法对key进行排序,所以在添加、删除、查找数据的时候,都会使用二分法查找,只适合于小数据量操作,如果在数据量比较大的情况下,那么它的性能将退化。...因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用...非静态内部类会隐式持有外部类的引用,就像大家经常将自定义的adapter在Activity类里,然后在adapter类里面是可以随意调用外部activity的方法的。...当你将内部类定义为static时,你就调用不了外部类的实例方法了,因为这时候静态内部类是不持有外部类的引用的。声明ViewHolder静态内部类,可以将ViewHolder和外部类解引用。
成员内部类还可以通过"外部类.this.xxx"的方式引用外部类的实例变量和方法,如Outer.this.action(),这种写法一般在重名的情况下使用,没有重名的话,"外部类.this."...test中,方法内部类只能在定义的方法内被使用。...方法内部类可以访问方法中的参数和局部变量,这是通过在构造方法中传递参数来实现的,如OuterInner构造方法中有参数int param,在新建OuterInner对象时,Outer类将方法中的参数传递给了内部类...使用场景 方法内部类都可以用成员内部类代替,至于方法参数,也可以作为参数传递给成员内部类。不过,如果类只在某个方法内被使用,使用方法内部类,可以实现更好的封装。...此外,new时的参数2和3也传递给了构造方法,内部类构造方法又将它们传递给了父类构造方法。 使用场景 匿名内部类能做的,方法内部类都能做。
Kotlin 里面,代码末尾的分号省略不写,就像这样: var price = 100 // 默认推导类型为: Int 另外,由于 Kotlin 支持类型推导,大部分情况下,我们的变量类型可以省略不写,...如果我写这样的代码: val i: Double = null // 编译器报错 以上的代码并不能通过 Kotlin 编译。...$StaticInnerClass 不持有外部类的引用。 Java 当中的嵌套类,默认情况下,没有 static关键字 时,它就是一个内部类,这样的内部类是会持有外部类的引用的。...Kotlin 则恰好相反,在默认情况下,嵌套类变成了静态内部类,而这种情况下的嵌套类是不会持有外部类引用的。只有当我们真正需要访问外部类成员的时候,我们才会加上 inner 关键字。...Kotlin对此并没有进行限制,但是通常不建议在Lambda 表达式中编写太长的代码,否则可能会影响代码的可读性。 Lambda也可以理解为是匿名函数的简写。
,在平常的写代码过程中,我还是建议大家去写这种构造函数,因为这种构造函数满足的场景更加多样,不传值也可以,传值当然也可以。..._day; } 这种就是我们的拷贝构造函数,其实就是传一个对象的别名,然后将这个对象的值赋给另一个对象,这就叫拷贝构造。...const引用或const指针可以绑定到const对象,从而避免对const对象的直接修改。 避免权限放大的方法是在调用const对象时,使用const引用或const指针。...静态全局变量:限制了该变量的作用域仅在当前文件内可见,避免了命名冲突。...B就可以访问A中的私有成员,但是A不可以访问B的私有, 也就是A把B当成朋友了,但是不能说明B把A当成朋友 七、内部类 内部类其实就是在一个类中再去定义一个类: 内部类,内部类是外部类的私有 在一个类中
局部内部类 局部内部类,是指内部类定义在方法和作用域内。...Thinking in Java给了这么两个例子: 定义在方法内: public class Parcel4 { public Destination destination...,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。...,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。 ...,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是
问题:为什么我们不研究多进程并发,而是研究多线程并发呢??...如果我们主线程要传类对象给次线程,就必须在堆区开辟空间,这样虽然td指针被释放了,但是我们可以通过args把这个指针传递给线程,这样每个线程就可以去访问自己在堆中的对象了!...问题:可是我们为什么不直接在线程里去写这个参数,而是要让主线程通过类传递过去呢??...我只是想让你管理我,不是想让你当甩手掌柜然后自己啥代码也不执行,而且我要是自己退了,你就搁那傻傻循环啥也不管吗??你难道不关心我的运行结果吗??你难道不需要释放我的空间吗??...——>所以你平时写代码在不同的环境下没有感觉,是写库文件的设计者帮助你把这种差异给屏蔽掉了!! 所以我们平时刚推荐使用语言里的库方法而非系统调用接口,因为这样代码就不具备可移植性和跨平台性了!!
所以这个方法的缺点就是有可能会造成资源浪费,在我没用到这个单例的时候就对单例进行了实例化。...静态内部类是延时加载的,意思就是说只有在明确用到内部类时才加载。只使用外部类时不加载。...所以就变成了当调用getSingleton方法的时候才会去初始化这个静态内部类,也就是才会实例化静态单例。 如此一整,这种方法就完美了...吗?...如果不用动态传参数,那么这个方法已经足够了。 可以传参的单例 —— 懒汉 如果需要传参数呢?...简单的说,就是在不影响最终结果的情况下,一些指令顺序可能会被打乱。
局部内部类 局部内部类,是指内部类定义在方法和作用域内。...Thinking in Java给了这么两个例子: 定义在方法内: public class Parcel4 { public Destination destination(String...,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。...,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。 ...,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是
领取专属 10元无门槛券
手把手带您无忧上云