3.类和对象

一. 什么是抽象

从特定的角度出发,从已经存在的一些事物中抽取所关注的特性,行为,从而形成一个新的事物的
思维过程,是一种从复杂到简洁的思维方式。

二. 对象和类的关系

  1. 对象有两方面的定义:状态和行为。
    对象可以定义为包含状态和行为的一个实体,对象(Object)也称为实体(instance);

  2. 实体:存在于客观世界中并且可以与其他物体区分开的物体,实际存在的个体。

  3. 对象:人们要进行研究的事物,任何事物都可以认为是对象。

    1. 对象具有状态和行为。

    2. 对象可以抽象成类。

  4. 类:
    具有相同特征(状态)和功能(行为)的对象的抽象就是类。
    对象的抽象就是类,类的具体化就是对象。

    1. 类具有的特性:对象的状态,用成员变量来描述。
    2. 类具有的功能:对象的行为,用方法来描述。
  5. 类是对象的类型/模板。创建一个对象,就是使用一个类作为构建该对象的基础。
    描述类少不了对象,描述对象也少不了类。
    对象是类的实例,类是对象的模板。

三. 类的定义

[修饰符] class 类名{
0-N个成员变量(字段/Field); 这不是属性
0-N个方法
}

![image][definition]

  1. 定义类注意
    1. 如果类使用了public修饰符,必须保证当前文件名称和当前类名相同。
    2. 类名使用名称表示,类表示某一类事物,首字母大写,驼峰表示法
    3. 专门为描述对象提供一个类,该类不需要main方法。

四.对象的基本操作

  1. 根据类来创建对象的语法
类名 变量 = new 类名();
  1. 给字段设置值
对象变量.字段名 = 该类型的值;
  1. 获取字段的值
该字段类型 变量 = 对象变量.字段值;

  1. 通过对象调用方法
对象变量.方法(实参);
//菲佣类型,描述了菲佣对象,包括菲佣的状态和行为
class Servant
{
	String name;//姓名
	int age;//年龄

	void shopping(){
		System.out.println("买菜....");
	}

	void cook(){
		System.out.println("做饭....");
	}

	void wash(){
		System.out.println("洗碗....");
	}
}

//程序员
class Coder
{
	void coding()
	{
		System.out.println("疯狂地写代码!!");
	}
}

//Servant的测试类
class ServantDemo 
{
	public static void main(String[] args) 
	{
		//创建一个菲佣对象
		Servant s1 = new Servant();
		s1.name = "小红";
		s1.age = 19;

		//打印姓名和年龄
		System.out.println(s1.name + "  " + s1.age);
		s1.shopping();
		s1.wash();
		s1.cook();

		//创建程序员对象
		Coder c = new Coder();
		c.coding();
	}
}

五.内存分析-对象的实例化过程

![image][initial]

image

六.对象的打印和比较

  1. 对象打印:
    1. System.out.println(s1);
      Servant@21e8bf76
    2. 打印的是 :类的名称@十六进制的hashCode
    3. 打印数据,应该使用Object的toString方法
  2. 对象比较操作:
    1. ==号:对于基本数据类型来说比较的是值。
      对于引用对象来说比较的是内存中的地址值。
      每次使用new关键字,都表示在堆中新开辟一块内存空间。不同空间,地址不同。
    2. 比较数据,应该使用Object的equals方法
  3. 对象的生命周期:
    1. 使用new关键字会在内存中开辟新的空间,此时对象开始存在。
    2. 当堆中的对象没有被任何变量引用时,该对象就会成为垃圾,就等值GC回收。
    3. 当GC回收对象时,对象销毁。
  4. 匿名对象:
    1. 没有名称的对象,创建对象之后没有赋值给某一个变量。
    2. new Servant();//匿名变量,在堆中开辟新的内存空间,没有把该空间赋值给变量
      因为没有名称,匿名对象只能使用一次,一般把匿名对象作为方法的实参传递。

七. 学生缴费案例

学生类(Student)有两个字段:名字(name)和是否缴费的状态(isFee),有一个缴费方法
(fees)。每一个学生都是通过Student类new出来的一个对象,现在创建一个数组存放多个学生对象,再判断数组中的学生是否已经缴费,如果没有,则调用的缴费方法。

新建StudentDemo.java

//描述学生对象
class Student
{
	String name;//姓名,默认为null
	boolean isFee;//缴费状态,成员变量的boolean默认值为false
	void fees(){
		isFee = true;//设置为已经缴费
	}
}
class  StudentDemo
{
	public static void main(String[] args) 
	{
		//创建学生对象
		Student s1 = new Student();
		s1.name = "装三";
		s1.isFee = true;//已经缴费

		Student s2 = new Student();
		s2.name = "里斯";

		Student s3 = new Student();
		s3.name = "李四";

		Student s4 = new Student();
		s4.name = "无聊";

		//创建一个数组,用于储存所有的学生对象
		Student[] arr = new Student[]{s1,s2,s3,s4};

		//使用循环迭代数组中的每一个元素
		for (Student std : arr )
		{
			System.out.println("姓名:" + std.name + "  状态:" + std.isFee);
			if (!std.isFee)
			{
				std.fees();				
			}
		}
		System.out.println("-----------");

		//使用循环迭代数组中的每一个元素
		for (Student std : arr )
		{
			System.out.println("姓名:" + std.name + "  状态:" + std.isFee);			
		}
	}
}

image

发布了58 篇原创文章 · 获赞 0 · 访问量 743

猜你喜欢

转载自blog.csdn.net/huang_kuh/article/details/104847612