7. JavaSE-构造函数 & this & static关键字

构造函数:

    1. 函数名和类名相同,不用定义返回值类型、没有具体的返回值

    2. 其实就是在创建对象时调用的函数,创建对象都必须经过构造函数初始化

    3. 当使用自定义构造函数的时候,必须在写一个默认的构造函数


构造函数和普通函数区别:

    1. 构造函数是在对象创建时进行调用,对对象进行初始化

    2. 普通函数是在对象创建后,需要该函数时才进行调用

    3. 构造函数仅在对象创建时调用一次

    4. 普通函数可以重复的调用

    5. 构造函数可以调用普通函数,而普通函数不能调用构造函数

    6. 构造函数可以写return, 但是注意不要写return value




什么时候使用构造函数:

    在描述事物时,该事物一存在就具备了一些内容,这些内容都定义在构造函数中


构造函数重载:

    和普通函数重载同,即函数的参数个数或者类型不同,函数名完全相同


重写:

    函数名和参数个数及类型完全相同,具体实现内容不同



this关键字:

    1. 当成员变量和局部变量重名,可以使用this关键字来区分

    2. 本质上:this就代表对象(当前对象),即this就是所在函数所属对象的引用

       简单而言,就是哪个对象调用this所在的函数,this就代表哪个对象

    3. this关键字也用于在构造函数中调用其他的构造函数

        注意:只能定义在构造函数的第一行,因为初始化动作要先执行 

 

Static关键字:

    1. 数据被static修饰之后,数据将保存在堆内存中。

    2. 在类中,所有对象共享的数据,一般初始化为静态数据

    3. 静态数据在对象实例化之前就已经初始化在堆内存里面了。即随着类的加载而初始化

    4. Static修饰的成员被所有对象共享

    5. Static优先于对象存在,因为static的成员随着类的加载就已经存在了

    6. Static修饰的成员可以被对象调用,也可以被类名直接调用(类名.静态成员)

    7. Static修饰的数据是共享数据,对象中存储的是特有数据

 

成员变量&实例变量&静态变量:

    1. 成员变量也叫做实例变量;静态变量也叫做类变量

    2. 成员变量随着对象的存在而存在,随着对象的消亡而消亡;

    3. 静态变量随着类的加载而存在,随着类的消失而消失

    4. 成员变量只能被对象调用,静态变量既可以被对象调用也可以被类调用(强烈不推荐

       使用对象调用,因为静态成员先于对象存在)

    5. 成员变量数据存储在堆内存的对象中,因此也叫做对象的特有数据

    6. 静态变量数据存储在共享数据区,所以也叫对象的共享数据。

 

内存分类:本地方法区、寄存器、共享数据区(方法区)、堆、栈

 

静态方法只能访问静态成员(成员变量和成员方法),非静态方法既可以访问静态成员也能访问非静态

 

静态方法中不可以使用this或者super关键字,因为静态方法是由类名调用的,不依赖于对象,因此不能使用this,而构造方法是非静态的,因此不能使用super关键字

 

主函数:

    1. 主函数是静态的

    2. 主函数特殊之处:格式固定、被jvm虚拟机所识别和调用

    3. 主函数是public,权限必须是最大的

    4. 主函数必须是static,因为主函数不需要由对象来调用

    4. 主函数必须是void,没有具体的返回值

    5. Main:函数名,不是关键字,只是一个jvm识别的固定的名字

    6. String[] args:args是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。

 

什么时候使用static修饰符?

    1. 静态变量:当分析对象中所具备的值都是相同的,则这个成员就可以被静态修饰。只要数据在

       对象中是不同的,就是对象的特有数据,必须存储在对象中,是非静态的;如果是相同的数据,

       对象不需要修改,只需要使用即可,不需要存储在对象中,定义成静态的。

    2. 静态函数:函数是否用静态修饰,只参考一点,该函数功能是否有访问到对象的特有数据。简

       单点说,从源代码看,该功能是否需要访问非静态成员,如果需要,该功能就是非静态的;如

       果不需要,就可以将该功能定义成静态的,当然,也可以定义成非静态,但是非静态需要被对

       象调用,而仅创建对象访问非静态方法没有访问特有数据的方法,该对象的创建时没有意义的。

 

静态代码块:

    1. 随着类的加载而执行,而且只执行一次(注意:类只加载一次,即使执行两次创建对象,也不会

       执行两次,因为只加载一次)

    2. 作用:用于给类进行初始化

    3. 例如

        class StaticCode

        {

            static int age = 0;

            static {

                age = age + 20;

             }

            static void show()

            {

                System.out.println(age);

            }

        }

        class StaticCodeDemo

        {

            public static void main(String[] args) 

            {

                StaticCode.show();

            }

        }

    静态代码块使用比较少,一般在类中全是静态成员的时候可能会需要静态代码块

 

构造代码块:

    1. 定义在类中没有被static修饰的代码块,即为构造代码块

    2. 与静态代码块不同,构造代码块可以给所有对象进行初始化,每次创建对象都会执行,在调用构造方法之前执行;注意与构造方法的差别,构造方法是用来给对应的对象进行针对性的初始化。

 

局部代码块:

    1. 定义在方法中

    2. 用于限定局部变量的生命周期


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章