OOP-20年秋第四周

本文介绍了Java中的类构造函数,强调子类构造时需调用父类构造器的原因。讨论了静态构造函数(clinit)的特性、调用时机及其与类加载的关系。探讨了声明类的目的,包括作为模板和命名空间。同时,文章深入讲解了函数式编程、栈溢出问题、Lambda表达式、枚举的用途和实现原理,并分析了HashSet和TreeSet的添加元素过程以及Comparable和Comparator的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 第四周

  1. 子类构造函数时要调用父类的构造函数
    –why?
    –待答
  2. clinit(class init)
    –这个是static的构造函数!
    在这里插入图片描述

在这里插入图片描述

–对比一下 图二没有 load_0就是因为不需要用法this
–静态构造函数只有一个 无名字也无法重载
–而调用最后的是靠顺序
3. 静态构造函数什么时候调用?
–例子一:main里面调用两次构造函数
在这里插入图片描述

–为什么static在前面?
在这里插入图片描述

–这是因为jvm在加载类定义,创建类对象(这个类的class的对象)的时候就会加载static的构造函数
–如果使用一个Class.forname(“demo”)
–此时已经加载了类定义,会直接用静态构造
–此外,static也不是永世长存,如果被gc了,就是这个类class的对象被gc,就可能再一次静态构造
在这里插入图片描述

–如果直接another d1就会发现不行(another static没出现)说明没有加载类定义,而引用是无所谓的
4. 为什么要声明一个类?
–模板 or 命名空间(system)
–①:Imperative
----命令式 所有的和你讲的清清楚楚
–②:函数式编程 比如java.* form java
----把这句理解成函数式的就可以 直指目标
–③:逻辑式编程()
5.
在这里插入图片描述

–栈溢出!!
–这样调,是个无休止的运动
–statck frame(10013)把stack area弄爆了
在这里插入图片描述

在这里插入图片描述
–为什么变成了9579?
–因为frame变大了
6. 函数式编程(函数式接口)
[在这里插入图片描述
在这里插入图片描述

–lamda表达式
在这里插入图片描述

  1. 变长的参数列表
    在这里插入图片描述

–ints居然是个数组!()
8. import只是告诉你他是什么,不能让你访问
在这里插入图片描述

–‘你说你是哪个包,你就是哪个包’
–别人拿到就说自己说a.b.c 就破防了!233
9. runtime.package
–都叫a.b.c的包 在不同的类加载器加载的就不是一个包(runtime.package)
–在不同类加载器加载的同一个类不是一个类
–回到3中,除了gc,在不同runtime.package的包里面加载了类定义就可以多次使用static的构造函数
10. 为什么需要枚举?
-枚举在java里面意味着什么?
EAST = 1(2,3,4…)
在这里插入图片描述

–如果输入5就不能这么写了,就很烂
10.1
如果用enum
在这里插入图片描述

–控制了不能输入5
–用对象来enum
11.
–可以发现enum是成员变量(还是个对象)
-在域里面
在这里插入图片描述

在这里插入图片描述

–枚举就是帮你做了上述代码的事情
–建立了你要的static且final的对象
–由3知道static的东西在静态构造函数里面执行,而你enum的要求也是static的所以也在静态构造函数里面
–enum就是标准的 多例模式
13. 在enum里面的时候要加参数,记得构造函数也要同步加个参数~
14. 可以对每个枚举值有特殊的方法~
在这里插入图片描述

–特殊方法存在$1($2)等里面,是一个内部类
15. Enum(这里是指类Enum)会有一些函数会被继承下来
16.补充

  1. HashSet添加一个新元素后,会经历哪几个步骤,为什么要有这些步骤?

计算hash值,如果hash值为最新(无重复)加入一个新的bucket中,如果有重复,进入一个hash值完全一样的bucket,然后与bucket中每个元素进行equals比较,如果一样则不加入
原因:set不可以重复!而利用hash可以有效的减少时间复杂度,因为每一次都equals实在是太复杂,这样大部分是O(1),就算重复也只是在bucket里面进行小范围的equals。

  1. TreeSet有什么作用,添加元素时要经历哪些步骤,为什么要有这些步骤?

作用?不清楚,也是一个set?
进行compare,要分大小,老师说类似二分数大的走右,小的走左(事实上是红黑树)
和hashset一样快速分辨是否重复,避免使用equals太复杂

  1. Comparable和Comparator的各自用法和区别。

comparable是内部方法
comparator是外部方法
comparable写完可以直接arrays.sort
comparator不改变我们的对象(类定义)很安全

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值