类与对象
(1)对象
客观的存在在这个世界上的每一个事物,我们都称之为对象。
万事万物皆为对象!
世界是由什么组成的?
对象的特征——属性
属性 ——对象具有的各种特征(名词、形容词)
属性值 ——每个对象的每个属性拥有的特定值
例如:布兰尼和朱丽叶的体重不一样
方法 ——对象所具备的行为/功能
(2)类
类就是从具备相同属性和方法的多个对象中抽取出来的
类和对象有什么区别呢?
类是一个抽象的概念,比如说:“人类”
对象是一个你能够看得到、摸得着的具体实体
(3)面向对象的编程
面向对象—针对具体的对象
是把构成问题的事务分解成各个对象
建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为和特性
无序性是关键
面向对象编程
是Java的核心编程思想,其它语言也有,如 C#
面向对象编程的三个重要的原则
封装
继承
多态性
攒机过程类似面向对象编程
配件就是对象,先装哪个配件没有严格固定的顺序
每个配件都封装好了,无需你自己设计
(4)类声明和类体
类是Java程序的核心,它定义了对象的形状和本质,可以用类来创建对象。当使用一个类创建了一个对象时,通常说给出了这个类的一个实例。
类由类声明和类体构成,它的基本格式如下:
class className
{
//body
}
class是声明类的关键字,每个字母都小写。“class ClassName”是类的声明部分,“ClassName”需符合Java声明类名的标准规范,即每个单词的第一个字母需要大写 {}”以及之间的内容称为类体。
(5)类声明
Java的类声明是创建类时必须对类的一些性质进行描述。包括类名、类的父类、类所实现的接口及类的修饰符。它的一般格式为:
[public][abstract|final] class ClassName [extends superclassName]
[implements interfaceNameList]
关键字class前面是可选修饰符的,其中:
public:访问权修饰词,允许所有的类访问它,如果某个类以public做修饰词,那么这个类的类名必须和Java文件名(*.java)相同。
abstract:对父类的修饰词,当这个类声明为抽象类时,该类就不能被实例化。
final:对子类的修饰词,当这个类被声明为最终类时,它不能再有子类。
如果这个类上面还有父类,那么就需要用到extends修饰词,在之后跟父类名。如果要实现某个接口,就需要用到implements修饰词,后面跟接口名。
(5-1)类的定义示例
定义一个求圆面积的类。
public class Circle {
private double radius;
private double area;
final double PI=3.14;
public void setRadius(double r) {
radius=r;
}
public double getArea( ) {
return PI*radius*radius;
}
}
(6)类体的构成
紧跟在类名后面的大括号以及大括号之间的内容称之为类体。
我们在程序中写类的目的就是为描述一类事物共有的属性和功能。
类体将完成对数据及对数据的操作进行封装。
类体内容由两种类型构成:
成员变量:
通过变量声明定义的变量,称之为成员变量或域,它用来描述类创建的对象的属性。
方法:
类体主要由方法构成。方法可分为构造方法和普通方法。其中构造方法具有重要地位,它供类创建对象时使用,
用来给出类所创建的对象的初始状态。普通方法可以由类所创建的对象调用,对象调用这些方法操作成员变量形成一定的算法,
体现了对象具有某种功能。
class Car{
int speed;
double high;//定义变量
double width;
public Car(){//构造方法
}
int getSpeed(){//定义方法
return speed;
}
double getHigh(){
return high;
}
double getWidth(){
return width;
}
}
(7)对象的定义
类是抽象,而对象是具体。
在Java的编程应用中,其实就是对具体的对象进行操作。也就是说,以类作为一个模板,创建一个对象作为类的一个具体实例。Object类是所有类的父类。
对象的创建
创建对象的过程就是实例化类的过程:充分运用类的模板特性,用类来生产出它的实例。可以将类比作对象的创建工厂。
创建对象时,需要做三件事:对象的声明、对象的实例化及对象的初始化。
(7-1)对象的声明
对象声明的一般格式如下:
类的名字 对象名字;
例如:
存在一个类:
class People{
String name;
int age;
}
然后即可声明该类的对象:
People galen;
这里,People是类的名字,galen是我们声明的对象的名字。需要注意的是,类名必须是Java编译器能找到的,也就是说必须存在该类。用类声明的数据称为类类型变量,即为对象,如People类声明的galen对象。
(7-2)对象的实例化和初始化
使用new运算符可以实例化一个已经声明的对象,并按照对象的类型给它分配内存。
通常用new运算符实例化一个对象时,会同时调用类的构造方法对它进行初始化。
如果该类中没有写构造方法,系统会调用默认的构造方法,默认的构造方法是不带参数的。
例如,实例化上面已经声明的galen对象:
galen=new People();
(8)构造方法
People类中可以同时存在多个构造方法,假如People类中存在这样两个构造方法:
public People(){
}
public People(int i){
age=i;
}
那么:
(1)galen=new People();
或
(2)galen=new People(10);
这些都是合法的。但是如果People中只有一个带int型参数的构造方法,那么实例化和初始化对象时,只有(2)是合法的。
注意事项
在这里需要注意的是,类的构造方法是特殊的类方法,它必须和类同名,并且不能有返回类型,也不能用void来标注。
下面我们来分析代码:
- galen=new People(10);
- 它会实现两件事。
- 为成员变量a分配内存空间,然后执行构造方法中的代码。
- 给出一个信息,已确保成员变量age是属于对象galen。
对于People类来说,为变量age分配内存空间后,将返回一个引用赋给对象变量galen,也就是返回一个“地址号”给galen。
(9)对象的使用(调用)
一个对象被创建后,就可以来使用该对象。
使用对象可分为使用对象的变量和调用对象的方法。
使用对象的变量
对象被创建后,就有了自己的变量,即对象的实体。通过使用运算符“.”,对象可以实现对自己的变量的访问。使用的格式如下:
对象名.变量名
例如People类的对象galen,就可以使用:galen.name,来访问变量名name。
调用对象的方法
如果创建对象的类里面存在着方法,那么对象也可以使用运算符“.”来调用类的方法,从而产生一定的行为功能。
当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。使用的格式如下:
对象名.方法名(参数)
加入 People 类中有方法函数showAge(),用来输出年龄
例如:galen.showAge();
(10)对象的属性
成员变量
用来刻画类创建的对象的属性,其中一部分成员变量称为实例变量,另一部分称为静态变量或类变量。
成员常量
如果一个成员变量的修饰词为final,这个变量就称为常量。
类变量和实例变量
类变量和实例变量是很容易区分的。类变量就是以关键字static为修饰词的成员变量,而不用static修饰词的成员变量就叫实例变量。例如:
class Student{
int num;//学号
String name;//姓名
static int c;
}
final变量的说明
final变量就是我们常说的常量
按照Java的命名规范,常量的名字的所有字母都应该大写
final变量是不占用内存的,所以在声明final变量时,必须初始化
final变量不同于类变量和实例变量,对象虽然可以使用它,但是不能对它进行更改操作