------- android培训、java培训、期待与您交流! ----------
1.面向对象三大特性:封装(encapsulation)、继承(inheritance)、多态(polymorphism)
面向对象是相对面向过程而言的,面向对象和面向过程都是一种思想。
面向过程:强调的是功能主体
面向对象:将功能封装进对象,强调了具备功能的对象
面向对象是基于面向过程的。
面向对象的特点:
(1)是一种符合人们思考习惯的思想
(2)可以将复杂的事情简单化
(3)将程序员从执行者转换为指挥者
(4)完成需求时:先找具有所需功能的对象来用,如果对象不存在,那么创建一个具有所需功能的对象,这样简化开发并提高复用。
2.类和对象
类就是对现实生活中事物的描述
对象就是这类事物实实在在存在的个体
定义类就是在描述事物,就是定义属性和行为(成员变量和成员方法)
3.成员变量和局部变量
作用范围:成员变量作用在整个类中,局部变量作用在函数或者语句中
在内存中的位置:成员变量在堆内存中,因为对象的存在才在内存中存在,局部变量存在栈内存中。
成员变量有默认初始化值,局部变量没有。
4.匿名对象使用方式
(1)当对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简单
new Car().run();
如果对一个对象进行多个成员调用,必须给这个对象起个名字。
(2)可以将匿名对象作为实际参数进行传递。
show(new car());
5.封装(encapsulation)函数本身是最小的封装体
封装是指隐藏对象的属性和实现细节,仅对外提供访问方式
好处:将变化隔离,便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
private:私有,权限修饰符:用于修饰类中的成员(成员变量和成员函数),只在本类中有效,私有仅仅是封装的一种表现形式。
一个成员变量通常对应两个访问方式:设置和获取。
之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断语句,对访问的数据进行操作,提供代码的健壮性。
6.构造函数
特点:函数名与类名相同,不用定义返回值类型,不可以写return语句。
构造函数对象一建立,就会调用与之对应的构造函数
作用:可以用于给对象进行初始化。
当一个类中没有定义构造函数时,系统默认给该类加入一个空参数的构造函数,当在类中定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数在写法上不同,在运行上也不同,构造函数是在对象一建立就进行初始化,而一般方法是对象调用才执行,是给对象添加具备的功能,一个对象建立,构造函数只运行一次,而一般方法可以被对象调用多次。
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
7.this关键字
Person(String name)
{
this.name=name;
}
this:看上去,是用于区分局部变量和成员变量同名的情况
this:代表着它所在函数所属对象的引用,哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示对象,但凡本类功能内部使用到本类对象,就用this。
8.主函数
是一个特殊的函数,作为程序的入口,可以被jvm调用
主函数的定义:
public:代表着该函数访问权限是最大的
static:代表主函数随着类的加载就存在了
void:主函数没有具体的返回值
main:不是关键字,但是是一个特殊的单词,可以被jvm识别
(String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串,
9.静态static
用法:是一个修饰符,用于修饰成员(成员变量、成员函数)
当成员被静态修饰后,就多一种调用方式:除了可以被对象调用外,还可以直接被类名调用:类名.静态成员
特点:
(1)随着类的加载而加载,随着类的消失而消失,说明它的生命周期最长。
(2)优先于对象存在,静态是先存在,对象是后存在的
(3)被所有对象所共享
(4)可以直接被类名调用
实例变量和类变量的区别:
(1)存放位置:类变量随着类的加载而存放在方法区中,实例变量随着对象的建立而存在于堆内存中。
(2)生命周期:类变量生命周期最长,随着类的消失而消失;实例变量随着对象的消失而消失。
静态使用注意事项:
(1)静态方法只能访问静态成员。非静态方法既可以访问静态成员也可以访问非静态成员
(2)静态方法中不可以定义this、super关键字,因为静态方法优先于对象存在
(3)主函数是静态的。
静态的利弊:
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象都存储一份,可以直接被类名调用
弊:生命周期过长,访问出现局限性,静态只能访问静态。
什么时候定义静态变量?(类变量)
当对象中出现共享数据时,该数据被静态所修饰;对对象中特有数据,要定义成非静态存在于堆内存中。
什么时候定义静态函数?
当功能内部没有访问到非静态数据时,可以定义为静态函数。
静态代码块:
格式:
static
{
执行语句;
}
特点:随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化。
10.单例设计模式:解决一个类在内存中只存在一个对象。
想要保证对象的唯一性:
(1)为了避免其他程序过多建立对象,先禁止其他程序建立对象。(将构造函数私有化)
(2)为了让其他程序可以访问到该对象,在本类中,自定义一个对象。(在类中创建本类对象)
(3)为方便其他程序对自定义对象的访问,可以对外提供一些访问方式。(提供一个方法可以访问该对象)
class Single
{
private Single(){}
private static Single s=new Single();
public static Single getIstance()
{
return s;
}
}
饿汉式:先初始化对象
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
懒汉式:对象是方法被调用时才初始化,也叫做对象的延迟加载。
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}