1.1 类和对象
- 类和对象是面向对象编程最重要、最核心的两个基本概念
- 类是对一类事物描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称实例(instance)
1.1.1 类和对象的概念
- 对象表示现实世界中某个具体的事物
- 抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程
- 类是具有共同属性和行为的对象的抽象
- 类也称为模板,因为它们提供了对象的基本框架
- 类可以定义为数据和方法的集合
类
- 类以共同特性和操作定义实体
- 类是用于组合各个对象所共有操作和属性的一种机制
属性
- 事物的特性在类中表示为变量
- 每个对象的每个属性都拥有其特有的值
- 属性名称由类的所有实例共享
方法
- 对象执行的操作称为方法
- 操作的具体实现
- 方法指定操作对象数据的方式
- 在得到操作请求时指定如何做的算法
1.1.2 类的语法结构
语法:
[修饰符]class类名
{
定义构造方法;
定义属性;
定义方法;
}
- 修饰符可以是public、final、abstract或完全省略这三个修饰符
- 类名必须是一个合法的标识符
- 类中各成员之间的定义顺序对类的定义没有任何影响
1.1.3 对象的创建与使用
声明对象
格式:类名 对象名, 例如:Hero hero;
实例化对象
格式:对象名 = new 构造方法(),例如:hero = new 构造方法();
属性的调用
格式:对象名.属性,例如:hero.name=“zhang san”;
方法的调用
格式:对象名.方法名([参数列表]),例如:hero.run(30)”;
示例:创建一个英雄对象并测试该对象属性的赋值和方法调用
public class Hero {
String name; //名字
//奔跑方法
public void run(int speed){
System.out.println(speed+"m/s的速度飞速狂奔");
}
public static void main(String[] args) {
//创建英雄对象
Hero hero = new Hero();
//通过对象实例调用name属性并为该属性赋值
hero.name="黑暗游侠";
System.out.println("英雄的名字:"+hero.name);
hero1.run(60);//调用hero对象run(speed)方法
}
}
1.1.4 对象和引用
- 类是一种引用数据类型
- 对象名是一个引用名
- 对象名存放着栈内存I栈内存
- 想比堆内存空间小但读取速度快
示例:创建Dota游戏中的防御塔类,通过两个坐属性显示防御塔所在的位置
代码如下:
public class TowerDefense {
int x;
int y;
public void showMessage() {
System.out.println("防御塔的坐标位置:" + x + "," + y);
}
public static void main(String[] args) {
TowerDefense td = new TowerDefense();
td.x=2;
td.y=3;
td.showMessage();
}
}
1.2 方法的详解
- 方法是类或对象的行为特征的抽象
- 通过方法可以实现对类的属性的操作
功能封装 - 实现代码模块化重用
1.2.1 方法的声明
语法:
[<修饰符>] 返回类型 方法名([参数列表])
{
方法体
}
- 修饰符表示方法的访问权限。修饰符有private、缺省访问修饰符、protected和public
- 返回类型为方法返回值的类型(方法没有返回值,则方法的返回类型为void)
- 定义时为形参,它没有分配内存,运行时才分配内存
- 如果有多个参数,相邻的参数之间用逗号隔开
- 对于有返回值的方法,方法体中至少有一条return语句
- 方法不能嵌套定义
示例:在英雄类中设计一个战斗方法
class Hero {
// 定义战斗方法
void battle(){
/*实现具体的英雄战斗的业务逻辑*/
}
}
1.2.2 方法调用
在main方法中调用对象的实例方法步骤:
- 在类的main0方法中创建可以调用方法的实例
- 将实例赋值给指定的引用变量,通过引用“变量.方法名”的形式调用方法
说明:如果方法的返回类型为void,说明方法没有返回值,所以在main0方法中调用
时,可以将此方法作为一条语句直接在程序中使用
示例:在英雄类中定义战斗方法并测试该方法的调用
public class Hero{
String name;
int age;
public void battle(){
System.out.println(name+"在肆无忌惮的战斗他的年龄才只有"+age+"
可他的血量只有1%了...");
}
public static void main(String[] args) {
Hero hero = new Hero();//创建英雄对象
hero.name="暗夜魔王";//为name属性赋值
hero.age = 15;//为age属性赋值
hero.battle();//使用该对象的battle()方法
}
}
1.2.3 方法参数传递
参数的传递是指实际参数向形参值的传递的过程。
Java中方法参数的传递方式为值传递
将实参的副本(复制品)传入给形参实参本身不会受到任何影响
解释:
Java中的参教传递类似于Dota游戏中英雄使用的幻象,当英雄使用幻象时就会产生一
个与该英雄相同的复制品,幻象与英雄本身有相同的能力,但无论该幻象受到任何攻击
和伤害都不会影响英雄本身传入方法的是实参值的复制品,无论方法中对该复制品进
行何种操作,实际参数值均不会受到任何影响