引言 我是@程序员小助手 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类。
) d2.Print(); } 但是这样代码的可读性会降低,如果我们不希望构造函数中存在隐式类型转换的情况,可以使用explicit关键字禁止构造函数的隐式类型转换。...,但不是类的成员函数 友元函数不能用const修饰 因为友元函数没有this指针,它是一个的类外的函数,不过可以访问类内的成员。...特殊的,我们可以定义一个没有名字的对象——匿名对象。 这种对象的生命周期只有它定义所在的那一行,运行到下一行就会销毁,属于一次性的对象,所以不需要命名。...在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还是非常有用的。...描述该对象具有那 些属性,那些方法,描述完成后就形成了一种新的自定义类型,采用该自定义类型就可以实例化出具体的对象。
我想你作为用户来说,肯定也是希望一个应用在保证功能的前提下越小越好,所以这种方案没有被采纳。...这种方式在我们看来已经相当不错了,不用再将每个函数的地址都单独存储起来,除了成员变量以外只是多存放了一个地址不过是四个字节而已。但是这种方式在大佬看来还是不够完美,所以还有第三种方法。...默认成员函数 如果类中什么成员也不写,就称之为空类,空类中真的什么都没有吗?其实并不是,任何类在什么都不写的情况下编译器会自动生成六个默认成员函数。...构造函数虽然可以重载,但是无参和全缺省是不能构成重载的,因为在调用的时候这两种函数都可以不传参会产生二义性。...,那就因小失大了,所以最好的办法就是讲运算符重载写在类里面,否则是无法访问到成员变量的: ---- 那么为什么我在写运算符重载的时候只传了一个参数,而且是需要加的天数而不对象呢?
: 虽然经过上述构造函数的调用之后,对象中的成员变量已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋值。...道理好像是这样的,但是呢?看这种情况: 我们现在给这个类里面再增加一个const的成员变量。 那这时我们再去运行程序: 哦豁,发生错误了,这么回事? 为什么会这样呢?...但是大家说当前这种方法好吗? 其实是不太好的,为什么?...当然如果是私有的情况下,这样写是不是统统不行啊: 那我们就可以写一个Get方法: 成员函数是需要通过对象去调用的。 这样就可以了。 那如果我们的程序是这样的呢?...那除此之外,在某些传参和传返回值的过程,也会有这样的优化。
一、深入解析构造函数 如上图,在一般情况下,我们认为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中需要内部类?
成员内部类还可以通过"外部类.this.xxx"的方式引用外部类的实例变量和方法,如Outer.this.action(),这种写法一般在重名的情况下使用,没有重名的话,"外部类.this."...test中,方法内部类只能在定义的方法内被使用。...方法内部类可以访问方法中的参数和局部变量,这是通过在构造方法中传递参数来实现的,如OuterInner构造方法中有参数int param,在新建OuterInner对象时,Outer类将方法中的参数传递给了内部类...使用场景 方法内部类都可以用成员内部类代替,至于方法参数,也可以作为参数传递给成员内部类。不过,如果类只在某个方法内被使用,使用方法内部类,可以实现更好的封装。...此外,new时的参数2和3也传递给了构造方法,内部类构造方法又将它们传递给了父类构造方法。 使用场景 匿名内部类能做的,方法内部类都能做。
这个我是不建议使用,因为 一是有被回收的危险,导致值为空,二是会有值需要清理的问题。 什么意思呢?这个说来话长 ,简单来说 是因为静态变量和类一样都是在进程加载的时候被加载,在进程结束的时候被结束。...,内部使用二分法对key进行排序,所以在添加、删除、查找数据的时候,都会使用二分法查找,只适合于小数据量操作,如果在数据量比较大的情况下,那么它的性能将退化。...因为使用Bundle的场景大多数为小数据量,我没见过在两个Activity之间传递10个以上数据的场景,所以相比之下,在这种情况下使用ArrayMap保存数据,在操作速度和内存占用上都具有优势,因此使用...非静态内部类会隐式持有外部类的引用,就像大家经常将自定义的adapter在Activity类里,然后在adapter类里面是可以随意调用外部activity的方法的。...当你将内部类定义为static时,你就调用不了外部类的实例方法了,因为这时候静态内部类是不持有外部类的引用的。声明ViewHolder静态内部类,可以将ViewHolder和外部类解引用。
Kotlin 里面,代码末尾的分号省略不写,就像这样: var price = 100 // 默认推导类型为: Int 另外,由于 Kotlin 支持类型推导,大部分情况下,我们的变量类型可以省略不写,...如果我写这样的代码: val i: Double = null // 编译器报错 以上的代码并不能通过 Kotlin 编译。...$StaticInnerClass 不持有外部类的引用。 Java 当中的嵌套类,默认情况下,没有 static关键字 时,它就是一个内部类,这样的内部类是会持有外部类的引用的。...Kotlin 则恰好相反,在默认情况下,嵌套类变成了静态内部类,而这种情况下的嵌套类是不会持有外部类引用的。只有当我们真正需要访问外部类成员的时候,我们才会加上 inner 关键字。...Kotlin对此并没有进行限制,但是通常不建议在Lambda 表达式中编写太长的代码,否则可能会影响代码的可读性。 Lambda也可以理解为是匿名函数的简写。
局部内部类 局部内部类,是指内部类定义在方法和作用域内。...Thinking in Java给了这么两个例子: 定义在方法内: public class Parcel4 { public Destination destination...,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。...,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。 ...,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是
所以这个方法的缺点就是有可能会造成资源浪费,在我没用到这个单例的时候就对单例进行了实例化。...静态内部类是延时加载的,意思就是说只有在明确用到内部类时才加载。只使用外部类时不加载。...所以就变成了当调用getSingleton方法的时候才会去初始化这个静态内部类,也就是才会实例化静态单例。 如此一整,这种方法就完美了...吗?...如果不用动态传参数,那么这个方法已经足够了。 可以传参的单例 —— 懒汉 如果需要传参数呢?...简单的说,就是在不影响最终结果的情况下,一些指令顺序可能会被打乱。
局部内部类 局部内部类,是指内部类定义在方法和作用域内。...Thinking in Java给了这么两个例子: 定义在方法内: public class Parcel4 { public Destination destination(String...,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。...,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。 ...,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是
而通常的内部类需要在外部类实例化后才能实例化。 三、Servlet执行时一般实现哪几个方法?...(断言) assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。...还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。 断言可以用于验证传递给私有方法的参数。...不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。 不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。...而后可在同一session范围内用getAttribute(“student”)取出该属性,得到student对象。 六、GC是什么?为什么要用它?
说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类。 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类。...} } 不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。...局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非 static 成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非...从前面可以知道,静态内部类是不依赖于外部类的,也就说可以在不创建外部类对象的情况下创建内部类的对象。
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。 Java中构造函数重载和方法重载很相似。...(单一职责原则想表达的就是"高内聚",写代码最终极的原则只有六个字"高内聚、低耦合",所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚的原则...如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句。 Java的接口和C++的虚类的相同和不同处。...当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。...一个对象被当作参数传递给一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递(这里说的值是引用的值)。Java 编程语言只有值传递参数。
另外当有一些三方库需要传Context的时候,需要慎重选择传入的Context的生命周期,原则就是取短不取长。...先说为什么只有匿名内部类的Handler和具名Handler的handleMessage方法里面持有外部引用的时候才会导致内存泄漏,因为这两种情况Handler都持有外部类引用,常见的是一个Activity...所以这里可以联想到为什么我们在处理AsyncTask的内存泄漏的时候,有一种处理方式是使用静态内部类的方式。 3、Kotlin的object为什么会导致内存泄漏?...这种情况下,如果一个Activity退出页面了,但是没有调用unRegister,还被Eventbus持有,就会导致Activity无法回收。...5、碰到内存泄漏如何处理 可以把上面内存泄漏的几种情况大概分为三类 static类导致的内存泄漏,在不使用的时候把要回收的引用和static对象断开,如果是三方sdk看看有没有默认的断开方法,如果是自己写的
//这就是为什么前文提到的只有先创建外部类实例才能创建成员内部类实例、成员内部类可以随意访问外部类的成员变量和方法。...与成员内部类不同的是,当且仅当局部内部类出现在非静态的环境(如非静态方法)中时,才会拥有对外部类实例的引用。当出现在静态环境中,内部类实例没有对外部类实例的引用,也不拥有外围类任何静态成员。 ...以这种方式使用匿名类时,每次执行方法都会新建一个实例,如果被频繁的调用,效率会很低。...方法内,当startThread方法执行结束后,这两个变量的生命周期就结束了,但另外一个线程中的run方法很可能还没有结束,再去访问paramStr和str变量是不可能的。 ...2、假设内部类在一个方法的内部,在方法之外不需要使用,如果只需要在一个地方创建实例且已经有了一个预置的类型可以说明这个类的特征,就要把它做成匿名内部类,否则选择局部内部类。
领取专属 10元无门槛券
手把手带您无忧上云