【Java入门合集】第三章面向对象编程(上)

news2024/11/18 23:39:46

【Java入门合集】第三章面向对象编程(上)


博主:命运之光
专栏:JAVA入门

理解面向对象三大主要特征;
掌握类与对象的区别与使用;
掌握类中构造方法以及构造方法重载的概念及使用;
掌握包的定义、包的作用等;
掌握方法的参数传递规则。

目录

  • 【Java入门合集】第三章面向对象编程(上)
    • 方 法
      • 方法的定义
      • 主方法
      • 方法的调用
      • 无参数无返回值的方法
      • 有参数无返回值的方法
      • 带返回值的方法
      • 注意事项
      • 方法重载
    • 面向对象简介
      • 面向过程(POP) 与 面向对象(OOP)
      • 面向对象的思想概述
      • 面向对象的主要特征
    • 类与对象
      • 对象
      • 类和对象
      • 类的定义
      • 类的成员——属性
      • 类的成员——方法
      • 关于public class与class声明类的区别:
      • 对象的创建和使用
      • 对象内存分配

在这里插入图片描述


方 法

方法的定义

🍓🍓方法在很多地方被称为函数(在Java中英文单词是Method,而在其他语言中为function),方法是一段可以被重复调用的代码块,实现一个功能,一个动作或一种行为
方法定义语法如下:

修饰符 返回值类型 方法名称( [ 参数类型 参数变量, ... ]) {
	方法体(本方法要执行的若干操作) ;
	[ return [返回值] ; ]
}
  • 修饰符 :public static ;

  • 返回值类型:方法执行结果的数据类型;

  • 方法名: 符合标识符命名规则;

  • 参数列表:方法执行需要的条件;

    • 参数类型: 可以是基本数据类型,也可以是引用类型;
    • 参数名: 即变量名;
  • 方法体语句: 完成特定功能的代码;

  • return: 返回,用来返回一个值或结束方法;

  • 返回值: 方法执行之后的结果,返回给方法的使用者,若方法没有返回值,则返回值类型为void。

主方法

🍓🍓Java的每一个应用程序都必须包含一个main()方法,称为主方法。主方法是程序开始执行的位置,语法格式如下:

publlic static void main(String[ ] args){
	//方法体
}

说明:
1、主方法是静态的(static),所以如要直接在主方法中调用其他方法,则该方法必须也是静态的;
2、主方法没有返回值;
3、主方法的形参为字符串数组。其中args[0]~args[n]分别代表程序的第一个参数到第n个参数。(可以通过args.length获取参数的个数)

方法的调用

定义:使用方法的过程称为方法的调用
格式: 方法名([实参列表]);

  • 方法需先定义,后使用;
  • 若方法无参数,调用时括号里什么都不写,但括号不能省略。

无参数无返回值的方法

🍓🍓例1:定义一个没有参数没有返回值的方法。

public class text1 {
    public static void main(String args[]) {
        printInfo(); 		// 直接调用方法
        printInfo(); 		// 直接调用方法
    }
    public static void printInfo() {	// 定义没有参数,没有返回值的方法
        System.out.println("*********************");
        System.out.println("*   www.yootk.com   *");
        System.out.println("*********************");
    }
}

请添加图片描述

有参数无返回值的方法

形参:全称形式参数,是指方法定义中的参数;
实参:全称实际参数,方法调用中的参数;
请添加图片描述
🍓🍓例2:定义一个有参数无返回值的方法。

public class text1 {
    public static void main(String args[]) {
        pay(10.0);			// 调用方法
        pay(-10.0);			// 调用方法
    }
    //定义一个支付的操作方法,如果支付金额大于0则正常支付,否则会输出错误提示信息
    public static void pay(double money) { 	// 购买支付操作
        if (money > 0.0) { 	// 现在已经给钱
            System.out.println("可以进行支付!");
        } else {		// 不能够支付
            System.out.println("没钱还买东西!");
        }
    }
}

请添加图片描述

带返回值的方法

🍓🍓我们经常会根据一个方法产生的结果,去组织另外一段代码逻辑,为了获得该方法产生的结果,就需要方法能够将结果返回。
🍓🍓例3:定义一个有返回值有参数的方法(比较两个整数是否相等)。

public class text1 {
    public static void main(String args[])
    {
        boolean is;
        is = compare(40,40);
        System.out.println("比较的结果是:"+is);
    }
    public static boolean compare(int x,int y){
        return x==y;
    }
}

请添加图片描述

通过赋值语句来保存调用方法后得到的返回值,并且,变量类型要和返回值类型一致

return后的数据类型需和方法返回值的类型匹配

注意事项

  • 方法不能嵌套定义
  • 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要编写return,后面不能跟具体的数据。
  • return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。

方法重载

同一个类中的多个方法,它们的方法名相同参数列表不同,这样的情况,称为方法重载。方法重载与修饰符返回值类型无关。

参数列表不同:个数不同、类型不同或顺序不同

调用方法的时候,Java虚拟机通过参数的不同区分同名的方法

🍓🍓例:观察方法重载。

public class text1 {
    public static void main(String args[]) {
        // 方法重载之后执行时会根据传入参数的类型或个数的不同调用不同的方法体
        System.out.println("两个整型参数:" + add(10, 20));
        System.out.println("三个整型参数:" + add(10, 20, 30));
        System.out.println("两个浮点型参数:" + add(10.2, 20.3));
    }
    public static int add(int x, int y) { 	// add()方法一共被重载三次
        return x + y;
    }
    public static int add(int x, int y, int z) { // 与之前的add()方法的参数个数不一样
        return x + y + z;
    }
    public static double add(double x, double y) {// 与之前的add()方法的参数类型不一样
        return x + y;
    }
}

请添加图片描述
在这里插入图片描述

面向对象简介

面向过程(POP) 与 面向对象(OOP)

面向对象:Object Oriented Programming
面向过程:Procedure Oriented Programming

二者都是一种思想,面向对象是相对于面向过程而言的。
面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做

面向对象和面向过程的区别:
主要在于做事方式的不同,一个关注事物(对象),另一个关注于过程(步骤)。

面向对象的思想概述

  • 面向对象思想特点

    • 是一种更符合人们思考习惯的思想;
    • 把复杂的事情简单化;
    • 把人们从执行者变成了指挥者
  • 面向对象的程序开发

    • 即不断的找对象,使用对象,指挥对象做事情的过程。若没有对象? 创建一个!
  • 面向对象思想特征

    • 封装;
    • 继承;
    • 多态;

面向对象的主要特征

  • 继承性
    主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展

  • 多态性
    指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义

  • 封装性
    封装是面向对象的方法所应遵循的一个重要原则。它有两个含义:一是指把对象的属性行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(即对象)中。另一层含义指“信息隐蔽”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓;或只允许使用对象的功能,而尽可能隐蔽对象的功能实现细节。

类与对象

  • 面向对象分析方法分析问题的思路和步骤:
    • 根据问题需要,选择问题所针对的现实世界中的实体(一种事物)
    • 从实体中寻找解决问题相关的属性功能,这些属性和功能就形成了概念世界中的
    • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构
    • 类实例化成计算机世界中的对象,对象是计算机世界中解决问题的最终工具。

Java中如何描述一个事物?
Java中通过“类”来描述事物,类主要由属性和行为构成。
类是一系列具有相同属性和行为的事物的统称。

我们在现实世界中看到的其实都是对象

对象

现实世界中,万事万物皆对象,对象是某一类事物某个具体存在,如张三、小明的书桌、教室的计算机、王五的汽车等,所以对象表示的是一个个独立的个体。

通常都会将对象划分为两个部分,即动态部分静态部分
静态部分,顾名思义就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,它包括高矮、胖瘦、性别、年龄等属性。
然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为动态部分
通过探讨对象的属性和观察对象的行为了解对象。

类和对象

面向对象程序设计的重点是类的设计
类的设计,其实就是类的成员的设计

类:用来描述特征信息及功能等,不能实际使用。
对象:根据类的描述创造出来的,可以实际使用。

类的定义

定义类的过程,就是把一系列相关事物共同的属性和行为抽取出来的过程。

事物的属性,在类中叫成员变量
事物的行为,在类中叫成员方法

语法格式:

【修饰符】 class  类名称{
	成员变量定义;          //属性
	成员方法定义;	      //行为	
}
  • 对于类(class)的权限修饰:可以用publicdefault(缺省)
    • public类可以在任意地方被访问;
    • default类只可以被同一个包内部的类访问。
  • 类的名称符合合法的标识符定义。

类的成员——属性

属性 = 成员变量 = field = 域、字段

语法格式:修饰符 数据类型 属性名 ;
修饰符 数据类型 属性名 = 初始化值 ;

说明1: 修饰符
常用的权限修饰符有:private、缺省、protected、public
说明2:数据类型
任何基本数据类型(如int、Boolean) 或 任何引用数据类型。
说明3:属性名
属于标识符,符合命名规则和规范即可。

类的成员——方法

成员方法 = 函数 = method
语法格式:

权限修饰符 返回值类型 方法名[参数类型 参数名1, 参数类型 参数名2……]){
//方法体语句
[ return 返回值;]
}

成员方法的格式说明 :
除了权限修饰符不加Static以外,其他同一般方法。

🍓🍓举例:定义一个person类

class Person{//定义成员变量(属性)
		String    name;        //姓名
		int          age;      //年龄
		boolean    isMale;     //性别
		public  void sleep(){
			System.out.println(“人能睡觉”);
		}  
		public  void walk(){//定义成员方法(行为)
			System.out.println(“人能走路……”);
		}  
}

🍓🍓举例:定义一个Book类

class Book { 				// 定义一个Book类
	String title; 			// 书的名字
	double price; 			// 书的价格
	
       //输出对象完整信息
	public void getInfo() { 		// 此方法将由对象调用
		System.out.println("图书名称:" + title + ",价格:" + price);
	}
}

关于public class与class声明类的区别:

  • public class:文件名称必须与类名称保持一致,在一个*.java文件里面只能够有一个public class声明,称为主类,如果一个类需要被不同的包所访问,那么一定要定义为public class;
    - class:文件名称可以与类名称不一致,并且一个*.java文件里面可以有多个class定义,编译后会形成多个*.class文件,这个类只能够被本包所访问

对象的创建和使用

  • 对象定义格式

    格式一:声明并实例化对象
    类名称 对象名称 = new 类名称 () ;
    格式二:分步完成
    声明对象:类名称 对象名称 = null ;
    实例化对象:对象名称 = new 类名称 () ;

  • 操作类结构:

    • 对象.属性:表示要操作类中的属性内容;
    • 对象.方法():表示要调用类中的方法。

🍓🍓案例: 使用类 —— 在主类中使用Book类。

class Book { 					// 定义一个新的类
    String title; 				// 书的名字
    double price; 				// 书的价格
    public String getInfo() { 			// 此方法将由对象调用
        return "图书名称:" + title + ",价格:" + price);
    }
}
public class text1 {
    public static void main(String args[]) {
        Book bk = new Book() ;		// 声明并实例化对象
        bk.title = "Java开发" ;	 	// 操作属性内容
        bk.price = 89.9 ;			// 操作属性内容
        System.out.println (bk.getInfo()) ;	 // 调用类中的getInfo()方法
    }
}

请添加图片描述

对象内存分配

  • 类本身属于引用数据类型,对于引用数据类型的执行分析就必须结合内存操作来看:
    • 堆内存(heap):保存每一个对象的属性内容,堆内存需要用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,那么将无法使用;
    • 栈内存(stack):保存的是一块堆内存的地址数值,可以把它想象成一个int型变量(每一个int型变量只能存放一个数值),所以每一块栈内存只能够保留一块堆内存地址;

在这里插入图片描述

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

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

相关文章

国民技术N32G430开发笔记(14)-IAP升级 usart2接收数据

IAP升级 Usart2接收数据 1、之前有一节我们将PA6 PA7复用成了usart2的功能,这一节我们用usart2接收来自树莓派的升级请求,然后完成N32G430的Iap升级。 2、接线 PA9 PA10 接usb转串口模块A,A模块插入电脑。 PA6 PA7 接usb转串口模块B&#xf…

【移动端网页布局】流式布局案例 ⑥ ( 多排按钮导航栏 | 设置浮动及宽度 | 设置图片样式 | 设置文本 )

文章目录 一、多排按钮导航栏样式及核心要点1、实现效果2、总体布局设计3、设置浮动及宽度4、设置图片样式5、设置文本 二、完整代码实例1、HTML 标签结构2、CSS 样式3、展示效果 一、多排按钮导航栏样式及核心要点 1、实现效果 要实现下面的导航栏效果 ; 2、总体布局设计 该导…

计算机网络笔记:DNS域名解析过程

基本概念 DNS是域名系统(Domain Name System)的缩写,也是TCP/IP网络中的一个协议。在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但计算机之间只能互相认识IP地址,域名和IP地址之间的转…

基于探路者算法的极限学习机(ELM)回归预测-附代码

基于探路者算法的极限学习机(ELM)回归预测 文章目录 基于探路者算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于探路者算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要:本文利用探路者算法对极限学习机进行优化&…

算法 DAY45 动态规划07 70. 爬楼梯 322. 零钱兑换 279. 完全平方数 139. 单词拆分 多重背包

70. 爬楼梯 和377. 组合总和 Ⅳ (opens new window)基本就是一道题了。本题代码不长&#xff0c;题目也很普通&#xff0c;但稍稍一进阶就可以考察完全背包 class Solution { public:int climbStairs(int n) {vector<int> nums {1,2};vector<int> dp(n1,0);dp[0…

while语句和until语句顺便带点小实验

while语句和until语句 一、while用法二、Until循环语句三、趣味小实验猜价格的游戏&#xff08;价格是随机数&#xff09;写一个计算器脚本闲来无事去购物 一、while用法 for循环语句非常适用于列表对象无规律&#xff0c;且列表来源以固定&#xff08;如某个列表文件&#xf…

Android Studio开发图书管理系统APP

Android Studio开发项目图书管理系统项目视频展示&#xff1a; 点击进入图书管理系统项目视频 引 言 现在是一个信息高度发达的时代&#xff0c;伴随着科技的进步&#xff0c;文化的汲取&#xff0c;人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴…

word构建基块:快速插入重复内容的高级剪切板

本文参考自 word录入技巧&#xff1a;如何用自动图文集快速插入重复内容 - 知乎 介绍 构建基块&#xff0c;它就是和剪切板一样&#xff0c;点一下就粘贴一份新的&#xff0c;用于解决大量重复内容的复制粘贴 构建基块包括自动图文集和快速表格&#xff0c;实际上都是构建基块…

Blender启动场景的修改

Blender启动场景的修改 1 使用版本2 现象描述3 解决方法4 启动场景路径5 清理场景资源5.1 空场景大小5.2 清理图片资源5.2.1 断开数据块关联5.2.2 断开伪用户关联5.2.3 断开多用户关联5.2.4 清理数据块5.2.6 文件校验 5.3 使用自建资源库 6 数据块类型 1 使用版本 Blender 3.3…

二叉树建立、遍历、打印(23春教学)

#include<stdio.h> #include <malloc.h> #include <conio.h> typedef char DataType; typedef struct Node {DataType data;struct Node *LChild;struct Node *RChild; }BitNode,*BitTree; void CreatBiTree(BitTree *bt)//用扩展先序遍历序列创建二叉树&am…

《LearnUE——基础指南:上篇—3》——GamePlay架构WorldContext,GameInstance,Engine之间的关系

目录 平行世界是真实存在的吗&#xff1f; 1.3.1 引言 1.3.2 世界管理局&#xff08;WorldContext&#xff09; 1.3.3 司法天神&#xff08;GameInstance&#xff09; 1.3.4 上帝&#xff08;Engine&#xff09; 1.4 总结 平行世界是真实存在的吗&#xff1f; 1.3.1 引言 …

DAY 51 LVS负载均衡——DR模式

数据包流向分析 &#xff08;1&#xff09;客户端发送请求到Director Server (负载均衡器)&#xff0c;请求的数据报文&#xff08;源IP是CIP&#xff0c;目标IP是VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和Real Server 在同一个网络中&…

【五一创作】ERP实施-委外业务-委外采购业务

委外业务主要有两种业务形态&#xff1a;委外采购和工序外协&#xff0c;委外采购主要是在MM模块中实现&#xff0c;工序外协主要由PP模块实现&#xff0c;工序外协中的采购订单创建和采购收货由MM模块实现。 委外采购概念 委外采购&#xff0c;有些企业也称为带料委外或者分包…

【Spring框架全系列】方法注解@Bean的使用

&#x1f4ec;&#x1f4ec;哈喽&#xff0c;大家好&#xff0c;我是小浪。上篇博客我们介绍了五大类注解的使用方法&#xff0c;以及如何解决Spring使用五大类注解生成bean-Name的问题&#xff1b;那么&#xff0c;谈到如何更简单的读取和存储对象&#xff0c;这里我们还需要介…

如何防止系统发生异常时,别人传递过来的关键数据不丢失?(AOP + xxlJob)

需求 在开发中&#xff0c;客户每天需要定时调用我们的api去上传一些数据到数据库中&#xff0c;当数据库发生异常或者系统发生异常&#xff0c;上传的一些数据会丢失不做入库操作&#xff0c;现想防止数据库或系统发生异常&#xff0c;数据能不丢失&#xff0c;同时&#xff…

TryHackMe-AD证书模板

AD Certificate Templates SpecterOps 完成并作为白皮书发布的研究表明&#xff0c;可以利用配置错误的证书模板进行权限提升和横向移动。根据错误配置的严重性&#xff0c;它可能允许 AD 域上的任何低特权用户只需单击几下即可将其权限提升为企业域管理员的权限&#xff01; …

C语言宏使用

C语言宏 编译一个C语言程序的第一步骤就是预处理阶段&#xff0c;这一阶段就是宏发挥作用的阶段,编译完之后宏对二进制代码不可见。 使用 1. 宏常量 #define PI 3.142. 宏语句 #define Print printf("hello,world!\r\n")3. 宏函数 使用宏来定义函数&#xff0c…

基于灰狼算法的极限学习机(ELM)回归预测-附代码

基于灰狼算法的极限学习机(ELM)回归预测 文章目录 基于灰狼算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于灰狼算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用灰狼算法对极限学习机进行优化&#xff0c;并…

[stable-diffusion-art] 指北-3 inpainting

https://stable-diffusion-art.com/inpainting_basics/https://stable-diffusion-art.com/inpainting_basics/inpainting的应用主要是重绘&#xff0c;目前的模型换衣主要还是通过lora训练特定衣服来实现的。 模型权重&#xff1a; !wget https://huggingface.co/runwayml/sta…

一、spring Cloud Alibaba概述

spring Cloud Alibaba学习&#xff0c;第一篇spring Cloud Alibaba概述篇。 微服务是一种架构思想&#xff0c;spring Cloud Alibaba是微服务的系列化实现方式之一。 一、架构演变过程 架构粒度更加精细&#xff0c;拆分成不同的服务&#xff0c;每个服务直接互不影响&#…