Java:类与对象(2)

  构造函数特性:

  • 函数名与类名相同。
  • 无返回值。
  • 编译器自动调用对应的构造函数。
  • 构造函数可以重载。

            构造函数的作用:针对性初始化
        语法格式:权限修饰符 类名(参数列表) {
                    函数体
                    return;
                 }
        任何一个类 在没有明确定义构造函数的时候 它会有一个默认无参的构造函数
        (一旦定义任何一个构造函数 那么默认无参构造函数就会消失 建议写出无参构造函数)
        构造函数在创建对象的时候执行的,并不会在创建对象之后由对象调用
        构造函数没有返回值类型的,但是不代表没有return
            return仅仅表示函数弹栈/结束 如果有返回值则捎带

        构造函数中可以调用成员函数
        但是成员函数不能调用构造函数

        构造函数中可以调用构造函数的(不能进行回调)
            语法格式:this(参数列表) 这句代码必须在第一行
            含义:尽量避免一些重复性的代码 去复用更多参数的构造函数
        */

    static关键字-静态
    静态变量:
        代码:成员变量被static关键字修饰
        含义:是对象之间的共享属性/共享数据
        内存:如果每一个对象种某一个属性是共享的,但是作为成员变量它又是占空间的
            所以把该属性从对象内存中抽取出来,所有对象只需要共用一份即可,静态变量
            抽取出来的属性放到哪里呢?————静态方法区
            方法区:非静态方法区,静态方法区 输入JVM内存中的一部分(堆,栈)
                    主要用于存放编译好的字节码文件
    静态函数
        代码:成员函数被static关键字修饰
        含义:并没有共享的意思,唯一含义就是只要这个成员函数内部不【直接】调用成员变量/函数,就可以定义为静态函数
        内存:在静态方法区中存储的
        静态函数内 是没有this关键字,它不需要区分对象

    静态的内容是优先于对象存在的,也就意味着静态的生命周期是大于对象的
    静态——类成员,可以直接通过类去调用,也可以后续被对象调用

    至此,分析一下Chinese这个类的执行流程
    (1)javac Chinese.java 对源代码进行编译,生成对应的字节码文件 Chinese.class
    (2)java Chinese 执行Chinese.class字节码文件
    (3)先将字节码文件加载进方法区,然后根据静态和非静态进行区分
    (4)根据 java Chinese JVM在静态方法区中 Chinese类中 找主函数 找不到报错 找到则运行
        注意:这个时候并没有Chinese对象的存在(name age也都不存在)
        但是country这个静态变量已经存在了!
    (5)主函数进栈开始执行
        System.out.println(Chinese.country);
            去静态方法区中 找Chinese的字节码 在该字节码中找country静态变量
        Chinese.show();
            去静态方法区中 找Chinese的字节码 在该字节码中找show静态函数
            show()函数进栈 开始执行

    静态变量和成员变量区别:
        (1)生命周期
            成员变量:随着对象的创建而诞生,随着对象的消亡而消失
            静态变量:随着类的加载而诞生,随着类的卸载而消失(程序执行完毕)
        (2)存储位置
            成员变量:存储在堆内存中,对象的空间里
            静态变量:存储在静态方法去中,某一个类的字节码空间里
        (3)调用方式
            成员变量:在类的内部成员函数直接调用,在类的外部创建对象之后调用
            静态变量:在类的内部静态/成员函数直接调用,在类的外部创建对象之后调用或直接通过类名调用
        (4)初始化
            成员变量:默认-显示-针对性
            静态变量:默认-显示-针对性

    代码块CodeBlock
        静态代码块:主要在类内部的一对static{} 主要是对类进行一些初始化
            随着类的加载,只执行一次

        构造代码块:主要在类内部的一对{} 主要是对对象进行一些初始化 类似构造函数 优先于构造函数执行 在显式初始化自后执行
            随着对象的创建,而执行
            顺序:默认-显示-构造代码块-针对性初始化构造函数

        局部代码块:主要在函数内部的一对{} 应用在循环语句 判断语句
                局部代码块可以访问外界的内容,但是外界访问不了内部的内容

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值