【2面向对象】2-类和对象

本文介绍了Java中类和对象的概念,类是抽象的,包含属性和行为的集合,而对象是类的实例,具有特定的属性值和行为。讲解了如何定义类、创建及使用对象,包括成员变量和局部变量的区别、值传递和引用传递以及匿名对象的应用。通过实例展示了类和对象在Java编程中的应用。
    现实世界是由什么组成的?

请添加图片描述

           世界是由对象组成的

请添加图片描述

1.类和对象的概念

对象:是具体的事物

类:是对对象的抽象

对象:张三、李四、王五、赵六

抽取上述对象的相同的部分:

​ 年龄、姓名、身高、体重、打牌、去隔壁老王家、唱歌、跳舞、打王者荣耀、吃鸡…

天使类:

具体的四个天使对象:

请添加图片描述

抽象他们的 共同 的特点

  1. 带翅膀(带翅膀的不一定是天使,也可能是鸟人)
  2. 女孩
  3. 善良

2. Java类描述事物

​目前我们已经可以用计算机来表示八大基本数据类型,但是我们在开发的时候还要存储其他的数据,比如 一个人,一条狗,一张图片,一个视频等等,这种情况我们应该怎么实现?

我们学习编程语言的目的就是为了模拟现实世界的事物,实现信息化。其实呢在计算中使用Java语言模拟现实时间是很简单的,Java为我们提供了 ,所有Java是通过 来描述世界的

现实生活中如何描述一个事物:

  1. 属性 该事物的特征描述
  2. 行为 方法,该事物的动作行为

举个栗子描述:表示一条狗

  1. 属性 狗的品种 狗的颜色 狗的体重
  2. 行为 跳 叫 睡 吃

我们学习Java语言的最基本单位是类,在Java中使用 来描述事物

3.类和对象的关系

类:类是抽象的,是一组相关的属性和行为的集合,可以看出一个模板

对象:对象是具体的,是客观存在的实例,是该类事物的具体体现

举例: 老婆 翠花 = new 老婆();

类: 老婆 是一个类

对象: new 老婆(); 是一个对象, 取了一个名字叫 翠花

引用 叫 翠花相当于叫了老婆对象

请添加图片描述
对象的特征:

属性:对象具有的各个特征

每个对象的每个属性都拥有特定值

请添加图片描述

行为:对象执行的操作

请添加图片描述
对象:用来描述客观事物的一个实体,由一组属性和方法构成

列举出图片中的这辆跑车的属性和方法

请添加图片描述
列举出下图小狗的属性和行为

请添加图片描述

4.类和对象的具体使用

4.1 类的定义

类的理解:

  1. 类是用于来描述实现事物的
  2. 类是抽象
  3. 类是一个模板,是属性和方法的集合
  4. 类是Java中最基本的单位
  5. Java中使用class类描述类

Java中使用class类描述类

  1. 成员变量表示就是事物的属性
  2. 成员方法表示就是事物的行为

语法格式:

[访问权限修饰符] class 类名 {
    成员变量;
    成员方法;
}

定义一个类的步骤:

  1. 定义类名
  2. 编写类的属性
  3. 编写类的方法
/**
 * [访问权限修饰符] class 类名 {
	    成员变量;
	    成员方法;
	}
 * @author dpb
 *
 */
public class OOPDemo01 {

	public static void main(String[] args) {
		
	}
}

 class Dog{
	// --- 定义相关的属性
	// 姓名
	String name;
	// 年龄
	int age;
	// 颜色
	String color;
	
	// --- 定义相关的行为  方法
	public void eat(){
		System.out.println("吃大骨头...");
	}
	
	public void jump(){
		System.out.println("跳跃...");
	}
	
	
}

4.2 对象的创建和使用

对象的理解:

  1. 对象是客观存在的,是具体的
  2. 万事万物皆对象
  3. 对象是通过类刻画出来的
  4. 对象又叫实例,对象,引用,变量 …

4.2.1 如何创建对象

语法格式:

类名  对象名 = new 类名();
	/**
	 * 程序的入口
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// 创建一个Dog对象
		Dog wangcai = new Dog();
		System.out.println(wangcai);
		
	}

4.2.2 如何使用对象中的属性和方法

​ 对象创建出来了,如果调用相关的属性和方法呢?在Java中引用对象的成员:使用对象.属性/方法名 进行操作

  1. 引用属性: 对象名.属性
  2. 引用方法: 对象名.方法名()
/**
 * [访问权限修饰符] class 类名 {
	    成员变量;
	    成员方法;
	}
 * @author dpb
 *
 */
public class OOPDemo01 {

	/**
	 * 程序的入口
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		
		// 创建一个Dog对象
		Dog wangcai = new Dog();
		System.out.println(wangcai);
		System.out.println(wangcai.name);
		System.out.println(wangcai.age);
		System.out.println(wangcai.color);
		wangcai.name = "wangcai";
		wangcai.age = 3;
		wangcai.color = "白色";
		System.out.println(wangcai.name);
		System.out.println(wangcai.age);
		System.out.println(wangcai.color);
		// 成员方法的调用
		wangcai.eat();
		wangcai.jump();
	}
}

 class Dog{
	// --- 定义相关的属性
	// 姓名
	String name;
	// 年龄
	int age;
	// 颜色
	String color;
	
	// --- 定义相关的行为  方法
	public void eat(){
		System.out.println("吃大骨头...");
	}
	
	public void jump(){
		System.out.println("跳跃...");
	}
	
	
}

4.2.3 课堂案例

1.编写一个学生类,输出学生相关的信息

请添加图片描述

public class OOPDemo02 {

	public static void main(String[] args) {
		Student zs = new Student();
		zs.printInfo();
	}

}
// 定义一个学生类
class Student{
	// 定义相关的属性  姓名 年龄 班级 爱好
	String name;
	int age;
	String className;
	String hobby;
	
	// 定义相关的行为  打印学生信息
	public void printInfo(){
		System.out.println("name="+name+"\t age="+age 
				+ "\t className="+className+"\t hobby="+hobby);
	}
}



2.编写一个教员类,输出相关的信息

请添加图片描述

public class OOPDemo03 {

	public static void main(String[] args) {
		// 获取教员对象
		Teacher zl = new Teacher();
		zl.teacherName = "张三丰";
		zl.major = "数学";
		zl.printInfo();

	}

}

class Teacher{
	String teacherName; // 姓名
	String major; // 专业
	String course; // 课程
	String teachingAge; // 教龄
	
	public void printInfo(){
		System.out.println("teacherName:" + teacherName
				+ "\t major:" + major
				+ "\t course:" + course 
				+ "\t teachingAge:" + teachingAge);
	}
	
}


3.定义一个管理员类

  1. 定义一个管理员类Administrator
  2. 定义其相关的属性和方法
  3. 定义一个测试类TestAdministrator
  4. 创建两个管理员类的对象,并输出他们的信息
/**
 * 管理员类
 *    属性:
 *        账号
 *        密码
 *    行为:
 *        登录
 *        注销
 * @author dpb
 *
 */
public class Administrator {

	// 账号
	String userName;
	// 密码
	String password;
	
	/**
	 * 判断账号密码是否正确
	 * @return
	 */
	public boolean login(){
		System.out.println("账号登录...");
		if("zhangsan".equals(userName) && "123".equals(password)){
			return true;
		}
		return false;
	}
	
	public void logout(){
		System.out.println("退出登录...");
	}
}
public class TestAdministrator {

	/**
	 * 创建两个管理员类的对象,并输出他们的信息
	 * @param args
	 */
	public static void main(String[] args) {
		Administrator admin = new Administrator();
		admin.userName = "zhangsan";
		admin.password = "123";
		System.out.println(admin.userName + "\t" + admin.password);
		Administrator root = new Administrator();
		root.userName = "lisi";
		root.password = "111";
		System.out.println(root.userName + "\t" + root.password);

	}

}

4.3 对象的内存分析

请添加图片描述

5.局部变量和成员变量

变量分为局部变量和成员变量,这两种类型的变量也是容易让大家混淆的地方,所以我们在此处详细介绍他们的区别:

5.1 定义的位置不同

成员变量:定义在类体以内,方法体以外

局部变量:定义在方法体内或者声明在方法上(形参)
请添加图片描述

5.2 在内存中的位置不同

成员变量:在堆内存中存储

局部变量:在栈区中存储

请添加图片描述

请添加图片描述

5.3 初始化值不同

成员变量:有默认值

局部变量:没有默认值,所有局部变量在使用之前必须赋值

请添加图片描述

5.4 生命周期不同

生命周期:一个变量从创建到销毁的全过程

成员变量:随着对象的创建而创建,随着对象的销毁而销毁,具体的结束时间是在垃圾回收器空闲的时候销毁

局部变量: 随着方法的调用而创建,随着方法的执行结束而销毁

5.5 当局部变量和成员变量重名的时候

当局部变量和成员变量重名的时候,局部变量优先于成员变量(就近原则)

public class OOPDemo01 {

	/**
	 * 局部变量和成员变量
	 * @param args
	 */
	public static void main(String[] args) {
		Dog dog = new Dog();
		System.out.println(dog.dogName);
		System.out.println(dog.dogAge);
		System.out.println(dog.dogColor);
		int x;
		int y;
		dog.dogName = "旺财";
		System.out.println(dog.dogName);
		dog.eat();
	}

}

// String dogHobby; 成员变量不能定义到 类体之外
// 定义一个Dog Java类
class Dog{
	// 成员变量
	public String dogName;
	
	public int dogAge;
	
	public String dogColor;
	
	// 定义一个方法
	public void eat(){
		System.out.println("--->"+dogName); // 成员变量
		String dogName = "小黑";
		System.out.println(dogName); // 局部变量
		// 。。。
		return ;
	}
	
	public void jump(){
		//System.out.println(a);
	}
}

6.值传递和引用传递

6.1 基本数据

基本数据类型作为形式参数,形参的改变不会影响实际参数,传递的是值本身

public class OOPDemo02 {

	public static void main(String[] args) {
		
		Demo d = new Demo();
		int x = 10;
		System.out.println("方法调用之前x的值为:" + x); // 10
		
		d.change(x);// 调用Demo对象的方法 
		
		System.out.println("方法调用之后x的值为:" + x); // 10

	}

}

class Demo{
	public void change(int a){
		a += 5; // 局部变量
		System.out.println("方法中的a值:" + a); // 15
	}
}

输出的打印结果

方法调用之前x的值为:10
方法中的x值:15
方法调用之后x的值为:10

6.2 引用数据类

引用数据类型作为参数,形参的改变影响实际参数,传递的是地址值

public class OOPDemo03 {

	public static void main(String[] args) {
		Student t = new Student();
		t.name = "张三";
		t.age = 22;
		
		System.out.println("方法调用之前学生的信息:" + t.name + "\t" + t.age);
		Demo02 d = new Demo02();
		// 调用了方法
		d.change(t);
		
		System.out.println("方法调用之后学生的信息:" + t.name + "\t" + t.age);
	}

}

class Demo02{
	public void change(Student s){
		s.name = "小明";
		s.age = 18;
		System.out.println("方法调用时学生的信息:" + s.name + "\t" + s.age);
	}
}

class Student{
	
	String name;
	
	int age;
}

输出结果:

方法调用之前学生的信息:张三	22
方法调用时学生的信息:小明	18
方法调用之后学生的信息:小明	18

请添加图片描述

7. 匿名对象

​ 没有名次的对象我们称为匿名对象

new Dog();
new Demo02().change(new Student());

匿名对象的特点:对象只会被使用一次,作为调用者来说,之后就获取不到这个对象了

如果对象只需要使用一次的话,那么我们就可以使用匿名对象

匿名对象一旦使用完成就会自动释放,节约内存资源

作为实际参数传递的时候会比较方便。

【上一篇】:【2面向对象】1-面向对象思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值