Java面向对象

Java面向对象

1.面向对象概述

1.1 vs 面向过程

面向过程:你找对象为例,你每一步都亲力亲为,动作的一个执行者

面向对象:找一个合适的人帮你干活。红娘动作的指挥者

面向对象的核心:就是找到合适的人,帮你干活【调用各种方法】

1.2 OOP/OOA

OOP:Oriented Object Programming,面向对象编程

OOA:Oriented Object Arti…,面向对象分析/设计

2.对象

世界由什么组成的?原子、万物、人、动物…

我们在认识世界的过程中,无形以分类去划分。

2.1对象的概念

万物皆对象

对象[物]:客观存在实体/事务,比如一班的张三,即张三就是一个对象。

类:是一个抽象的概念,将其当做一个模版。

2.2寻找身边的对象

比如 教室的椅子

2.3 程序中怎么用

在java中,类是代码的组织单元【即我们的代码需要在类体中编写】,我们的对象需要通过类创建

出来。

找对象的特征:(静态特征+动态特征)

静态特征【属性】:身高、身材、性别、年龄…

男:属性的值

动态特征【方法】:一般是动宾结构,吃喝拉撒睡,学习

在分析对象的特征的时候,要根据场景去分析出他的属性和方法,无法且没有必要穷举出所有的属

性和方法。

三步走:

需求:编写一个学生类,学号、名字、分数,打印学生信息

2.3.1编写一个类

共性:属性和方法,将属性和方法写在一个文件中,这个文件是通过类组织

思考:Java源码本身提供了很多类,为什么还要自定义的。它不知道你具体类的属性和方法是啥,

也无法穷举世界万物。所以,它提供了一个种自定义类的方式

public class Student{
    String name;
    String stuNo;
    int score;
    
    public void showInfo(){
        System.out.println("姓名:" + name + ",学号:" + stuNo + ",分数:" + score);
    }
}
2.3.2创建对象
Student stu = new Student();
2.3.3 使用对象
// 3.使用对象,使用对象的属性和方法
// 3.1 使用属性
String name = stu.name;   //获取属性值
System.out.println("修改之前:" + name);
stu.name = "zs";  //修改属性值
System.out.println("修改之后:" + stu.name);

//3.2 调用方法
stu.showInfo();

3.构造方法

若自定义了有参构造,那么你要给加上无参构造 因为加了有参之后,系统将不再赠送无参构造

3.1作用
  1. 创建对象: new 构造方法(有就传)

  2. 为属性赋初始值

3.2 特点
  1. 方法名称跟类名一致

  2. 我们没有定义这样的一个特殊方法,但是可以调用,说明JDK默认给我们提供了一个无参构造

  3. 一旦我们显示定义有参构造,则默认的无参构造将失效。

  4. 往往我们就需要使用无参构造,此时你应该自定义一个无参构造

  5. 构造方法也有重载

  6. 没有返回值,连void也不能有

4.this关键字

代表:代表的就是当前对象,就你造的哪个对象,代表的就是谁;只能用在你设计的那个类中

用法:

  1. this.成员变量 :可以解决在构造方法中,跟形参重名的问题;在方法中调用的时候,可以增加可

读性

  1. this.当前类的方法名 :此处 this 可以省,增加可读性

  2. this(构造方法的参数) :可以在构造方法中调用其他的构造方法,必须放在构造方法的第一行

在一个构造方法中调用其他构造方法的目的:可以节省很多代码

5.类图

5.1 简介

在这里插入图片描述

可以画类图的工具【设计工具】:

  1. processon :https://www.processon.com/

  2. draw.io :https://app.diagrams.net/

  3. startuml:https://staruml.io/ 可以直接生成java代码

  4. powerDesigner:是一款强大的设计工具,可以画很多图

5.2 对象在内存中的结构图

作为扩展了解

public class TestStudent {
	public static void main(String[] args) {
		int n = 10;  //栈存储
		int m = 10;  //栈存储
		Student stu = new Student();
		//属性赋值
		stu.name="张三";
		System.out.println(stu.name);  //null   张三
		System.out.println(stu.age);   //0		
		//调用
		String name = "ls";   //局部变量(常量池)
		String aaaa="ls";
		String pwd = "123";
		stu.login(name,pwd);
		System.out.println("name:"+name);   //ls
		System.out.println("执行");
	}
}
 
class Student {
	// 属性
	String name;
	int age;
	//用户登录
//	String userName;
//	String pwd;
	
	public void login(String userName,String pwd){
		
		System.out.println(userName+"===="+pwd);   //ls  123
	}
	
	public void show() {
		System.out.println("姓名:" + name + ",年龄:" + age);
	}
}

img

栈:存局部变量和对象引用

堆:存new出来的东西

常量池:存字符串,多个字符串变量的值都相同时,他们在栈中存的地址相同,都是指向常量池中同一个值

基本数据类型的变量,就算值相同都会分别在栈中存储,不会存到常量池中

当方法运行结束后,栈中方法的局部变量会被删除,但常量池中的值不会消失

6.成员变量vs局部变量

  1. 位置不同

    ①成员变量:在类中

    ②局部变量:在方法中,形参,代码块

  2. 初始值不同

    ①成员变量:有初始值,比如引用类型null,基本类型比如int 0

    ②局部变量:必须初始化,才能使用【必须显示赋值,才能使用】

  3. 作用范围不同

    ①成员变量:整个类中

    ②局部变量:它所在的{}范围

  4. 在内存中的区域不同

    栈 vs 队列:

    栈:先进后出

    队列:先进先出 FIFO —》First in First out

    ①成员变量:在堆内存中

    ②局部变量:在栈中

  5. 生命周期不同

    ①成员变量:随着对象的存在而存在,对象被标记为垃圾对象,需要一个过程,同时回收也需要一

    个过程

    ②局部变量:在栈中,用完之后就出栈

7.对象数组

与普通数组没啥区别 就是数组中存放的是对象的地址值,指向栈内存中的对象

明确:

  1. 数组如何定义?数据类型[] 数组名称

  2. 对象的数据类型是啥? 它的所属类,即该对象是通过哪个类【模版】造出来的。String name; Stu

stu

  1. 是否可以通过数组的方式操作对象?比如,获取到该班级所有学生的名字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Knight10zzzz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值