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类型。集合体系中的所有类都增加了泛型,泛型也主要用在集合。

Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JavaScript程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。

在纯命令式编程时代,Sun公司创造了Java和标准库,但一直以来Sun都没有为Java提供一款好用的IDE。在这样的局面下,IBM适时地推出了一款名为Eclipse的IDE,成为对抗Sun公司的利器。

近十几年来,Eclipse凭借着开源和可扩展平台(OSGi),战胜了一个又一个对手(JBuilder、NetBeans等),奠定了Java标准开发环境的地位。然而,就像所有成功的产品一样,Eclipse一路荣光走来的同时也遇到了一系列的问题。所谓船大调头难,近年来,在JetBrains公司一系列产品的冲击下,Eclipse的市场份额正在慢慢下降。

作为目前广受欢迎的IDE提供商,JetBrains向开发者提供主流的软件开发环境:IntelliJ IDEA、WebStorm、PyCharm等,这些IDE几乎覆盖了目前主流的编程语言。