Java-面向对象程序设计(一)

面向对象(OOP)特性
1.一切皆是对象
2.程序就是一堆互相发送消息的对象
3.每个对象都有自己的存储空间,里面是其他的对象
4.每个对象都有一个类型
5.所有属于某个特定类的对象可以提供相同的服务
对象=属性+服务
数据:属性或状态
操作:函数
把数据和对数据的操作放在一起称为封装,用户只能通过成员函数调用数据从而对数据起保护作用。
定义类
类包括成员变量(数据成员)和成员函数两部分,类的不同对象
不同于类外部的本地变量(未经初始化会有问题),java会给类的成员变量默认初始值为0。
如下定义一个自动售货机类:

在这里插入图片描述
操作(成员函数)有:显示提示信息 showPrompt(); 用户输入钱 insertMoney(); 显示余额 showBanlance(); 出货getFood()。

创建对象
new VendingMachine();
VendingMachine vm=new VendingMachine();
创建了对象变量vm接受new制造出的VendingMachine对象,对象变量是对象的管理者。
对象变量后+点运算符(成员选择运算符) 可让对象做事:vm.getFood();
在这里插入图片描述
vm和vm1是同一个类的两个不同的对象。输出如下:

在这里插入图片描述
this
this是成员函数的一个特殊的固有的本地变量,它表达了调用该函数的这个对象,是我们看不到的。
如成员函数中的语句:banlance+=amount; 相当于this.banlance+=amount; 其实知道有就行,不必刻意写出。
如:vm.insertMoney(),这次调用临时建立了insertMoney()和vm之间的关系,让函数内部的成员变量指的是vm的成员变量。

在一个成员函数内部调用另一个成员函数,直接调用即可,在外部需要对象名+点运算符调用。
本地变量和成员变量
定义在函数内部的变量称为本地变量;本地变量的生存期和作用域在函数内部;成员变量的生存期是对象的生存期,作用域是类内部的成员函数(即成员函数可以使用成员变量)。
java有垃圾自动回收机制,不必关心对象和变量何时消失,会自动帮你清除掉。
访问属性
访问修饰符:
public:表示公开的类和变量,既所有的类都可以引入使用的。如果你把许多个类写到一个.java文件里,这时就只能有一个是public类,也就是主函数所在的那个类,如果你把这些类分开写到不同.java文件里,这时候都加public就没问题

protected:表示受保护的类,只有子孙类和本类可以引入使用

private:表示私人的,只有在本类中可以引入使用。一个类的不同对象也可以互相访问私有成员。

default(默认,不写修饰符即default):表示同包中和本类中可以引入使用

所以显而易见,如果一个class前面如果添加了public修饰则可以被所有类引入使用,如果没有加任何修饰词,那么就只能够被同包中的类和本类引入使用。
下面是一个表示分数的类:
在这里插入图片描述

构造函数
如上图中的public Fraction(int a,int b)
如果一个成员函数的名字和类的名字完全相同,则在创建这个类的每一个对象的时候都会自动调用这个函数——构造函数。 这个函数不能有返回类型,作用就是给对象初始化。

一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。

一个类可以重载多个构造函数,其参数表不同。创建对象的时候给出不同的参数值,就会自动调用不同的构造函数。通过this()还可以调用其他构造函数。

对象交互
在这里插入图片描述

Clock类中成员变量是两个Display类的对象。

包(package)
为了更好地组织类,Java 提供了包机制(Java中的文件夹),用于区别类名的命名空间。
一个类中,包的声明必须放在类中第一行;
包名也是标识符全部都是小写,多级之间使用.隔开;一般为了避免包名重复,都是公司域名反转加项目名加模块名
不同包之间的类的相互访问:1.通过带包名的完整路径访问 2.通过导包访问。其中导包需要使用关键字:import;导包的位置:在包声明(package)下面,类(class)上面;导包的格式:import 完整包名.类名
类变量和类方法
aka:静态变量和静态方法
1)static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
  static成员变量的初始化顺序按照定义的顺序进行初始化。
2) static方法也称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。

与C/C++中的static不同,Java中的static关键字不会影响到变量或者方法的作用域。在Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值