类和对象
类(class)是对一类事物的抽象描述。对象(object) 是某一类中一个或多个具体的事物,又可称为实例(instance)。
类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。
类包括事物的属性和行为。属性就是该事物的状态信息; 行为就是该事物能够做什么。
举个例子:小猫。
属性:名字、体重、年龄、颜色。
行为:走、跑、叫。
对象是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性 和行为。
举个例子:现实中,一类事物的一个实例:一只小猫。
属性:dear、5kg、2 years、yellow。
行为:溜墙根走、蹦跶的跑、喵喵叫。
类的定义
class 类名 //类定义
{
域定义;
方法定义;
}
数据类型 域名;//域定义
方法类型 方法名 (参数)//方法定义
{
方法体
}
其中,①域(field),是对象的属性,可称成员变量。方法(method),就是C/C++中的函数,它是对象的行为,可称成员方法。
②若不给出域的初值,它也会被初始化,具体见前面的默认初始化。方法的参数都要单独说明数据类型。
③定义在方法中的变量是一般变量,也可称为局部变量。如果成员变量与方法中的局部变量同名,那么方法中只能访问到局部变量,也就是说在方法中局部变量覆盖成员变量。
④方法若是没有类型,写void 也不可以。而且方法名必须和类名一致。
举个例子:平面上的点
class Point
{
int x,y;
void move(int movex,int movey)
{
x+=movex;
y+=movey;
}
void print()
{
printIn("("+x+","+y+")");
}
}
对象的声明和创建
类 对象;//声明
如 Point p1,p2;//上一个例子的延续
new 方法();//创建
如 p1=new Point();
Point p1=new Point();//同时声明和创建
对象的使用
对象名 . 域
对象名 . 方法名(参数),其中“. "是分量运算符。
方法的重载
所谓方法重载就是在一个作用域(如类)中定义多个重名的方法。方法重载之要求方法的名字相同且形参不同,与方法的修饰符和返回值类型无关。一般地,具有相似性质或功能地运算使用重载。
构造方法
创建对象时通过new调用类中的构造方法。如果类中没有构造方法,则不能创建对象。所以定义类时记得定义构造方法。在一个类中也可以定义多个构造方法,形成构造方法重载。
如果类中没有构造方法,Java编译器会自动生成一个默认的构造方法,这个构造方法没有参数,方法体也为空。
对前面的知识举个例子:(顺接前面的例子)
class Point
{
int x,y;
Point (int x1,int y1)//构造方法重载
{
x=x1;
y=y1;
}
Point ()//构造方法重载
{
x=0;
y=0;
}
void move(int movex,int movey)
{
x+=movex;
y+=movey;
}
void print()
{
printIn("("+x+","+y+")");
}
}
public static void main()
{
Point p1;
p1=new Point(5,5);
Point p2=new Point();
p1.print;
p2.print;
p1.move(6,6);
p2.move(9,9);
p1.print;
p2.print;
}
所以方法可以创建对象,也可以对对象初始化。
成员变量和局部变量区别
①在类中的位置不同!
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
②作用范围不一样!
成员变量:类中
局部变量:方法中
③初始化值的不同!
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
④在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
⑤生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失