Android复习一遍又一遍

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();

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

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

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

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

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

10. final修饰符

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

你可能感兴趣的:(Android复习一遍又一遍)