Java语法核心——面向对象编程

news2024/11/26 5:53:37

目录

面向过程思想概述

面向对象思想概述

面向对象思想特点及举例

类与对象的关系

类的定义

类与对象的案例(demo02)

 对象内存存储机制

 成员变量和局部变量的区别

 private关键字

面向过程思想概述

  • 我们回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后再分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
  • 在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
  • 那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
  • 面向过程的代表语言:C语言,汇编语言

面向对象思想概述

        当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

面向对象思想特点及举例

  • 面向对象思想特点

        –是一种更符合我们思考习惯的思想

        –可以将复杂的事情简单化

        –我们从执行者变成了指挥者

  • 角色发生了转换
  • 面向对象思想举例(demo01)

        –买电脑

        面向过程:我要买电脑——我要明确买电脑的意义——上网查对应的参数信息——去中关村买电脑——讨价还价——买回电脑

        面向对象:我要买电脑——班长去给我买电脑——买回电脑

        –洗衣服

        面向过程:把衣服脱下来——找一个盆——放点洗衣液——加点水——浸泡10分钟——揉一揉——清洗衣服——拧干——晾起来

        面向对象:把衣服脱下来——打开全自动洗衣机——扔衣服——按钮——晾衣服

类与对象的关系

  • 我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
  • 我们如何表示一个现实世界事物呢:

        –属性  就是该事物的描述信息

        –行为  就是该事物能够做什么

        –举例:学生事物

  • 我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
  • 类:是一组相关的属性和行为的集合
  • 对象:是该类事物的具体体现
  • 举例:

        –  学生

        –对象  班长就是一个对象

类的定义

  • 现实世界的事物

        –属性  事物的描述信息(变量)

        –行为  事物能做什么(方法)

  • Java中用class描述事物也是如此

        –成员变量  就是事物的属性

        –成员方法  就是事物的行为

  • 定义类其实就是定义类的成员(成员变量和成员方法)

类与对象的案例(demo02)

  • 学生类

        –如何定义

  • 按照事物到类的过程一步步分析

        –如何使用

  • 创建对象:

        –类名 对象名 = new 类名();

  • 对象名.成员变量
  • 对象名.成员方法()

对象实际对应的是一个内存地址

学生类

类:Student.java

package com.demo02;
/**
 * 
 * @author 无限嚣张(菜菜)
 * 类的定义:类是用来描述现实世界的事务
 *事物:
 *		属性  事物的描述信息
 *		行为  事物能够做什么
 *类是如何和事物进行对应的?
 *		类:
 *			成员变量
 *			成员方法
 *需求:写一个学生类
 *学生事物:
 *		属性:姓名,年龄...
 *		行为:学习,吃饭...
 *学生类:
 *		成员变量:姓名,年龄
 *		成员方法:学习,吃饭
 *成员变量:和我们之前学的变量定义一样
 *		位置不同:类中,方法外
 *		初始化值:不需要给初始化值
 *成员方法:和我们之前学的方法是一样的,去掉static
 */
public class Student {
	//成员便令
	//姓名
	String name;
	//年龄
	int age;
	
	//成绩
	float score;
	
	//成员方法
	//学习方法
	public void study() {
		System.out.println("好好学习,天天向上");
	}
	
	//吃饭的方法
	public void eat() {
		System.out.println("学习饿了,要吃饭");
	}
}

主函数:StudentDemo.java

package com.demo02;
/*
学生类
        –如何定义

按照事物到类的过程一步步分析
        –如何使用

创建对象:
        –类名 对象名 = new 类名();

对象名.成员变量
对象名.成员方法
 */
public class StudentDemo {
	public static void main(String[] args) {
		//格式:类名 对象名 = new 类名();  s是学生类的对象
		Student s = new Student();
		System.out.println("s:"+s); //com.demo02.Student@193c0cf
	
		//直接输出成员变量值ֵ
		System.out.println("姓名:"+s.name); //null
		System.out.println("年龄:"+s.age); //0
		System.out.println("成绩:"+s.score); //0
		System.out.println("----------");
		
		//给成员变量赋值ֵ
		s.name = "小花";
		s.age = 28;
		s.score = 65.5f;
		
		//再次输出成员变量值ֵ
		System.out.println("姓名:"+s.name); //小花
		System.out.println("年龄:"+s.age); //28
		System.out.println("成绩:"+s.score); //0
		System.out.println("----------");
		
		//调用成员方法
		s.study();
		s.eat();
	}
}

结果演示

手机类 

创建类:phone.java

package com.demo02;
/*
 * 手机类
 * 		成员变量:品牌、价格、颜色
 * 		成员方法:打电话、发短信
 */
public class Phone {
	//品牌
	String brand;
	//价格
	int price;
	//颜色
	String color;
	
	//打电话
	public void call(String name) {
		System.out.println("给"+name+"打电话");
	}
	
	//发短信
	public void sendMessage() {
		System.out.println("群发短信");
	}
	
	//发短信  方法重载
	public void sendMessage(String name) {
		System.out.println("给"+name+"发短信");
	}
}
package com.demo02;
/*
 * 手机类的测试类
 */
public class PhoneDemo {
	public static void main(String[] args) {
		//创建一个对象
		Phone p = new Phone();
		
		//输出成员变量值ֵ
		System.out.println("品牌:"+p.brand);//null
		System.out.println("价格:"+p.price);//0
		System.out.println("颜色:"+p.color);//null
		System.out.println("------------");
		
		//给成员变量赋值ֵ
		p.brand = "华为";
		p.price = 2999;
		p.color = "红色";
		
		//再次输出成员变量值ֵ
		System.out.println("品牌:"+p.brand);//����
		System.out.println("价格:"+p.price);//2999
		System.out.println("颜色:"+p.color);//��ɫ
		System.out.println("------------");
		
		//输出
		p.call("张三");
		p.sendMessage();
		p.sendMessage("小花");
	}
}

 对象内存存储机制

  • 1个对象的内存

        –一个对象的基本初始化过程

  • 2个对象的内存

        –方法的共用

  • 2个对象的内存

        –两个引用指向同一个对象

1个对象的内存

前边已经创建类,我这里不再重复哈!

package com.demo03;

/*
 * 手机类的测试类
 */
public class PhoneDemo {
	public static void main(String[] args) {
		Phone p = new Phone();
		System.out.println("p:"+p);
		System.out.println(p.brand + "---" + p.price + "---" + p.color);
		
		p.brand = "华为";
		p.price = 2999;
		p.color = "红色";
		
		System.out.println(p.brand + "---" + p.price + "---" + p.color);
		
		p.call("张三");
		p.sendMessage();
	}
}

 2个对象的内存(两个不同的对象,不同的内存地址)

package com.demo03;
/*
 * 手机类的测试类
 */
public class PhoneDemo2 {
	public static void main(String[] args) {
		Phone p = new Phone();
		p.brand = "小米5S";
		p.price = 1999;
		p.color = "银色";
		System.out.println("p:"+p);
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		p.call("张三");
		p.sendMessage();
		
		Phone p2 = new Phone();
		p2.brand = "IPhone7S";
		p2.price = 7999;
		p2.color = "土豪金";
		System.out.println("p2:"+p2);
		System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
		p2.call("林黛玉");
		p2.sendMessage();
	}
}

 3.两个引用指向同一个对象(内存地址和值完全一样)

package com.demo03;
/*
 * 手机类的测试类
 */
public class PhoneDemo3 {
	public static void main(String[] args) {
		Phone p = new Phone();
		p.brand = "OPPO";
		p.price = 2999;
		p.color = "红色";
		System.out.println("p:"+p);
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		
		Phone p2 = p;			//把p的内存地址直接给了p2
		p2.brand = "华为";
		p2.price = 1999;
		p2.color = "黑色";
		System.out.println("再次输出p:"+p);
		System.out.println("p2:"+p2);
		System.out.println(p.brand+"---"+p.price+"---"+p.color);
		System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
	}
}

 成员变量和局部变量的区别

  • 在类中的位置不同

        –成员变量 类中方法外

        –局部变量 方法内或者方法声明上

  • 在内存中的位置不同

        –成员变量 堆内存

        –局部变量 栈内存

  • 生命周期不同

        –成员变量 随着对象的存在而存在,随着对象的消失而消失

        –局部变量 随着方法的调用而存在,随着方法的调用完毕而消失

  • 初始化值不同

        –成员变量 有默认的初始化值

        –局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

package com.demo04;

public class Variable {
	int x;//成员变量,有默认值
	
	public void show() {
		int y = 0;//局部变量,无默认值
		
		System.out.println(x);
		System.out.println(y);
	}
	
	public static void main(String[] args) {
		Variable variable = new Variable();
		variable.show();//类的方法
	}
}

 private关键字

  • private关键字:

        –是一个权限修饰符

        –可以修饰成员(成员变量和成员方法)

        –private修饰的成员只在本类中才能访问

  • private最常见的应用:

        –把成员变量用private修饰

        –提供对应的getXxx()/setXxx()方法(get是获取age的值,set是给age赋值)

        –一个标准的案例的使用

类:

package com.demo05;

public class Student {
	String name;
	//int age;
	private int age;
	
	public void setAge(int a) {
		if(a<0 || a>200) {
			System.out.println("你给的年龄有误");
		}else {
			age = a;
		}
	}
	
	/*	public int getAge() {
			return age;
		}*/
	
	public void show() {
		System.out.println("姓名是:"+name+",年龄是:"+age);
	}
}
package com.demo05;

public class StudentDemo {
	public static void main(String[] args) {
		//创建类
		Student s = new Student();
		s.show();
		
		s.name = "张三";
		//s.age = 28;
		//s.age = -28;
		//s.setAge(-28);
		s.setAge(28);
		s.show();
	}
}

 小技巧:点击source——Generate Getters and Setters,自动生成get和set方法,根据需要做修改就可以了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts数据可视化项目搭建(一)

目录直角坐标系通用配置项tooltiptoolboxlegenddataZoom柱状图常见效果折线图常见效果散点图常见效果其他坐标系饼图基本实现常见效果地图地图基本展示不同城市颜色不同地图与散点图结合雷达图仪表盘本博客内容参考黑马课程&#xff0c;详细信息请参考以下网址 Bilibili官方黑…

Apache Superset 开源商业智能大数据可视化

Apache Superset 是一款现代化的开源大数据工具&#xff0c;也是企业级商业智能 Web 应用&#xff0c;用于数据探索分析和数据可视化。 Apache Superset 是一个适合企业日常生产环境中使用的商业智能可视化工具。它具有快速、轻量、直观的特点&#xff0c;任何用户都可以轻松地…

Spring Boot学习之Shiro

文章目录零 全部源码地址一 Shiro简介1.1 Shiro功能1.2 Shiro架构&#xff08;外部视角&#xff09;1.3 Shiro架构&#xff08;内部视角&#xff09;二 Shiro快速入门2.1 演示代码&部分源码解读三 Spring Boot集成Shio3.0 准备操作3.1 整合Shiro3.2 页面拦截实现3.3 登录认…

ESP32设备驱动-HMC5983磁力计驱动

HMC5983磁力计驱动 1、HMC5983介绍 霍尼韦尔 HMC5983 是一款温度补偿型三轴集成电路磁力计。这种表面贴装、多芯片模块专为汽车和个人导航、车辆检测和指向等应用的低场磁场传感而设计。 HMC5983 包括我们最先进的高分辨率 HMC118X 系列磁阻传感器和一个 ASIC,该 ASIC 包含…

AOP切面编程

前言&#xff1a;AOP&#xff08;Aspect Oriented Programming&#xff09;是一种设计思想&#xff0c;是软件设计领域中的面向切面编程&#xff0c;它是面向对象编程的一种补充和完善&#xff0c;它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下给程序动态…

各种Sequence Self-Attention变形 (加速矩阵运算 且保证全局特征)

人工设计Self-attention的N*N矩阵1. Local Attention/Truncated Attention2. Stride Attention3. Global Attention人工设计Self Attention的使用与选择1.LongFomer2.Big Bird自动设计Self Attention的N*N矩阵1. Reformer2.Sinkborn Sorting Network不需要N*N大小的矩阵1.Linfo…

【python】图片转字符画 cv2+pygame实现

网上看到一些字符画,非常羡慕,想要用python写一个类似的东西,突然想到字符画不就是把图片分割为像素块再进行替换嘛 恰好之前稍稍入门了python的opencv库,可以对图片进行处理。 处理图片的思想为:对一个区域的像素进行参考值计算,用具有相似参考值的字符进行替代,因此除…

打工人必学的法律知识(七)——《中华人民共和国劳动合同法实施条例》

目录 来源 第一章 总 则 第二章 劳动合同的订立 第三章 劳动合同的解除和终止 第四章 劳务派遣特别规定 第五章 法津责任 第六章 附 则 来源 《中华人民共和国劳动合同法实施条例》 第一章 总 则 第一条 为了贯彻实施《中华人民共和国劳动合同法》&#xff08;以下简称…

mybatis说明

目录 1.说明 2.配置文件 3.映射器 4.select标签 5.insert标签 6.update标签 7.delete标签 8.resultMap的特别说明 9.注解 10.关联(级联)查询 11.动态sql 12.mybatis分页 13缓存 1.说明 MyBatis 是一个开源、轻量级的数据持久化框架&#xff0c;是 JDBC 和 Hiberna…

Redis学习笔记:数据结构和命令

本文是自己的学习笔记。主要参考资料如下&#xff1a; 马士兵 4、Redis的五大数据类型1.1、String1.1.1、String 类型的命令1.1.2、存储对象1.2、List1.2.1、List基本命令1.2.2、List高级命令1.3、Set1.3.1、Set基本命令1.4、HashMap1.4.1、HashMap基本命令1.5、ZSet&#xff0…

【数据结构】7.4 散列表的查找

文章目录7.4.1 散列表的基本概念7.4.2 散列函数的构造散列函数的构造方法7.4.3 处理冲突的方法1. 开地址法1.1 线性探测法1.2 二次探测法2. 链地址法7.4.4 散列表的查找散列表的查找效率分析总结7.4.1 散列表的基本概念 基本思想&#xff1a;根据要存储的关键字的值&#xff0…

计算机网络-杂项

目录 1、蜂窝移动网络 2、TCP和UDP 3、5层架构 4、在浏览器中输入url地址显示主页的过程 5、TCP的基本操作 6、三次握手&#xff0c;四次挥手 6.1、三次握手&#xff1a;双方保证自己和对方都能接收和发送数据。 6.2、三次握手中&#xff0c;为什么客户机最后还要再向服…

【计算机网络】应用层体系

我们知道现代常用的计算机网络模型为5层模型&#xff0c;其中应用层是直接与我们平时常见的软件对接的最高层&#xff0c;所以先来学习应用层就显得很有必要了。其中在应用层我们需要学习网络应用程序的实现、原理并且了解网络应用程序所需要的网络服务、客户和服务器、进程和运…

DW 2023年1月Free Excel 第七次打卡 动态函数

第七章 Excel函数-动态函数 数据下载地址与参考链接&#xff1a;https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 1.FILTER函数 在工作中&#xff0c;根据指定的条件&#xff0c;将符合条件的所有记录从数据源表格式查找过来&#xff0c;一是可以用高级筛选。…

两个实用的shell命令:sed和awk用法

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 本文目录 sed的用法 sed常用场景 awk的用法 awk常用场景 我们先来看一下力扣上的shell题库中的一题&#xff1a; 实现这个功能一般来说我们会想到tail和head命令来指定打印前几行或者后几…

string的模拟实现(下)

目录 string的模拟实现下 析构函数&#xff1a; 完善函数 空对象的构造函数&#xff1a; 头插函数的一些修正&#xff1a; 构造函数的完善&#xff1a; 实现append 插入函数&#xff1a; 插入函数(字符串&#xff09; erase删除函数&#xff1a; 实现find函数&#…

【读论文】Spiking-YOLO Spiking Neural Network for Energy-Efficient Object Detection

AAAI-20 摘要 本文提出两个新方法为深度SNN提供快速、准确的信息传递&#xff1a;通道归一化和具有不平衡阈值的带符号神经元&#xff1b;本文也提出了一个基于脉冲的目标检测模型&#xff1a;Spiking-YOLO&#xff0c;并且在non-trivial datasets, PASCALVOC 和 MS COCO数据…

指针与数组

目录指针运算&#xff08;补&#xff09;指针指针指针的关系运算&#xff08;补&#xff09;指针与数组数组名二级指针指针数组指针运算&#xff08;补&#xff09; 指针指针 上一篇博客我们介绍了指针运算中的三种常见运算&#xff1a;指针整数&#xff0c;指针关系运算&…

23.1.27打卡 Codeforces Round #846 (Div. 2) A~D

https://codeforces.com/contest/1780A题给你一个长度为n的数组, 问你是否能找出三个数字, 使得这三个数字之和为奇数简单的小学数学奇偶奇偶偶偶所以我们只要找到三个奇数或者两个偶数一个奇数就好了/* ⣿⣿⣿⣿⣿⣿⡷⣯⢿⣿⣷⣻⢯⣿⡽⣻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿…

简单复现 残差网络、Googlenet、mobilenet、SqueezeNet、ShuffleNet

1.残差网络 1&#xff09;网络结构 当对x求偏导的时候&#xff0c;F&#xff08;x&#xff09;对x求偏导的值很小的时候&#xff0c;对整体求x的偏导会接近于1 这样解决了梯度消失问题&#xff0c;我们可以对离输入很近的层进行很好的更新。 要注意的是F&#xff08;x&#…