Day09笔记–面向对象

JavaSE基础

多听一遍不如多练一遍,多练一遍不如总结一遍,希望各位在学习的过程中,要多听,多写,多练,每天将自己所学汇总一遍,查缺补漏,成就更好的自己

一、类和对象概述

1.1 面向对象思想

面向对象和面向对象都是对软件分析、设计和开发的一种思想

面向过程

面向过程适合简单、不需要协作的事务,重点关注如何执行 ,比如如何开车,点火挂挡起步转弯倒车就可以完成,比较简单,单人可以完成

面向对象

面向过程适合复杂,需要协同合作的任务,比如如何造车,造车就要考虑由怎么设计,他的部件什么构成。

那么车就是一个对象

对象

轮胎,发动机,方向盘,车架,等就是车的对象

1.2 类中的内容

  • 类名
    • 类的名称
  • 属性
    • 对象具备的特征
    • 品种、姓名、年龄、地址…
  • 方法
    • 对象具备的行为
    • 吃饭、睡觉、学习、工作…

二、创建类

2.1 过程

1、确定类名【名词提炼法】
	狗子--Dog
	猫咪--Cat
	学生--Student
2、创建一个新的Java文件
	文件名和类名保持一致
3、定义属性
	声明变量【一般不用赋值】
	int age;
	String name;
4、定义方法
	public void eat(String food){}

2.2 入门案例

Student
package com.javastudy;
/**
 * 	类名
 * 		Student
 * 	属性--特征
 * 		名字
 * 		年龄
 * 		性别
 * 		学号
 * 	方法--行为
 *		吃饭
 *		睡觉
 *		学习
 */
public class Student {
	// 属性--声明变量【一般不赋值,像方法中声明的形参一样】
	String name;
	int age;
	String sex;
	String id;
	// 方法--不用全部添加static
	public void eat(String food) {
		System.out.println(name+"喜欢吃" + food);
	}
	
	public void sleep() {
		System.out.println(name+"作息时间很规律");
	}
	
	public void study() {
		System.out.println(name+"在学习");
	}
}

三、对象

3.1 概述

  • 类是抽象的
  • 类中总结了对象应该具有的属性和行为
  • 这些属性和行为没有具体的数据
    • 属性只有声明,没有赋值【虽然有默认值】
    • 方法没有被调用,方法的形参也没有赋值
  • 如果需要使用属性和方法,需要创建此类的对象
  • 没有对象–》new一个

3.2 创建对象

package com.javastudy;

public class TestStudent {
	public static void main(String[] args) {
		/**
		 *	创建对象的过程
		 *		1、创建类
		 *			1.1 类名
		 *			1.2 属性
		 *			1.3 方法
		 *		2、创建对象
		 *			2.1 new 对象
		 *			2.2 访问属性【读===写】	对象.属性
		 *			2.3 调用方法			对象.方法(参数)
		 */
		
		// 创建对象
		Student stu = new Student();

		// 访问属性【读--写】
		
		// 读取属性:对象.属性
		// 目前没有给属性赋值,有默认值【参考数组】,意义不大
		System.out.println(stu.name);
		System.out.println(stu.age);
		System.out.println(stu.sex);
		System.out.println(stu.id);
		
		// 修改属性:对象.属性 = 数据
		stu.id = 10001;
		stu.name = "张三";
		stu.age = 23;
		stu.sex = "男";
		
		// 再次读取属性
		// 目前已经给属性赋值
		System.out.println(stu.name);
		System.out.println(stu.age);
		System.out.println(stu.sex);
		System.out.println(stu.id);
		
		// 调用方法:dog.方法名(参数)
		stu.eat("米饭");
		stu.sleep();
		stu.study();
	}
}

3.3 访问属性和方法

访问属性
读取数据
对象.属性
String name = 对象.name;

修改数据
对象.属性 = 数据;
对象.name = "道哥";
访问方法
对象.方法名(参数);
对象.eat("骨头");

3.4实例变量

  • 属性 == 实例变量 == 实例属性 == 成员变量
  • 实例变量是定义在类中方法外的变量,是对象的组成部分之一
  • 实例变量有默认值,无需赋值即可使用【默认值和数组相同,没有意义】
  • 如果创建了多个对象,每个对象都拥有自己的实例变量,互相隔离
选项局部变量实例变量
定义位置方法中类中方法外
默认值有,同数组元素默认值
作用范围从定义位置开始到方法结束整个类中都能使用
存储位置
生命周期同方法同对象
  • 如果局部变量和实例变量重名,优先使用局部变量【就近原则】

四、构造器

4.1 概述

  • 构造器也称为构造方法
  • 是类中一个特殊的方法
    • 方法名和类名完全相同
    • 没有返回值,也没有返回值类型
    • 在创建对象的过程中自动调用,不能通过.的方式调用

4.2 无参构造器

  • 如果没有在类中手动书写任何构造方法,JVM赠送一个无参数的构造方法
  • 如果自习显示定义了任何构造方法,JVM不再赠送

4.3 有参数的构造器

  • 为了给类中的属性赋值
  • 如果发生实例变量和局部变量重名的情况:
    • 可以使用this.属性明确表示调用实例变量

4.4 构造器案例

People类
/**
 *	类名
 *		People
 *	属性
 *		种类
 *		姓名
 *		年龄
 *		性别
 *		地址
 *		备注信息
 *	方法
 *		展示
 */
public class People {
	// 属性
	String breed;
	String name;
	int age;
	String gender;
	String address;
	String info;
	
	// 创建构造器,无参构造器
	public People() {}
	
	/**
	 *	有参数的构造器,完成对象属性的赋值
	 * @param breed
	 * @param name
	 * @param age
	 * @param gender
	 * @param address
	 * @param info
	 */
	public People(String breed, String name, int age, String gender, String address, String info) {
		this.breed = breed;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.address = address;
		this.info = info;
	}

	// 方法
	public void show() {
		System.out.println("People [breed=" + breed + ", name=" + name + ", age=" + age + ", gender=" + gender + ", address="+ address + ", info=" + info + "]");
	}
}
测试

public class TestPeople {
	public static void main(String[] args) {
		// 创建对象
		People p = new People();
		p.show();
		p.breed = "黄色人种";
		p.name = "金三顺";
		p.age = 22;
		p.gender = "女性";
		p.address = "汉城";
		p.info = "温柔美丽贤惠大方";
		
		p.show();
		
		People pp = new People("黄色人种", "山本一郎", 22, "男性", "我本山中人", "门口有条河");
		pp.show();
	}
}

4.5 构造器赋值过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdpGIxPQ-1679918608986)(C:\Users\ADMINI~1\AppData\Local\Temp\1679909574981.png)

4.6 构造方法重载

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NoQGTphU-1679918608987)(C:\Users\ADMINI~1\AppData\Local\Temp\1679909885822.png)

五、this关键字

5.1 概述

  • 在构造器中可能遇到实例属变量和局部变量重名的情况
    • 默认优先使用局部变量,实例变量失效
    • 可以使用this.属性的方式来明确就是调用实例变量

5.2 this关键字的用法

调用属性
  • 为了区分局部变量和实例变量
this.属性
调用方法
this.方法(参数);
调用其他构造器
  • 能调用类中其他的构造方法
  • 必须放在构造方法第一行
  • 为了节省代码
this(参数)

案例代码


/**
 *	类名
 *		Car
 *	属性
 *		品牌
 *		型号
 *		价格
 *		颜色
 *	方法
 *		展示
 */
public class Car {
	// 属性
	String brand;
	String model;
	double price;
	String color;
	
	public Car() {}

	public Car(String brand, String model) {
		super();
		this.brand = brand;
		this.model = model;
	}

	public Car(double price, String color) {
		super();
		this.price = price;
		this.color = color;
	}

	public Car(String brand, String model, double price, String color) {
		// this.属性表示调用实例变量
//		this.brand = brand;
//		this.model = model;
		// this(参数)表示调用其本类中的他构造方法
		// 构造器的调用必须放在其他构造器的第一行
		this(brand, model);
		// this(price, color);
		this.price = price;
		this.color = color;
		
		// this.方法表示调用实例方法
		this.show();
	}

	// 方法
	public void show() {
		System.out.println("Car [brand=" + brand + ", model=" + model + ", price=" + price + ", color=" + color + "]");
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值