2023年12月

css content 属性有很多实用的用法,这其中最为强大的莫过于是计数器了,它甚至可以实现连 javascript 都不能够实现的效果,下面我们一起来研究一下吧。

css 计数器主要有 3 个关键点需要掌握。如下:

首先需要一个计数器的名字,这个名字由使用者自己定义。
计数器有一个计数规则,比如是 1,2,3,4...这样的递增方式,还是 1,2,1,2...这样的连续递增方式。
计数器的使用,即定义好了一个计数器名字和计数规则,我们就需要去使用它。
以上 3 个关键点分别对应的就是 css 计数器的 counter-reset 属性,counter-increment 属性,和 counter()/counters()方法。下面我们依次来介绍这三个玩意儿。

counter-reset 属性
counter-reset 属性叫做计数器重置,对应的就是创建一个计数器名字,如果可以,顺便也可以告诉计数器的计数起始值,也就是从哪个值开始计数,默认值是 0,注意是 0,而不是 1。例如以下一个示例:

html 代码如下:

<p>开始计数,计数器名叫counter</p>
<p class="counter"></p>
css 代码如下:

.counter {
  counter-reset: counter;
}

.counter::before {
  content: counter(counter);
}

1.反射

在常规便携java代码的过程中,都是通过new对象,然后在访问该对象的方法和属性。当我们想在==运行期才能指定具体对象的类型==时,普通的编码方式将无法实现需求,这时便需要用到反射。反射在框架中应用广泛,因为框架面对的是通用的应用场景,无法事先预知具体的对象类型。

普通的运行时期对象类型,在类加载器,就会打开和检查class文件。执行类的加载,验证,准备,解析,初始化五个步骤,将class对象存储到堆栈,方便后期直接使用。反射的方式在类加载器没有做任何事情,而是将这一过程延迟到了运行期。

2.泛型

早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题 ,这样程序并不安全。

针对List、Set、Map等集合类型,它们对存储的元素类型是没有任何限制的。假如向List中存储Dog类型的对象,但是有人把Cat对象也存储到 这个List中了,那么在编译上是没有任何语法错误的。

所有使用该泛型参数的地方都被统一化,保证类型一致。如果未指定具体类型,默认是Object类型。集合体系中的所有类都增加了泛型,泛型也主要用在集合。