第二章:App基础语法
1、编程范式
编程范型或编程范式(programming paradigm),是指从事软件工程的一类典型的编程风格。常见的编程范式有过程化(命令行)编程、事件驱动编程、面向对象编程以及函数编程等。
2、封装、继承与多态
OO(面向对象)思想中有三大支柱,分别为封装、继承、多态。
封装是OO概念中最基础的,其本质可以理解成将一堆函数和一堆对象放在一起,对外暴漏接口,隐藏具体执行细节。
继承是OO中一个重要概念,如果处理不好,就容易导致高耦合,使用时应注意:
-父类和子类职责明确,各司其职,互不干扰。
-父类的所有变化都要体现到子类;父类为子类提供服务,但不应该涉及子类具体业务。
多态一般要结合继承一起使用,本质上子类通过覆盖或重载父类的方法,来使得对同一类对象同一方法对调用产生不同对结果。
3、内部类的使用和思考
使用内部类最大的优点就在于,它能够非常好地解决多重继承的问题。
内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类/嵌套内部类。
-成员内部类。成员内部类是最普通的内部类,它位于另一个类内部。
-局部内部类。指定义指一个方法或者一个作用域内的类,访问权限仅限于方法内或者该作用域内。
-匿名内部类。匿名内部类指没有名字、没有构造方法的局部内部类。
-静态内部类/嵌套内部类。static关键字修饰的是不需要依赖于外部类的内部类。
4、实际使用中需要注意的问题
-成员内部类可以无条件地访问外部类的所有成员属性和方法(包括private和static成员);当与外部类拥有相同名称的方法或变量时,默认访问的是成员内部类成员或变量,若要访问外部类成员或变量,需要用new classNae.成员()/变量名的方法,如果是静态成员/变量,可以直接用className.成员()/变量名()访问
-成员内部类依赖于外部类,创建内部类对象时需先创建外部类,而静态内部类创建则不需要依赖于外部类。
-成员内部类中不能存在任何static的变量和方法,而静态内部类不能使用任何外部类的非static成员变量和方法
-建议中外部类中通过getXX()获取成员内部类,尤其是该内部类的构造函数无参数时
-使用匿名内部类时,必须也只能继承一个类或者实现一个接口;匿名内部类中不能定义构造函数,不能存在任何的静态成员变量和静态方法。
-匿名内部类的形参必须使用final修饰,避免引用值的变化
-使用匿名内部类时,一定要慎重对待内存泄漏(内部类保持类外部类的引用实例,内部类不销毁,外部类就无法被回收)。一般用静态内部类+弱引用方式或者动态代理方式替代。
5、线程与进程
一个进程可以包括多个线程,其内存空间时共享的,每个线程都可以使用这些共享内存,通过互斥锁(Mutex)来防止多个线程同时读写某一块内存区域,通过“信号量”(Sempahore)来保证多个线程不会相互冲突。多线程时一种利用CPU同时处理多个任务从而提高软件工作效率和资源利用率多方法,但是,当线程过多时,会消耗大量的CPU资源,且每开一条线程本身也是有开销的(如ios中,主线程占用1MB的内存空间,子线程占用512KB,可以使用-setStackSize设置,但必须是4KB的倍数,而且最小是16KB;线程的创建时间大概90ms)。多线程中,又会涉及线程池的管理,可以保证多线程使用中的服用、并发以及性能把控。
6、反射
反射(Reflection)是程序中运行状态中动态检测、访问或者修改类型的行为特征,具体表现为
-对于任意一个类,都能知道这个类的所有属性和方法
-对于任何一个对象,都能够调用它的任何一个方法和属性
7、注解
注解(Annotation),也叫元数据,是一种代码级别的说明,在java中,Annotation是JDK 1.5以后版本引入的一个特性,与类、接口、枚举属同一层次,可以声明在包、类、字段、方法、局部变量、方法参数等前面,用来对这些元素进行说明和注释。其本身只是一个标记,之所以产生作用,在于对其解析【java提供类一种源程序中的元素关联任何信息或者任何元数据的途径和方法】
8、泛型
泛型是java 1.5引入的特性,主要目的是为解决数据类型的安全性问题,具体包括泛型类、泛型接口及泛型方法。