----------Android、Java开发期待与您交流----------
面向对象的特征:封装、继承、多态
面向对象是基于面向过程而言面向对象和面向过程都是一种思想
面向过程强调功能行为,展现细节;面向对象是将功能封装进对象,隐藏功能具体细节,强调具备了功 能的对象。
对象:指现实生活中实实在在存在的个体
类:指对对象的统一描述
成员变量和局部变量:成员变量:作用于整个类中,因为对象的存在而存在,在堆内存中
局部变量:作用于函数或语句中,存在于栈内存中
匿名对象:
1.对对象的方法只调用一次时可以使用匿名对象,简化写法
2.如果一个对象进行多个成员方法调用时,必须给这个对象起个名字;
3.匿名对象可以当作参数传递
一.封装
封装:封装是一种把代码和代码所操作的数据捆绑在一起,使两者不受外界干扰和误用的机制。它隐藏了对象的属性和实现细节。仅对外提供公共的访问方式。
封装的好处:
1.将变化隔离
2.提高代码重用性
3.提高安全性
封装原则:
1.将不需要对外提供的内容隐藏起来
2.把属性都隐藏,提供公共方法对其访问
成员方法和构造方法的区别:
功用:成员方法是类或类对象某种行为的体现;构造方法用于对类对象初始化
格式:修饰符、返回值类型、命名
1.修饰符:构造器可以有任何访问修饰符或者没有修饰符,但不能被abstract、finally、native、static或者synchronized修饰
2.返回值:构造方无返回值类型,也不需要void
3.命名:成员方法名称遵循标识符规则,构造函数名称则必须和类名相同
4.每个类可以有一个以上的构造器
5.构造器可以的参数个数不受限制
6.构造器总是伴随new操作一起调用
该类事物具备的一些特性或行为可以放在构造代码块中,当对象初始化时自动被执行
this关键字的用法:
1.区分局部变量和成员变量同名情况
2.代表本类的对象,this代表所在函数所引用的对象,谁调用this所在函数,this就代表谁
3.定义函数功能时,该函数内部需要用到调用函数的对象时,这时this代表这个对象
static关键字:
作用:用于修饰成员(成员变量或成员函数)
被修饰后的成员具备以下特点:
1.伴随类的存在而存在,消失而消失
2.优先于对象存在
3.被所有对象共享
4.可以直接被类名调用(类名.静态成员)
注意事项:
1.静态方法只能访问静态成员,非静态方法既可以访问非静态成员还可以访问静态成员
2.静态成员优先于对象存在,所以静态方法中不可以写this、super关键字
3.主函数是静态的
成员变量和类变量的区别:
1.存放的位置
1.1类变量存在于方法区中
1.2成员变量随着对象的建立存在于堆内存中
2.生命周期
2.1类变量生命周期长,随着类的消失而消失
2.2成员变量生命周期短,随着对象的消失而消失
静态的优缺点:
优点:对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象中存储一份
缺点:声生命周期过长;访问出现局限性(静态虽好,只能访问静态)
静态代码块:
1.随着类的加载而执行,只执行一次,用于给类初始化。
2.静态代码块里面的变量都是局部变量,只在本块内有效
3.静态代码块只能定义在类里,它独立于任何方法,不能定义在方法里面
4.一个类中可以定义多个静态代码块,执行的顺序分居定义的顺序进行
代码执行顺序:
1.静态代码块;2. 构造代码块;3.构造函数
主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用
主函数的定义:
public:代表该函数的访问权限是最大的
static:代表主函数随着类的加载就已经存在了
void:主函数没有具体的返回值类型
main:不是关键字,但是一个特殊的单词,可以被jvm识别
单例模式:
单例模式:一个类只有一个实例。
要点:
1.某个类只能有一个实例;即单例模式的类只提供私有的构造函数
2.它必须自行创建这个实例;即类定义中含有一个类的静态私有对象
3.必须自行向整个系统提供这个实例;提供一个静态的公共函数用于创建或获取它本身的静态私有对象
优点:
1.单利模式会阻止其它对象实例化自己单例对象的副本,从而确保所有对象访问唯一实例
2.因为类控制了实例化过程,所以类可以灵活更改实例化过程
缺点:
1.每次对象请求引用时都要检查是否存在类的实例
2.使用单例对象时,开发人员必须记住通过静态方法调用获得实例对象,因为有可以无法访问源代码,可能会误导开发人员此类无法被实例化
public class Singleton {
}
//懒汉式
class Hunger {
private Hunger() {
}
private static Hunger h = new Hunger();
public static Hunger getSingleton() {
return h;
}
}
class Lazy {
private static Lazy lazy = null;
private Lazy() {
}
//饿汉式(双重锁)
public static Lazy getSingleton() {
if (lazy == null) {
synchronized (Lazy.class) {
if (lazy == null) {
lazy = new Lazy();
}
}
}
return lazy;
}
}
Java修饰符使用范围
使用范围 修饰符 | 同类 | 同包 | 不同包的子类 | 所有 |
private | √ | × | × | × |
default(默认) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
----------
Android、Java开发期待与您交流----------