初学:类和对象

1、面向对象

1-1 初识:面向对象

        Java是一门面向对象(Object Oriented Program,继承OOP)的语言,也称OOP语言。面向对象即在完成一件事情时,主要依靠对象之间的交互来完成。

1-2 面向对象与面向过程

面向过程

分析出解决问题所需要的步骤,然后用函数把这些步骤实现,在一步一步的具体步骤中按顺序调用函数。

eg:下五子棋,面向过程的设计思路是首先分析解决这个问题的步骤:

(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。

用函数实现上面一个一个的步骤,然后在下五子棋的主函数里依次调用上面的函数:

 面向对象

        在日常生活或编程中,简单的问题可以用面向过程的思路来解决,但当问题的规模变得更大时,用面向过程的思想是远远不够的。所以出现了面向对象的编程思想。世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:

(1)黑白双方,这两方的行为是一样的。

(2)棋盘系统,负责绘制画面

(3)规则系统,负责判定犯规、输赢等。

然后赋予每个对象一些属性和行为:

(4)第一类对象(黑白双方)负责接受用户输入,并告知第二类对象(棋盘系统)棋子布局的变化,棋盘系统接收到了棋子的变化,并负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以看出,面向对象是以功能来划分问题而不是以步骤解决

面向过程和面向对象并不是一门语言,而是解决问题的方法,均有其专门的应用场景。

2、类的定义

        由以上可知,每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

2-1 认识类

        类是用来描述对象(实体)的,主要描述该实体具有哪些属性,哪些功能。

        类:类是一个模板,它描述一类对象的行为和状态。

        对象:对象是类的一个实例,有状态和行为

eg: 定义狗类,其属性有:名字、年龄、颜色;行为有:摇尾巴、叫、吃等

      一个狗为一个对象,名字为“小旺”,“2”,“白”;可以 摇尾巴,叫,吃。

2-2 类的定义

-> 定义类的语法格式

class className{

        field;   //->称为 字段 or 成员变量

        method;    //->称为 方法 or 成员方法

}

        使用class关键字;className为自定义的类名;类中包含的为类的成员。属性主要用来描述类,称为类的成员属性 or 成员方法;方法说明类主要有哪些功能,成为类的成员方法方法中的变量为局部变量

eg:定义一个狗类:

 -> 一般一个文件中只定义一个类;

-> main方法所在的类一般要用public修饰

-> public修饰的类必须要与文件名相同

3、类的实例化

 类即是用户自定义了一个新的类型

类的实例化即是用类类型创建对象的过程【用类产生对象的过程】。

eg:

输出

 -> 采用new关键字,配合类名来实例化对象;

-> 使用 . 来访问对象中的属性及方法;

-> 同一个类可以创建多个对象;

-> 成员变量不用初始化。对于引用数据类型,默认为null;基本数据类型为0、false等。

eg:

输出

 总结类与对象:

-> 类相当于一个模板。用来对一个实体进行描述,限定了类有哪些成员;

-> 类是一种自定义的类型,可以用来定义变量;

-> 一个类可以实例化多个对象

 

 ->实例化对象 ,成员方法调用时会在栈上开辟栈帧,成员变量占用的空间如下图:

4、this引用

首先看个例子:该代码创建了一个Date类,在main中创建了3个对象d1,d2,d3。通过类中的成员方法对对象进行了设置和打印。

4-1 形参名 与 成员变量名 相同的情况

eg1:

         形参为局部变量,而局部变量具有优先性。此时这些变量

都是局部变量,不是成员变量了。 输出均为初始值。

eg2:

4-2 this引用

 -> this引用,指向当前对象【成员方法运行时调用该成员方法的对象

 -> this的类型: 对应类 类型的引用。即哪个对象调用就是哪个对象的引用类型;

 -> this只能在 成员方法 中使用;

 -> 在成员方法中,this只能引用当前对象,不能再引用其他对象;

-> this不能出现在静态方法中;

5、对象的初始化

5-1 引入

在java方法内部定义一个局部变量,必须进行初始化

如下例子,num没有进行初始化,会出错:

 如果是一个对象的话,可以编译运行。输出时为默认初始值0。

        对象可以,而一个局部变量却不行。这是因为在实例化对象时,调用了其类中不带参数的构造方法。

5-2 构造方法 【可以进行初始化】

-> 构造方法是一个特殊的成员方法;

-> 构造方法的名字必须与类名相同,在创建对象时,由编译器自动调用,在整个对象的生命周期        只调用一次。

eg:

-> 构造方法的作用:对 对象中的成员进行初始化,不负责给对象开辟空间。

-> 构造方法:名字必须与类名相同;

                       没有返回值类型;

                       构造方法可以重载;

                       创建对象时由编译器自动调用,并且在对象的生命周期只调用一次;

                       如果自己没有写任何构造方法,那么编译器会默认生成一个不带参数的构造方法

                       如果用户定义了,那么编译器不生成;

eg:重载:

 --> 构造方法中,可以通过this调用其他构造方法

eg:在无参的构造方法中调用带有3个参数的构造方法

 -> this()必须放到构造方法的第一行;且不能形成环的调用;【eg:无参调用带3个参的,带3个参的又调用无参】

5-3 默认初始化

        即构造方法为对象进行初始化了,初始化的值为默认值。基本数据类型为0,false,/u0000;引用数据类型为null;

5-4 就地初始化

        在声明变量时,就直接给了初始值。  -> 不建议

eg:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值