Java OOP——第一章 对象和封装

1、软件出现的目的:

用计算机的语言描述现实世界

用计算机解决现实世界的问题

 

面向对象设计和开发程序的好处:

   交流更加流畅

   提高设计和开发效率

计算机语言的发展向接近人的思维方式演变:汇编语言 [面向机器]、c语言    [面向过程]、java语言 [面向对象]

类和对象的区别和联系

1、类是抽象的,概念的,代表一类事物,比如人类,猫类..

2、对象是具体的,实际的,代表一个具体事物

3、类是对象的抽象,对象是类的实例

2、面向对象设计的过程就是抽象的过程,分以下三步:

    第一步:发现类;

   第二步:发现类的属性;

   第三步:发现类的方法;

3、类图:使用类图描述类

  用于分析和设计“类”;

  直观、容易理解;

     

4、类名、属性名、方法名、常量名命名规范:

    类名由一个或几个单词组成,每个单词的第一个字母大写,ru:Dog、StringBuffer;

    ◆属性名和方法名由一个或几个单词组成,第一个单词首字母小写,其他单词首字母大写,如:health、stuName、println()、getMessage();

    ◆常量名由一个或几个单词组成,所有字母大写,如:PI;

5、构造函数:

无参构造函数:

  方法名与类名同名;

  没有返回值;

  与返回修饰符无关;

  作用:给成员属性默认赋予初始值

6、构造方法:

构造方法是类的一种特殊的方法,

它的主要作用是完成对新对象的初始化。(初始化你的成员属性(变量);

它有几个特点:

1、方法名和类名相同

2、没有返回值

3、在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化。

★一个类可以定义多个不同的构造方法。

★调用时:

★给予不同的初始值,调用的构造方法不同,构造方法虽同名,但系统会根据初始值来选定构造方法。

 

 

 

示例:系统提供默认构造函数

  public Pnguin()

  {   

  }

    F5单步跳入

    F6单步跳过

 

类的构造方法小结:

  1、构造方法名和类名相同;

  2、构造方法没有返回值;

  3、主要作用是完成对新对象的初始化;

  4、在创建新对象时,系统自动的调用该类的构造方法;

  5、一个类可以有多个构造方法;

  6、每个类都有一个默认的构造方法。

  7、构造方法一般使用public修饰,但在单例模式中,也可以使用private修饰

7构造方法重载:

自定义构造方法:系统不再提供默认无参构造方法

 

 

构造方法重载的调用:

 

Eg:说出运行结果:

 

Eg:错误示例

8、方法重载的判断依据:

       必须在同一个类里

       方法名相同

       参数列表(方法参数的个数或参数类型)不同

       与方法返回值和方法修饰符没有任何关系。

          ▲在使用this调用自身的其他构造方法时,只能作为第一条语句;

9、static修饰符:static可以用来修饰属性、方法和代码块

        ●static代码块://静态代码块只能给static属性赋初始值;永远都比构造方法先执行一步;

            语法: static                 

        {   

        }

            eg:static   {

      name=“小明”;

      System.out.print(“我是静态代码块”);

     }                           

        ●static修饰的变量属于这个类所有,即由这个类创建的所有对象公用一个static变量;

        ●把static修饰的属性和方法成为类属性(类变量)和类方法,

  ●不用static修饰的属性和方法属于单个对象,通常称为实例属性(实例变量)和实例方法;

类变量是该类的所有对象共享的变量,

任何一个该类的对象去访问它时,取到的都是相同的值,

同样任何一个该类的对象去修改它时,修改的也是同一个变量。

 

定义语法:

      访问修饰符 static 数据类型 变量名;

访问类变量:

      类名.类变量名  或者  对象名.类变量名

类方法是属于所有对象实例的

语法:

      访问修饰符 static 数据返回类型 方法名(){}

    注意:类方法中不能访问非静态变量(类变量)。

使用:

  类名.类方法名 或者 对象名.类方法名

    ★static静态的方法可以访问static静态变量,不能访问非静态变量(类变量)

          ★非静态方法可以访问非静态变量(类变量),同时也可以访问static静态变量。

       ▲java中规则:类变量原则上用类方法去访问或操作

类变量与实例变量区别:

  加上static称为类变量或静态变量,否则称为实例变量

  类变量是与类相关的,公共的属性

  实例变量属于每个对象个体的属性

  类变量可以通过 [类名.类变量名]  直接访问

类方法小结

  类方法属于与类相关的,公共的方法

  实例方法属于每个对象个体的方法

  类方法可以通过 [类名.类方法名]  直接访问

类的成员方法(函数)

1、方法的参数列表可以是多个,参数列表可以是多个,并且数据类型可以是任意的类型int float double char..

      访问修饰符 返回数据类型 函数名(参数列表){

            语句; //函数主体

      }

2、方法可以没有返回值,返回类型可以是任意的数据类型(int,float,double,char..)也可以没有返回值void表示没有返回值

      访问修饰符 返回数据类型 函数名(形参列表){

            语句; //函数主体

      }

 

static修饰与非static修饰的区别

 

static、非private修饰

 非static、private修饰

属性

类属性、类变量

实例属性、实例变量

方法

类方法

实例方法

调用方式

类名.属性

类名.方法()

对象.属性

对象.方法()

对象.属性

对象.方法()

归属

单个对象

 

         在加载类的过程中,先完成静态变量的分配,在执行静态块两者在创建对象之前执行;

    ◆类属性和类方法可以通过类名和对象名访问,实例属性和实例方法只能通过对象名访问

    ◆类属性只能访问类属性和其他类方法;

    ◆静态方法中不能使用this和super关键字;

    ◆在类中可以定义static变量,在方法里不可以定义static变量,也就是说,类变量不能是局部变量;

    ◆构造方法没有返回值类型,,如果有,则不是构造方法,而是和构造方法同名的成员方法

10、封装:封装的实质就是将类的状态信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

步骤:

  1.修改属性的可见性,

  2.设置setter和getter方法,

  3.设置属性的存取限制。

    ●好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。

封装是面向对象的三大特性之一,就是将类的状态信息隐藏在内部,

不允许外部程序直接访问,

而是通过该类提供的方法来实现对隐藏信息的操作和访问;

封装的好处:

        只能通过规定方法访问数据

        隐藏类的实现细节

        方便加入控制语句

        方便修改实现

        

java提供四种访问控制修饰符号控制方法和变量的访问权限:

  1、公开级别:用public修饰,对外公开,可以被同一个项目中的所有类访问具有项目可见性,这是最大的访问权限;

  2、受保护级别:用protected修饰,对子类和同一个包中的类公开,可以被同一个包中的类访问,被同一个项目中不同包中的子类访问;

  3、默认级别:没有修饰符号,向同一个包的类公开,成员变量和方法只能被同一个包里的类访问,具有包可见性;

  4、私有级别:用private修饰,只有类本身可以访问,不对外公开,成员变量和方法只能在某定义的类中被访问,具有类可见性;

四种访问级别的访问范围:

访问级别

访问控制修饰符

同类

同包

子类

不同包

公  开

Public

受保护

Protected

默  认

没有修饰符

私  有

private

 

11、this关键字:

               

 

this的用法:

1、表示对当前对象的引用;

2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分,其实这是第一种用法的特例,比较常用;

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。注:只能引用一个构造方法且必须位于开始!

   

  

注:类方法指的静态方法,不能使用this。

    在构造方法内调用其他构造方法,this(),super()都要放在第一位。

this关键字属于调用(即调用具体方法、属性)的发起者,当类实例化时,调用者就是指的具体的实例对象,当没有实例化对象时,则是类本身调用

12附加:

一个Java文件(.java)中可以包含多个类,但是只能包含一个公共类(public),这个公共类名与Java文件名要保持一致;

创建对象不一定非要通过new关键字;(见下面详解)

  ◆java中实例化对象是为了更好的调用,类是为了定义,而对象是实体,正确的是把类实例化为对象并调用方法,

  ★java中就有创建实例化对象的五种方式

    1、用new语句创建对象,这是最常见的创建对象的方法。

    2、通过工厂方法返回对象,如:String str = String.valueOf(23);

    3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

      如:Object obj = Class.forName("java.lang.Object").newInstance();

    4、调用对象的clone()方法。

    5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

属性可以是简单变量,也可以是一个对象。对象中并非必须有属性和方法,可以只有属性,也可以只有方法;

对象被赋值后,只与当前对象有关系。和其他对象没有关联。

●JAVA是一种强语言类型;

类的属性可以被赋值,方法也可以有具体实现;

面向对象优点:增加代码复用性、有利于信息隐藏、便于在程序中模拟现实中的实体、与人类思维习惯一致、提高程序的可维护性和安全性;

  

封装的优点:可增强数据的访问限制,降低各模块之间的依赖程度,也可以提高代码的复用程度,增强程序的可维护性;

 

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

在类定义中用private关键字来隐藏属性。

是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法唯一的途径就是通过类本身,

类才有资格调用它所拥有的资源(方法,数据项属性等等)。所以第一个好处就是数据的安全性提高了。

是通过隐藏隔离,只允许外部对类做有限的访问,开发者可以自由的改变类的内部实现,而无需修改使用该类的那些程序。

只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就可以自由改变,各取所需,利于分工。

就是提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤

类是对象的抽象,类是对象的模板,对象是类的具体,是类的实例。

类中可以定义属性(类的属性描述了类所具有的特征)和方法,

在建立对象时,即是对类的实例化,对象的行为和属性由类来决定,即对象的行为和属性被封装在类中 。

      

在Java中,定义一个类使用关键字class,而创建类的对象则使用new关键字。

function一般是用在Java Script中去定义函数。

#define 关键字是C语言中宏定义关键字,

dim则是VB语言中定义变量的关键字。

●Java中类的创建方式是: 访问修饰符 class 类名{ }

实例方法可以调用本类的方法,不能调用其他类的实例方法,

但不一定可以调用父类或其他类的方法,因为在其他的方法中可能是私有的,访问修饰符是private或protected,static方法等,不可以直接调用;

枚举指由一组固定的常数组成的类型。枚举也可以像一般的类一样添加方法和属性,可以为它添加静态和非静态的属性或方法。

创建类的步骤:创建类时必须有类名,使用class关键字,使用.访问对象的属性和方法


非静态的可以访问静态的,静态的不可以访问非静态的;

输出静态变量的值,可以通过类名调用,也可以通过对象调用;

在构造方法和普通方法中能使用 this.静态变量但是在静态变量中不能使用;

能够在方法中使用的也可以是局部变量也可以是成员变量。

修饰实例变量要用public,成员变量会有默认的初始值,可以不用给;

构造方法名必须和类名一致,并且没有返回值,构造方法是在创建对象时调用,对其进行初始化工作,

构造方法一般使用public修饰,但在单例模式中,也可以使用private修饰

使用对象的属性形式是:对象.属性,

使用对象的方法形式是对象.方法名(),

用来描述对象动态特征(行为)的一个动作序列是对象的方法。

使用JAVA封装的步骤:

 

封装的步骤:

 

 

 

posted @ 2018-08-17 17:28  逆風〠飛翔  Views(782)  Comments(0Edit  收藏  举报