(Java基础)面向对象——类和对象

早期,我们使用C语言编写程序,是将待解决的问题分解成几个步骤,让计算机根据编排的步骤来执行。以过程为中心来设计开发程序,我们称为面向过程编程。在解决很多类似问题时,我们每一次都需要重新规划过程,重新设计步骤,这样就会比较麻烦,也会产生效率低的问题。因此我们换个角度来思考问题,即以问题本身为核心来分析问题。

在分析问题的时候,以问题涉及的事物(事情+物体)为核心来分析。在英文中事物即Object,此单词的另外一个中文翻译是对象。所以,以事物为核心的分析方式和编程方式,我们称为面向对象编程。

所谓的面向对象,是以具体的事或物为中心进行分析的机制,这种方式更符合日常生活中分析问题的思考方式,所以在现代计算机语言中用的非常多。面向对象是一种编程思想,而不是语法,我们通过编程语言的语法来体现面向对象的思想。Java语言就是面向对象的,提供了很多面向对象的语法。接下来探讨在Java中面向对象的类和对象。

类和对象:类表示归纳和整理,对象表示具体的事物

类的基本语法结构
         class 类名{
             特征(属性);
             功能(方法);
         }

创建对象的语法:
         new 类名();

写程序步骤:

  1. 声明类,class 类名{ }
  2. 创建对象,new 类名()
  3. 声明属性(即类中的变量,0个或多个)格式:属性类型  属性名称 = 属性值
  4. 声明方法(行为,0个或多个)格式:void 方法名(参数){ 功能代码 }
  5. 执行方法,格式:对象.属性;对象.方法名()

按步骤完成下面的例子,练习类和对象的提炼:

练习一:

package chapter04;

public class Object01 {
	public static void main(String[] args) {
		//所谓面向对象,就是分析问题时,以问题所涉及的事或物为中心的分析方式
		//问题:做一道菜,红烧排骨,写出面向对象的制作过程
		//类:菜; 对象:红烧排骨
		
//引用数据类型
		Cooking c = new Cooking();//创建对象
		c.name = "红烧排骨";
		c.food = "排骨";
		c.execute();
		System.out.println();
//第二道菜(第二个对象)
		Cooking c1 = new Cooking();
		c1.name = "红烧鱼";
		c1.food = "鲫鱼";
		c1.execute();
	}
}
class Cooking {//声明类,首字母大写(命名规范)
	//声明特征(属性)
	String name;		//名字
	String type ="红烧";	//类型
	String food;		//食材
	String relish = "大料";	//佐料
	//执行
	void execute() {
		System.out.println("准备食材:" + food);//字符串拼接操作,使用'+'号连接在一起
		System.out.println("准备佐料:" + relish);
		System.out.println("开始烹饪");
		System.out.println(name + "烹饪完成");
	}
}

练习二:

package chapter04;

public class Object02 {
	public static void main(String[] args) {
		//类:动物; 对象:猫,狗
		Animal a1 = new Animal();
		a1.type = "猫";
		a1.name = "小黑";
		a1.run();
		
		Animal a2 = new Animal();
		a2.type = "狗";
		a2.name = "大黄";
		a2.run();
	}
}
class Animal {
	String type;
	String name;
	void run() {
		System.out.println(type + " " + name + "跑开了");
	}
}

练习三:

package chapter04;

public class Object03 {
	public static void main(String[] args) {
		//狗:2只,小黑,小白
		Dog dog1 = new Dog();
		dog1.color = "white";
		dog1.name = "小白";
		dog1.run();
		
		Dog dog2 = new Dog();
		dog2.color = "black";
		dog2.name = "小黑";
		dog2.run();
	}
}
class Dog {
	String color;
	String name;
	void run() {
		System.out.println(name + "跑开了");
	}
}

练习四:

package chapter04;

public class Object04 {
	public static void main(String[] args) {
		//老师和学生
		Teacher t = new Teacher();
		t.name = "zhangsan";
		t.teach();
		
		Student s = new Student();
		s.name = "lisi";
		s.study();
	}
}
class Teacher {
	String name;
	void teach() {
		System.out.println(name + "老师在讲课");
	}
}
class Student {
	String name;
	void study() {
		System.out.println("学生" + name + "在听课");
	}
}

总结:

  1. 类是结构体,里面包含了属性(特征)和方法(行为),会有很多的对象
  2. class是关键字,关键字全是小写
  3. 类名是类的名称,遵循标识符的规则,一般情况下,类名首字母大写
  4. 对象是类的实例化(具象化):new 类名()记得加括号;new也是关键字,表示创建一个具体的对象,使用一次创建一次,每次都是全新的。
  5. 一般new出来的对象会赋值给变量,方便重复使用。
  6. 变量的类型就是对象的类型:如 Teacher t = new Teacher(); 但此处把对象赋值给 t 并不是把对象给 t ,即与基本数据类型的赋值不一样。解释见下面类、对象、变量之间的关系。

类、对象、变量之间的关系

首先将内存空间分为栈、堆、元空间三部分,栈内存中存储方法和对象,堆内存中存储对象,元空间内存储类的信息。

  1. 当我们想构建一个对象 Teacher ,并把对象的值赋值给变量 t 时,会看元空间中是否有类的信息,
  2. 如果有类的信息,会在堆内存中构建对象 Teacher ,
  3. 之后把对象的内存地址(引用地址)赋值给变量 t ,于是变量 t 的地址就指向了堆内存中的对象

这里注意区分基本数据类型与引用数据类型:基本数据类型赋值后直接存储到栈中,而不是堆内存中,操作时也是直接对栈内存操作;而 new 出来的对象是引用数据类型,即用图中箭头指向表示的。对象是将内存地址赋值给了变量,变量实际引用了内存中的对象,所以称之为引用变量,变量的类型称之为引用数据类型。

最后,介绍特殊的对象:空对象(NULL),没有引用的对象称为空对象,是一种特殊的值,也叫关键字对象。所有引用类型变量的默认取值都是null。

如 Teacher t1 = null;

null就是空对象,可以简单理解为没有图中 t 指向对象 Teacher 的箭头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多多想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值