------------- java培训、android培训、java博客、java学习型技术博客、期待与您交流! --------------
Java面向对象包括: 面向对象概念,类与对象的关系,封装,构造函数,this关键字,static关键字,单例设计模式。
面向对象概念:面向对象是相对面向过程而言。面向对象和面向过程都是一种思想。
面向过程:强调的是功能行为。
面向对象:将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
面向对象的三个特征:封装,继承,多态。
注意:以后编程先找对象,有对象就拿过来用,没有对象就设计一个对象。
类与对象的关系:
类:就是对现实生活中事物的描述。
对象:就是这类事物实实在在存在的个体(实体)。如:
现实生活中的对象:张三,李四
描述:就是提取这些对象的共性内容如:姓名,年龄,性别。
映射到Java中,描述就是class定义的类。具体对象就是对应Java在堆内存中用new建立的实体。
类与对象的关系图例:
其实定义类,就是在描述事物,就是在定义事物的属性和行为。属性对应是类中的变量,行为对应类中的函数(方法)。属性和行为共同成为类中的成员(成员变量和成员函数)。
成员变量和局部变量的区别:
作用范围:成员变量作用于整个类中。局部变量作用于函数中,或者语句中。
在内存中的位置:成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量存在于栈内存中。
匿名对象:
匿名对象是对象的简化形式。例如:Car c=new Car()可简写为new Car(),这就是匿名对象。
匿名对象两种使用情况:
1.当对对象方法仅进行一次调用时。
2.匿名对象可以作为实际参数进行传递。
封装:
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装好处:将变化隔离,便于使用,提高重用性,提高安全性。
封装原则:
1.将不需要对外提供的内容都隐藏起来。
2.把属性都隐藏,提供公共方法对其访问。
注:函数是Java中最小的封装体。类也是封装体。
private关键字:
private:私有,权限修饰符。用于修饰类中的成员(成员变量和成员函数)。私有只在本类中有效。
注意:私有仅仅是封装的一种表现形式。
将成员私有化后,类以外即使建立了对象也不能直接访问,需要对外提供访问方式。可以在访问方式中加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性。
private关键字应用:将成员变量私有化,对外提供对应的set,get方法对其进行访问,提高对数据访问的安全性。
构造函数:
特点:
1.函数名与类名相同。
2.不用定义返回值类型。
3.不可以写return语句。
作用:给对象进行初始化。
注意:
1.默认构造函数的特点。
2.多个构造函数是以重载的形式存在的。
构造函数的小细节:当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数的区别:
1.构造函数和一般函数在写法上有不同。
2.在运行上也有不同。构造函数是在对象一建立就运行,给对象初始化。而一般函数是对象调用才执行,是给对象添加对象具备的功能。
3.一个对象的建立,构造函数只运行一次。而一般函数可以被该对象调用多次。
构造函数的应用:当分析事物时,该事物存在就具备一些特性或行为,那么将这些内容定义在构造函数中。
构造代码块:
作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化。构造代码块中定义的是不同对象共性的初始化内容。
注:构造函数可以private修饰。当一个类中所有构造函数都被private修饰,那么这个类就不可能创建对象。因为对象不能进行初始化动作。
this关键字:
this:代表它所在函数所属对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。
this作用:用于区分局部变量和成员变量同名情况。
this的应用:
1.当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
2.this语句用于构造函数之间进行互相调用。this语句只能定义在构造函数的第一行。因为初始化要先执行。
static关键字:
作用:用于修饰成员(成员变量和成员函数)。
被修饰的成员具备以下特点:
1.随着类的加载而加载。也就是说,静态会随着类的消失而消失。说明静态成员的生命周期最长。
2.优先于对象存在。明确一点,静态是先存在,对象是后存在的。
3.被所有对象所共享。
4.可以直接被类名调用。
使用注意:静态方法只能访问静态成员。静态方法中不可以写this,super关键字,因为静态优先于对象存在。主函数是静态的。
当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。(类名.静态成员)
实例变量和类变量的区别:
1.存放位置:类变量随着类的加载而存在于方法区中。实例变量随着对象的建立而存在于堆内存中。
2.生命周期:类变量生命周期最长,随着类的消失而消失。实例变量生命周期随着对象的消失而消失。
静态的利弊:
利:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。
弊:生命周期过长。访问出现局限性。(只能访问静态的)
主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用。
主函数的定义:public static void main(String[] args)
public:代表着该函数访问权限是最大的。
static:代表着主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被JVM识别。
(String[] args):函数的参数,参数类型是一个字符串数组。
args:参数变量名,可以更改名称。
注意:主函数是固定格式的。
静态的应用:要从两方面讲:
静态变量(类变量):当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
静态函数:当功能内部没有访问到非静态数据(对象中的特有数据),那么该功能可以定义成静态的。
帮助文档:
用文档注释:/**
*/
完成说明书,用javadoc生成帮助文档。
注意:生成帮助文档的类必须是public类。帮助文档从index文件开始看。帮助文档中体现的是对外暴露的内容,私有的内容是不会出现的。
静态代码块:
格式: static
{
静态代码块中的执行语句;
}
特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化。
对象的初始化过程:
例:Person p=new Person("zhangsan",20);
这句话做了什么事情?
1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
2.执行该类中的静态代码块,如果有的话,给Person.class进行初始化。
3.在堆内存中开辟空间,分配内存地址。
4.在堆内存中建立对象的特有属性,并进行默认初始化。
5.对属性进行显示初始化。
6.对对象进行构造代码块初始化。
7.对对象进行对应的构造函数初始化。
8.将内存地址赋给栈内存中的p变量。
设计模式:解决某一类问题最行之有效的方法。Java中有23种设计模式。
单例设计模式:解决一个类在内存中只存在一个对象。
怎样保证对象唯一:
1.将构造函数私有化。
2.在类中创建一个本类对象。
3.提供一个方法可以获取到该对象。
单例设计模式应用:对于事物该怎么描述,还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
单例设计模式方式:
1.饿汉式:先初始化对象。开发时常用,因为简单安全。
class Single
{
private static final Single s=new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
2.懒汉式:对象被方法调用时才初始化,也叫做对象的延时加载。
class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single();
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;
}
}
------------- java培训、android培训、java博客、java学习型技术博客、期待与您交流! --------------