面向过程:
面对的是具体的实现特定功能和具体代码。每一个功能我们都要参与。所有的事情都是自己独立的在做。
代表语言:C语言。
瓶颈问题:面对大的需求,大型的企业开发,如果函数书写的特别多时,整个项目维护起来十分困难。
面向对象:
面向对象是基于面向过程的。面向对象的底层,就是封装了面向过程的那些具体实现步骤。
在开发中中,遇到需求时,我们就要封装了具体功能的那个对象,找到这个对象,调用其中特定的方法,就可以完成相应的操作。这时调用者不再关心具体功能如何实现,我们只要知道哪一个对象,哪一个方法能完成什么功能即可。
面向对象的好处:
1,让我们从具体的参与者,变成指挥者。
2,面向对象的思维模式更符合人们的日常生活习惯。
把对象用代码来体现的话,需要注意:
对象所具有的特点,就是类中所写的属性。属性是直接定义在类中的成员变量。
对象所具备的动作。就是类中的所写的具体功能(方法)。
当我们把事物描述完成,通过new关键字就可以创建这个类所对应的具体的实例(实体,个体)。把这个个体,实例,实体叫做对象。
函数定义格式:
修饰符 返回值类型 函数名(参数列表)
{
函数体
}
类是现实生活中事物的抽象描述,它就是一个模板。
对象是基于类(模板)创建出来的一个具体实体。
对象的内存加载过程:
在DOS命令行中输入java PersonDemo回车之后,这时启动JVM,然后JVM会加载PersonDemo这个class文件。运行这个class文件中的main方法,在运行main方法时执行到new Person();这时JVM又会加载Person.class这个文件。然后开始在堆中创建Person对象。在创建Person对象的时候,Person类中的所有成员变量,都会随着对象的创建而出现在堆中。并且这些成员变量都有默认的初始化值。当对象创建完成之后,把这个堆中的对象的内存地址赋给main方法中的p这个引用变量。
成员变量和局部变量的区别:
1、在代码中的位置不同
成员变量书写在类的成员位置上。局部变量书写方法中,或者在有效的范围(局部)。
2、他们的初始化时间不一样
成员变量会随着对象的创建而在堆中出现,并且他们有默认的初始化值。
局部变量他存在方法中,必须手动给其赋值。
3、他们在内存中的位置不同
局部变量会随着方法的压栈,而在栈内存中出现。
成员变量会随着对象的创建而在堆内存中出现。
4、他们的生命周期不同
局部变量会在方法压栈时出现,而在方法弹栈时消失。即在这个方法的运行周期内是有效的。
成员变量会在对象创建时在堆中出现,会随着对象的消失,而消失。可以直接参与运算。
匿名对象使用方式:1,当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。如果对一个人对象进行多个成员调用,必须给这个对象起个名字。 2,可以将匿名对象作为实际参数进行传递。
格式: new Person().sperk();
匿名对象,一旦使用结束,这个对象就变成垃圾,等垃圾回收器把它收回。
封装 :封装不是私有。
使用方法来封装具有独立功能的那段代码。方法就是一个封装体。
方法存放在类,类就是封装了方法,以及其他成员,说明类也是一个封装体。
封装隐藏了具体实现细节。需要对外暴露使用的规则,使用方法。
封装的好处:
1,隐藏实现细节,对外提供相应的访问方式
2,封装提高了代码的复用性
3,private关键字只是封装的一种体现。如果类的成员变量被私有之后,必须对外提供相应的set或get方法。要求以后开发中,所有的成员必须私有,同时对外提供相应的set或get方法
private:私有
1,权限修饰符,用于修饰类中的成员(成员变量,成员函数)
2,私有后只能在本类使用,在类以外的其他程序无法访问。私有仅是封装的一种表现形式。
3,当成员变量被私有后,需要对外提供相应访问成员变量的方法。这类方法一般命名为getXxx或者setXxx
之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性。
构造函数:1,函数名与类名相同
2,不用定义返回值类型
3,不可以写return语句
Person(int a , String num)
{
System.out.println("a="+a+",num="+num);
}
构造函数可以私有化。
对象一建立就调用对应的构造函数。
构造函数的作用:可以用于给对象进行初始化。
构造函数的小细节:当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
当提供了相应的初始化的构造函数之后,程序还有必要提供相应的set或者get方法吗?
构造函数是用于给对象创建额时候初始化的。一旦对象创建完成之后,这个初始化动作就执行完成。
这个时候还要修改成员变量的属性的话,只能通过set方法完成,不能通过重新创建对象这种方式(错误)。
构造函数和一般函数的区别:
1,调用的时间不同
构造函数是在对象创建时自动调用
一般函数是在对象创建完成之后,使用对象来调用。
2,他们的作用不同
构造函数的作用:就是给对象初始化用的。
一般函数的作用:完成某一个功能的。
3,他们能相互调用吗?
一般函数不能调用构造函数,为什么?
一般函数是被对象调用的。那就说明在这个一般函数执行的时候,对象已经存在。而构造函数是创建对象时调用。
构造函数可以调用一般函数吗?可以
在执行构造函数的时候,堆中已经把这个对象创建好了,只不过这个对象中的所有数据都是默认的初始化值。此时对象的初始化动作还没有彻底执行结束。等构造函数中所有的代码全部执行完成之后,这时真个对象的初始化全部结束。
构造函数的作用:它是专门用来给对象进行初始化的。在创建对象的时候,可以通过构造函数给对象进行成员变量显示初始化。
构造函数什么时候执行
在对象在堆中创建完成之后,其中的所有成员变量都默认初始化结束之后,自动的调用与之对应的构造函数。
注意:一旦对象创建完成之后,构造函数就执行结束了。它使命就完成。我们不能在通过对象去调用任何的构造函数。
什么时候定义构造函数:
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。当有未知内容参与运算时,需要定义参数。
无参数的构造函数(默认构造函数):Person(){}
注意:在开发时。如果我们显示指定的构造函数,这时JVM就不会再给我们的程序添加那个默认的构造函数了。
在开发时,到底要不要写无参数的构造函数?
如果在程序中,创建对象时,所有的对象都需要在创建的时候就明确具体的初始化数据。这时就不用在类中写相应的无参数构造函数。
如果程序没有了无参数的构造函数之后,创建对象时,必须给每一个对象显示指定参数。
在一个类中,如果有多个构造函数,他们是以重载的形式出现。
|