java基础系列(七)

发布于:2022-12-21 ⋅ 阅读:(335) ⋅ 点赞:(0)

1.前言

        前面我们讲到了多态,现在在对多态补充一个小细节:

         当我们进行一个向上转型时,该父类引用所指向的属性却是自己编译类型的属性,这点要牢记!

        然后,对于向上,向下转型,我们还有一个重要的操作符没有介绍,那就是instanceof,比较操作符,其用于判断对象的运行类型是否为某一个类型,或某一类型的子类。        

2、类变量

        所谓的类变量便是用static修饰的静态变量,基本语法为:static 数据类型 变量名;如:

        

        类变量不仅可以在创建对象后使用,也可以不用创建类对象而直接使用,语法为:

        类名.变量名,类变量最大的特点是该变量值的修改,是对所有的类的对象生效的。:

3.类方法

        类方法和类变量类似,就是静态方法,该方法也是用static修饰的,语法为:

        修饰符 static 返回值 方法名(参数){};与类变量一样,类方法的调用不仅可以在创建对象后使用,也可以直接使用类名来调用。     

        看到这里,大家也许会有疑问,为什么类变量、类方法不用创建对象使用类名就可以调用了呢?这里就要提一下class类了,先阶段我们还不用知道class类是什么,只需要了解到,类方法和类变量是随着类的加载而一起加载的,简单的说,我们创建一个类的时候,这些方法和变量就已经存在了。

4.使用范围

        类方法和类变量都有的使用范围,普通方法可以访问普通变量,调用普通方法、静态变量、静态方法。但是对于静态方法而言,静态方法只能访问静态变量和调用静态方法。        

         有人会问,那我就想在静态方法中访问普通方法或者普通变量该怎么办呢?方法很简单,只需要创建类对象,在从类对象去调用就可以了。

        

5.代码块       

         5.1、普通代码块

        我们先来讲解普通代码块,我们知道,在我们创建一个类对象时,首先要调用构造器完成实例化的过程,但是如果你有某些需求需要在构造器调用之前实现,那么我们可以使用代码块,代码块的优先级高于构造器:
        

        如图,我们想在初始化属性时,先打上一些提示语,但是我们发现,如果给多个构造器都写上一样的语句会显得代码十分的臃肿,那么代码块就很好的帮助我们解决了这个问题:

         这样,我们在调用构造器前就会将三句话输出。那么代码块什么时候会被调用呢?类加载的时候,而造成类加载主要有以下三种情况:       

         对于普通代码块而言,只要类加载一次,代码块就会调用一次!!!!

        5.2、静态代码块

        静态代码块的用法与普通代码块差不多,但是要注意几个不同点。

        1、静态代码块只会被调用一次,之后无论实例化了几个对象都不会在加载。             2.与类变量、类方法一样,不能调用普通属性和方法

                

        3.加载存在优先级问题       

         我们可以看到,优先输出的是写在前面的静态方法的内容。反之,则不一样了。

         对于普通代码块,这个规则也是一样的,而且要注意到,静态代码块的优先级是大于普通类型的。原因是静态是随着类加载而加载的,类的加载即class类加载是在底层完成的自然比我们手动的new要优先。

        

         并且,构造器的优先级是最低的!!!!

         同时,我们说到,使用构造器之前是会调用代码块的,但是我们在构造器里却没有看见任何调用语句,这个和我们之前说的super()方法调用父类构造器是一样的,都隐藏起来了。

 

6.结语

        今天的内容就到这里了,明天我们将介绍设计模式 。