day12-面向对象

本期内容:面向对象

2.1 什么是面向对象:

生活中的面向对象

洗衣服,吃饭
面向过程:关注点是过程 ————站在一个执行者的角度去考虑事情,做事情
	//step1.找个盆
	//step2.收集要洗的衣服
	//step3.放水,放洗衣粉。。
	//step4:洗一洗
	//step5:晒一晒

面向对象:关注点是对象 ————站在指挥者的角度
	//step1:找个对象
	//step2:让他洗衣服
	
	
生活中的面向对象:找合适的人,做合适的事儿。。
生活中的面向过程:亲力亲为,按照流程步骤来,一步一步,吭哧吭哧。。

代码中的面向对象:

Arrays类:
    sort();//排序
    binarySearch();//搜索
Scanner类:	
    nextInt();
    next();
    nextDouble{};

2.2 面向对象和面向过程:

//面向对象编程:
			OOP Object-Oriented Programming
			OOP不是一种语言,而是一种编程思想
			Object:对象 	Oriented:方向,定向	Programming:程序
//面向对象:
			A.分析当前的问题域中所涉及的对象
			B.这些对象有什么样的特征和功能:1.外部特征:静态属性 2.动作行为:动态属性
			C.对象与对象之间的关系:继承关系、聚合关系、关联关系
			类的堆彻

2.3 类和对象

对象
人类Person钟南山院士,你,我,王二狗,李小花,袁隆平爷爷,马云爸爸。。
狗类幻影,忠犬八公,二哈,啸天
猫类嘟嘟,卡卡,你家的猫,姥姥家的白猫
汽车类我的黑色的长城车,58台红旗车,撞我的那台车。。
笔记本电脑类我现在用的这个电脑15寸的pro,王二狗的华硕,你媳妇的联想
手机类我的华为Mate30,你的小米mix2s,你媳妇用诺基亚n95
类:其实指的就是类别,一个抽象的概念。对同一类事物的统称。对这类事物进行描述,--->创建class
对象:类中的一个具体的实例,客观存在的,能用。个体。

如何定义一个类:

  • 要有能够描述这一类别的外部特征——我们叫做属性(静态属性)

    变量就可以。(名词)

  • 要有能够描述这一类别的行为功能——我们叫做方法(动态属性)

    方法就可以。(动词)

2.4 Java中定义类的格式

/*
class ClassName{//类名首字母大写
	//属性描述:外部特征
	//行为描述:能够干啥
}
*/
要求:
    1、CLassName要求符合驼峰命名法,首字母大写,见名知意。
    2、属性描述:外部特征,用于描述这个类别的一些特征,而这些特征通过一个"词"来描述清楚,比如姓名,年龄。使用变量来表示。——【成员变量】Field,词义"字段"
    3、行为描述:能够干啥,用于描述这个类别的一些行为功能,而这些行为功能,是一个动作行为,比如吃饭,睡觉。使用方法来表示。——【成员方法】Method,词义"方法"
    	不要加static

​ 方法:一段具有独立功能的代码

2.4.1 step1声明类

public class Person{}Person是类的名字

2.4.2 step2声明类中的【成员变量】

public class Person {
//step2:成员变量
	String name;//使用String类型的变量name,表示人类中的姓名
	int age;//使用int类型的变量age,表示人类中的年龄
	char sex;//使用char类型的变量sex,表示人类中的性别	
}

2.4.3 step3声明类中的【成员方法】

//step1:声明类
public class Person {
//step2:成员变量
	String name;//使用String类型的变量name,表示人类中的姓名	
	int age;//使用int类型的变量age,表示人类中的年龄
	char sex;//使用char类型的变量sex,表示人类中的性别
//step3:成员方法
	public void eat(){
		System.out.println("吃饭");
	}
	public void sleep(){
		System.out.println("睡觉");
	}
	public void daDouDou(){
		System.out.println("打豆豆");
	}
}

2.5 类的对象

2.5.1创建类的对象

​ 创建对象也叫做类的实例化,对象也叫做类的实例。

/*
new关键字
new,词义:新的,新建
new 关键字,专门用于新建对象。
*/
Scanner sc = new Scanner();//Scanner也是个类,Person也是个类。
int[] arr = new int[5];

语法结构:
/*
类名 对象名 = new 类名();
*/

step1:创建类

step2:g根据类,实例化对象

2.5.2 通过对象访问属性

/*
int[] arr = new int[5];
获取数组的长度:
arr.length
arr的长度
*/
对象访问属性的语法:就是一个.
//给对象的属性,进行赋值
p1.name = "王二狗";//给p1这个对象的name属性进行赋值
p1.age = 18;
p1.sex = '男';

//获取对象的属性值
System.out.println("姓名:"+p1.name);
System.out.println("年龄:"+p1.age);
System.out.println("性别:"+p1.sex);
2.5.3 通过对象访问方法
/*
Scanner sc = new Scanner();
sc.nextInt();
*/
Scanner,就是一个class,一个类
sc,是根据Scanner创建出来的一个对象

对象调用类中的方法,语法,也是.
对象.方法名();
p1.eat();
p1.sleep();
p1.daDouDou();

2.6 内存分析

实例代码:

package day12_OOP;

public class Test2Person {
	public static void main(String[] args){
//1.创建一个Person类的对象:
		Person p1 = new Person();
		System.out.println(p1);//p1的内存地址:day12_OOP.Person@15db9742
		p1.name = "大熊";
		p1.age = 10;
		p1.sex = '男';
		System.out.println(p1.name);//大熊
		System.out.println(p1.age);//10
		System.out.println(p1.sex);//男
//2.再创建一个Person类的对象:
		Person p2 = new Person();
		System.out.println(p2);//p2的内存地址:day12_OOP.Person@6d06d69c
		p2.name = "静香";
		p2.age = 10;
		p2.sex = '女';
		System.out.println(p2.name);//静香
		System.out.println(p2.age);//10
		System.out.println(p2.sex);//女
//3.声明一个Person类型的对象,但是实际上并没有在堆内存中创建真正的对象:
		Person p3 = null;
		//System.ouy.println(p3);强行访问对象的属性或调用方法,会报错:NullPointerException
		p3 = p1;//把p1的值(p1对象的内存地址)赋值给p3,结果:p1和p3存储的是同一个对象的内存地址。
		p3.name = "哆啦A梦";
		System.out.println(p1.name);//哆啦A梦
		System.out.println(p2.name);//静香
		System.out.println(p3.name);//哆啦A梦
//4.再创建一个Person类的对象:
		Person p4 = new Person();
		System.out.println(p4);//p4的内存地址:day12_OOP.Person@7852e922
		p4.name = "胖虎";
		p4.age = 11;
		p4.sex = '男';
		System.out.println(p4.name);//胖虎
		System.out.println(p4.age);//11
		System.out.println(p4.sex);//男
//5.改变对象的内存地址:
		p4 = p1;
		System.out.println(p1.name);//哆啦A梦,看26行27行
		System.out.println(p3.name);//哆啦A梦
		System.out.println(p4.name);//哆啦A梦	
	}
}

内存分析:

对象创建:
Person p1 = new Person();
//=左边,对象的声明,开辟栈内存
//=右边,有new,开辟堆内存,创建对象,将对象的内存地址,给p1
//结论:p1是Person类型的对象,属于引用类型,存储的都是对象的内存地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值