美文网首页app开发
Android复习一遍又一遍

Android复习一遍又一遍

作者: 耑意儿 | 来源:发表于2017-02-16 15:41 被阅读174次

    1. 解释下主函数:

    public static void main(String[] args){}
    

    public :表该函数访问权限最大
    static :表该函数随着类的加载便存在
    void :表主函数无具体返回值类型
    main :非关键字,但可以被JVM识别
    (String[] args) :函数的参数是一个字符串类型的数组
    主函数是固定格式的,被JVM识别,且只识别这个。
    args 是数组对象,虚拟机调用主函数时,传入的是new String[0]

    2. 构造函数

    作用:给对象初始化 。
    多个构造函数以重载形式出现

    2.1. 构造函数在写法上与一般函数不同的地方在于:

    • 函数名与类名一致
    • 无返回值类型
    • 无需return语句

    2.2. 对象一创建即调用与之对应的构造函数,比如生活中小孩一出生就会哭。
    2.3. 若类未定义构造函数,系统就会默认给该类加一个空参数的构造函数,如果开发人员自定义了构造函数,就不会有这个默认的了。
    2.4. 构造函数和一般函数在运行上的不同?
    构造函数:对象一建立就执行,进行初始化。一个对象建立,构造函数只会运行一次
    一般函数:调用时才执行,是给对象添加对象具备的功能。一个对象建立,一般方法可被对象调用多次
    (如:婴儿会吃饭,但并非一直不停地吃。)
    2.5. 何时定义构造函数?
    分析事物时,该事物存在具备一些特性或行为,则将这些内容定义在构造函数中。

    3. 构造代码块

    构造代码块是给对象进行初始化
    对象一建立就执行,且优先于构造函数执行
    与构造函数的区别

    • 构造代码块给所有对象进行初始化。
    • 构造函数给对应对象初始化。

    4. 静态static

    静态变量也称为类变量
    静态函数随着类的加载而加载,故静态函数可直接被类调用。
    静态方法为共享数据,存储在方法区中
    静态虽好,只能访问静态。非静态可访问静态
    4.1. static 的特点:

    • 随着类的加载而加载,消失而消失,所以生命周期最长
    • 优先于对象存在,静态先存在,对象后存在
    • 被所有对象共享
    • 可直接被类名调用

    4.2. 静态使用注意事项:

    • 静态方法只能访问静态成员,非静态方法既可以访问静态成员也可以访问非静态成员
    • 静态方法中不可以定义this,super关键字,因静态优先于对象存在
    • 主函数为静态函数

    4.3. 静态的利与弊:

    • 利:对象的共享数据进行单独空间存储,节省空间,无必要每个对象一份,可直接被类名调用
    • 弊:生命周期过长,访问出现局限性(静态虽好,只能访问静态)

    4.4. 如何使用静态?

    • 何时定义类变量?
      当对象中出现共享数据时,该数据用静态修饰,对象中的特有数据要定义成非静态存于堆内存中,
    • 合适定义静态变量?
      当功能内部未访问到非静态数据时

    4.5. 静态代码块

    static { 静态代码块中的执行语句 }
    

    特点:随着类的加载而执行,只执行一次,用于给类进行初始化。

    4.6. 静态函数应用
    建立一个ArrayTools的类来实现对数组的操作,由于并未封装特有数据,因此可将函数定义成静态,然后通过类名来调用,另外为避免被创建对象应该讲构造函数私有化。

    5. 实例变量和类变量的区别:

    5.1. 存放位置:

    • 类变量随着类的加载而存在于方法区中
    • 实例变量随着对象的建立而存在于堆内存中

    5.2. 生命周期:

    • 类变量的生命周期最长,随类的消失而消失
    • 实例变量随对象的消失而消失

    6. 成员变量和局部变量

    • 作用范围:
      成员变量作用于整个类,局部变量作用于函数或语句中
    • 在内存中的位置
      成员变量存在堆内存中,因为对象存在而在内存中存在;局部变量存在于栈内存中。

    7. 说明下句的内存空间是如何开辟的:

    ShowSpaceCreate p = new ShowSpaceCreate("zhang" , 20)
    
    • 因new用到了ShowSpaceCreate.class,所以先找到该类文件加载到堆内存中
    • 执行该类中static代码块,若有,则是给该类初始化
    • 在堆内存中开辟空间,分配内存地址
    • 在堆内存中建立对象的特有属性,并进行默认初始化
    • 对属性进行显示初始化
    • 对对象进行构造代码块初始化
    • 对对象进行构造函数初始化
    • 将内存地址赋给栈内存中的p变量。

    8. 匿名对象

    new Car().run();
    

    未给对象取名,new完直接调用方法
    用法:

    • 当对对象的方法只调用一次时,可用匿名简化
      若对一个对象进行多个成员调用则必须命名
    • 可将匿名对象作为实际参数传递,如:
      show (new Car());

    9. 内部类

    将一个类定义在另一个类里面,里面的这个类就是内部类
    **9.1. ** 访问特点:

    • 可直接访问外部类成员,包括私有的
      私有成员只能在类内部使用,内部类在类的内部;
      之所以可以直接访问外部类成员,是因为内部类持有一个外部类引用。
      格式:外部类.this.外部类成员
    • 外部类要访问内部类成员需要创建内部类的对象。

    **9.2. **内部类在成员位置上时可被访问修饰符修饰
    如:
    private 将内部类在外部类中进行封装。
    static 使内部类具备静态特性,此时只能访问外部类中的静态成员。

    **9.3. **在外部其他类中直接访问static内部类的非静态成员:

    new OuterClass.Inner().function();
    

    **9.4. **在外部其他类中直接访问static内部类的静态成员:

    OuterClass.Inner().function();
    

    <a>注意:</a>
    当内部类成员定义了一个静态成员,则该类必须也为静态类
    当外部类静态方法访问内部类,则该内部类为static的。

    **9.5. ** 局部内部类
    局部内部类不可以被成员修饰符修饰:private ,static
    局部内部类可以直接访问外部类中成员,因为还持有引用,但不可以访问所在局部中的变量,常量可以。

    **9.6. ** 匿名内部类
    定义匿名内部类的前提是:内部类必须是继承或者实现一个接口。
    格式:

    new 父类或接口(){定义子类内容}
    

    匿名内部类即一个匿名子类对象,而这个类有点胖,可以理解成为带内容的对象
    匿名内部类定义的方法最好不要超过三个。

    10. final修饰符

    final可以修饰类、变量和方法,分别表示类不能被继承;变量值不可改变,其实就是常量;函数不可被重写。
    局部内部类只能访问该局部中被final修饰的量。

    相关文章

      网友评论

      本文标题:Android复习一遍又一遍

      本文链接:https://www.haomeiwen.com/subject/cexhwttx.html