基本概念、对象和类、构造器、static

2018-01-05  本文已影响0人  root_zhb

(基本概念、对象和类、构造器、static)

一、基本概念

面向对象是站在对象的角度思考问题,把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。具备某种功能的实体,称为对象。面向对象最小的程序单元是:类.

面向对象三大特征:

1:封装(Encapsulation):将对象的实现细节隐藏起来,通过公共的方法来向外暴露该对象的功能。

2:继承(Inheritance):子类继承父类,子类是一种特殊的父类,能直接或间接获得父类里的成员。

3:多态(Polymorphism):直接把子类对象赋给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。

千万不要误解为面向对象一定就优于面向过程的设计

简单的说:编码是人的工作,面向对象更加适合人,而面向过程更适合计算机。

二、对象和类

对象可以定义成包含状态和行为的一个实体,对象(object)也称为实例(instance)。

具有相同特性(状态)和行为(功能)的对象的抽象就是类。

对象是类的实例,类是对象的模板。

类具有特性,对象的状态,用成员变量来描述,封装数据。

类具有功能,对象的行为,用方法来描述。

1、类相关

类定义

类的全限定名称: 包名.类名;

2、对象

1):根据类来创建对象的语法:    类名  变量  =  new  类名();

2):给字段设置值:                        对象变量.字段名 = 该类型的值;

3):获取字段的值:                        该字段类型  变量 = 对象变量.字段值;

4):通过对象调用方法.                对象变量.方法(实参);

对象实例化过程

对象的打印和比较对象以及匿名对象和对象的生命周期:

-------------------------------------------------------------

1):对象的打印操作:

    打印对象的时候,打印出来的效果,如:Servant@3294e4f4.

    类的名称@十六进制的hashCode.

    其实,我们打印对象,往往关系的是该对象中的数据是多少,期待讲解Obejct的toString方法.

2):对象比较操作:

    ==号:对于基本数据类型来说,比较的是值.

              对于引用数据类型来说,比较的是在内存中的地址值.

                每次使用new关键字,都表示在堆值新开辟一块内存空间,不同的内存空间,地址值不同.

    需求:如果对象拥有完全相同的数据,我就想让他们相等. 期待:Object的equals方法.

3):对象的生命周期:

    对象什么时候出生:每次使用new关键字的时候,就会在内存开辟新的空间,此时对象开始存在.

    对象的结束:当堆中的对象,没有被任何变量所引用,此时该对象就成了垃圾,就等着垃圾回收器(GC)来回收该垃圾,当被回收的时候,对象被销毁了,回收垃圾的目的,释放更多的内存空间.

4):匿名对象: 没有名称的对象,创建对象之后没有赋给某一个变量.

      new Servant();//匿名对象,匿名对象只是在堆中开辟一块新的内存空间,但是没有把该空间地址赋给任何变量.

      因为没有名称,匿名对象仅仅只能使用一次,一般的,把匿名对象作为方法的实参传递.

三、构造器

构造器:如果我们没有显示提供构造器,则编译器在编译时创建一个缺省的构造器.

但是,如果我们显示定义了一个构造器,则编译器不再创建默认构造器.

构造器是一种特殊的方法,也可以存在重载.

四、static

static修饰的资源属于类级别,而不是对象级别。

static修饰符的特点:

1):static修饰的成员(字段/方法),随着所在类的加载而加载. 当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了.

2):优先于对象的存在. 对象是我们手动通过new关键字创建出来的.

3):satic修饰的成员被该类型的所有对象所共享. 根据该类创建出来的任何对象,都可以访问static成员.

表面上通过对象去访问static成员,其本质依然使用类名访问,和对象没有任何关系(通过反编译看到的).

4):直接使用类名访问static成员 因为static修饰的成员直接属于类,不属于对象,所以可以直接使用类名访问static成员.

什么时候定义成static的字段和方法:

  如果这个一个状态/行为属于整个事物(类),就直接使用static修饰. 被所有对象所共享.

  在开发中,往往把工具方法使用static修饰.(工具对象只需要一份即可,把该类设计为单例的)

上一篇 下一篇

猜你喜欢

热点阅读