韩顺平
快来分享你的内容吧~
- 2023-04-12今天的笔记记得有点多,也有些思考,想配点代码图片发博客,但还是太懒了,现在就发些文字吧 代码块: 代码化块又称为初始化块,属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过大括号围起来。但和方法不同,没有方法名没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。 1)相当于另外一种形式的构造器(对构造器的补充机制),可以做初始查看全文鱼友6191:大部分是韩老师PPT里的笔记,按自己觉得重要的摘抄了一遍,加上自己的理解~,有误之处,希望大家多多指正1540分享
这是韩顺平VIP课程的全部,之前一直在星球看到小伙伴找这个资源,是通过资源许愿墙拿到的,有需要的小伙伴可以自己下载,应该是完整的。 链接:https://pan.baidu.com/s/1E_tQmzuWp16J2oQw2ZJR1Q?pwd=a1lm 提取码:a1lm --来自百度网盘超级会员V6的分享 #资源#
球友们,之前在星球拿到的韩顺平视频,请问谁有第五阶段以后的嘛?能否分享[玫瑰] 资源
笔记
<html> <head></head> <body> <div class="content ql-editor"> <p>今天的笔记记得有点多,也有些思考,想配点代码图片发博客,但还是太懒了,现在就发些文字吧</p> <p><br></p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">代码块:</strong></h3> <p><br></p> <p>代码化块又称为初始化块,属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过大括号围起来。但和方法不同,没有方法名没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。</p> <p>1)相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作</p> <p>2)场景: 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用</p> <p><strong>static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块, 每创建一个对象,就执行。如果只是使用类的静态成员时,普通代码块并不会执行</strong></p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">补充:类什么时候被加载 </strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span><strong>创建对象实例时</strong></li> <li data-list="ordered"><span class="ql-ui"></span><strong>创建子类对象实例,父类也会被加载</strong></li> <li data-list="ordered"><span class="ql-ui"></span><strong>使用类的静态成员时(静态属性,静态方法)</strong></li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">创建一个对象时,在一个类中调用的顺序是:</strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>调用静态代码块和静态属性初始化(静态代码块和静态属性<strong>初始化</strong>优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用。</li> <li data-list="ordered"><span class="ql-ui"></span>调用普通代码块和普通属性初始化(普通代码块和普通属性<strong>初始化</strong>优先级一样,如果有多个普通代码块和多个普通变量初始化,则按他们定义的顺序调用。</li> <li data-list="ordered"><span class="ql-ui"></span>调用构造方法</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">如果是创建一个子类对象是,综合的顺序如下:</strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>父类的静态代码块和静态属性(优先级一样,按定义顺序执行)</li> <li data-list="ordered"><span class="ql-ui"></span>子类的静态代码块和静态属性(优先级一样,按定义顺序执行)</li> <li data-list="ordered"><span class="ql-ui"></span>父类的普通代码块和普属性初始化(优先级一样,按定义顺序执行)</li> <li data-list="ordered"><span class="ql-ui"></span>父类的构造方法</li> <li data-list="ordered"><span class="ql-ui"></span>子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)</li> <li data-list="ordered"><span class="ql-ui"></span>子类的构造方法</li> </ol> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">个人理解:</strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>new一个对象时,先是进行类的加载。而类的加载就有静态代码块的初始化和静态变量初始化。(方法只有被调用时才会加载,这个不在讨论内)。所以子类的静态成员初始化能在父类普通成员前面。</li> <li data-list="ordered"><span class="ql-ui"></span>类加载完后才是实例的创建,而这就是普通代码块初始化和普通变量的初始化。遵循父类在子类前面的原则,先是父类普通成员的默认初始化,显示初始化,最后是构造器初始化。这个我理解是成员变量有默认值,但我们创建对象时用到构造器,本来就是想用构造器里我们传进来的值,所以设计上就是最后构造器初始化,将传进来的值对默认的值进行覆盖操作。</li> <li data-list="ordered"><span class="ql-ui"></span>父类构造器初始化完成后,就轮到子类,默认初始化,显示初始化,构造器初始化。(这个是不是也有点像构造器初始化在默认初始化后面,子类同名的变量和重写的方法会对父类进行......类似的覆盖效果,虽然通过super关键字还是能访问到父类的同名成员,但真要是用到了变量和方法,只能是从最后一层的子类开始查起(一般情况,这里就不讨论属性是绑定编译类型类的了),也有点......覆盖的意思了吧。</li> <li data-list="ordered"><span class="ql-ui"></span>至于静态代码块和静态变量只能调用静态的成员,到这里也有了解释,因为静态成员加载是在普通成员加载的前面,静态成员里调用普通成员时,普通成员有可能还没被加载出来,这样子当然就不行啦</li> </ol> <p><br></p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">单例模式-饿汉式:</strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>构造器私有化 (防止外部直接 new</li> <li data-list="ordered"><span class="ql-ui"></span>在类的内部直接创建static对象</li> <li data-list="ordered"><span class="ql-ui"></span>提供一个公共的static方法,返回对象</li> </ol> <p></p> <p><br></p> <p>理解:有些时候,类只需要一个实例就可以运行,多的反而影响性能或者没必要。这时候私有化构造器,就能禁止在外部实例化。同时只在内部实例化一个对象,用static方法返回。外部想调用类的实例就只有通过这个方法拿到实例。在其他属性和方法也加上static,这样在外面处于方便,可以不用拿到对象,直接 类名.方法名/属性名 直接获取数据或调用方法</p> <p><br></p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">单例模式-懒汉式:</strong></h3> <p><br></p> <ol> <li data-list="ordered"><span class="ql-ui"></span>构造器私有化 (防止外部直接 new</li> <li data-list="ordered"><span class="ql-ui"></span>在类的内部声明对象,不 new</li> <li data-list="ordered"><span class="ql-ui"></span>提供一个公共的static方法,判断对象是否为空,是的话就new一个对象。然后在方法最后返回对象。</li> </ol> <p><br></p> <p><br></p> <p><strong style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">饿汉式和懒汉式区别</strong><span style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">:饿汉式是不管外部是否调用实例,都会先创建好一个实例化对象,缺点是可能造成资源浪费。懒汉式是外部调用对象才会创建,缺点是会有线程安全问题</span></p> </div> </body> </html>
