黑马程序员——面向对象(封装、构造函数、静态)

来源:互联网 发布:淘宝店铺怎么关联分店 编辑:程序博客网 时间:2024/04/29 05:30

------- android培训、java培训、期待与您交流! ----------

面向对象

面向对象的特点:
  1:封装
  2:继承
  3:多态

 

 

面向对象是相对面向过程而言。

面向对象和面向过程都是一种思想

面向过程:强调的功能的行为,执行者

面向对象:将功能封装进对象,强调具备了功能的对象。指挥者

面向对象是基于面向过程的

面向对象思想的特点
  1:它是一种更符合人们思考习惯的思想
  2:它是复杂的内容简单化
  3:它使我们从执行者变成了指挥者

 

举例:人开门,把大象装进冰箱,在黑板上画圆,火车司机停车

 

 

类和对象
 1,类 对现实世界中事物的描述(属性和方法),属性对应的类中的变量;行为对应的类中的函数方法
 2,对象 现实世界中实际存在具体的个体
 3,对象的使用 通过new关键字来创建对象

 

 

                     成员变量和局部变量的区别:

                           成员变量                                                               局部变量

作用域:          整个类中                                                           函数中或者语句中

 

内存中:存放在堆中,因为对象的存在而存在         栈中,从声明时开始存在

 

匿名对象

 

1,当对象的方法(只是方法没有属性,因为调用属性没有什么意义)调用只需要调用一次的时候,可以使用匿名对象。这种方法比较简化。new Car().run(); 

但是当对一个对象的多个成员进行调用的时候,需要给对象一个名字

2,可以将匿名对象作为实参进行参数传递

 

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

 

好处:
将变化隔离。
便于使用。
提高重用性。
提高安全性。

封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。

 

 

private(私有)关键字:

是一个权限修饰符。
用于修饰成员(成员变量和成员函数)
被私有化的成员只在本类中有效。
当成员私有后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有方法的形式对其进行访问。
好处是:可以在方法中对成员变量的访问进行控制。
注意:私有仅仅是封装的一种表现形式而已。

 

 

构造函数:用于给对象进行初始化。

构造方法的方法名必须与类名相同。
构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
构造方法不能由编程人员调用,而要系统调用。
一个类可以定义多个构造方法,也就是构造方法可以重载,以参数的个数,类型,或排列顺序区分。
构造函数细节:如果在定义类时没有定义构造方法,则编译系统会自动插入一个空参数的默认构造函数,这个构造函数不执行任何代码。
你不定义空参数的构造函数,系统会自动给一个空参构造,你定义了构造函数无论是有参还空参的,系统就不再给空参数的了。

作用:构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。

 

构造函数于一般函数的区别:

 1,从功能上的区别:

构造函数是给对象初始化的

一般函数是给对象添加对象具备的功能

2,从执行上的区别:

构造函数,是对象创建的时候被执行,不能被调用。

一般函数是什么时候调用,就什么时候执行,不调用就永远不执行,给对象添加对象具备的功能

 

构造代码块:
作用:它可以给所有对象进行初始化

对象一建立就运行,而且优先于构造函数执行
当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化。这样可以减少代码的重复。

 

 

 

this关键字:

1,函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。

2,在函数中,需要引用该函数所属类的当前对象时候,直接用this。

this:代表它所在函数所属对象的引用。
注意,如果我们想在一个构造函数中对另一个构造函数进行调用的时候,不能在其构造函数中直接类名(参数)这样调用,而是通过this调用另一个构造方法,用法是this(参数列表)。这叫this语句,这个仅仅在类的构造函数间调用,别的地方不能这么用。只能放在构造函数的第一行

 

 

 

static(静态)关键字:

static  是一个修饰符,用于修饰成员(成员变量 、成员方法)

static特点

1、随着类的加载而加载。  静态会随着类的消失而消失,说明它生命周期最长。

2、优先于对象存在  。明确:静态先存在 对象后存在。

3、被所以对象共享

4、可以被类名所调用  Person.country

实例变量(非静态的成员变量)和类变量(静态变量)的区别:
1,存在内存中的位置:
   静态变量随着类的加载而存在于方法区中。
   实例变量随着对象的建立而存在于堆内存中。
2,生命周期:
    静态变量的生命周期最长,随着类的消失而消失。

    实例变量的生命周期随着对象的消失而消失。

3,所属不同:
   静态变量也称之为类变量,所属于整个类,被整个类所共享。
   实例变量是对象的特有数据,所属于对象。

静态使用注意事项:
1, 静态方法只能访问静态成员。
       非静态方法既可以访问静态也可以访问非静态
2,静态方法中不可以定义this,super关键字。
           因为静态优先于对象存在。所以静态方法中不可以出现this。

3,主函数是静态的。

 

静态利弊:

利:对对象的共享数据进行单独空间存储,节省空间。

        可以直接被类名调用

弊:生命周期过长。

        访问出现局限性

什么时候定义静态变量?

当对象中出现共享数据时,该数据被静态所修饰,

对象中特有数据要定义成非静态。

什么时候定义静态函数?

当功能内部没有访问到非静态数据,该功能可以定义成静态的

静态代码块:

格式:

static

{

   执行语句;

}
作用:给类进行初始化。只执行一次

当类中的方法都被静态了化,并且构造方法被private了,这时我们不能在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块

0 0