Java面向对象系列

面向对象

1.万物皆对象

软件开发方式的演变

一个完整的软件开发生命周期应该包括:软件需求确认(要做什么样的软件)—> 确认软件架构(使用什么技术)—> 软件编码(选择编程语言,实现具体功能)—> 编码结束后实现测试工作(测试功能是否符合要求)—> 软件部署(项目上线)—> 软件维护 (指导用户使用,升级)等等。

以上软件开发生命周期中,进行软件编码很关键(完美的软件应该是近乎高内聚,低耦合)

1.软件应是可重用性良好的总不能每次复制一大对代码

2.软件应该是可扩展性良好的 总不能加个功能就要重写一遍

3.软件应是可维护性良好的 软件维护(Software maintenance)是一个软件工程名词,是指在软件产品发布以后,因修正错误,提升性能或者其他属性而进行的软件修改,可维护性比较高体现在修炼少量的内容就可以完成重要的任务,衡量一个系统能接受改进,甚至为了进一步适应外界环境而进行功能修改的难易程序

面向过程 / 结构化方法

[摘自:百度百科]

面向过程其实就是实际的一种思路方式,就算是面向对象的方法也是含有面向过程的思想可以说面向过程是一种基础的方法,它考虑的是实际的实现,一般的面向过程是从上往下步步求精,所以面向过程 最重要的是模块化的思想方法。

对比面向过程,面向对象的方法主要把事物给对象化,对象包括属性与行为,当程序规模不是很大时候,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

举个例子:比如学生早上起来这件事情说明面向过程:

1.起床 2.穿衣 3.洗脸刷牙 4.去学校

而这4步就是一步步的完成,顺序很重要,只需要一个一个实现就可以了。

而如果是用面向对象的方法的话,可能就只抽出一个学生的类,它包括这四个方法,但具体的代码顺序不一定按照原来的顺序

生活中的类和对象

在了解完了面向过程和面向对象以后,我们看看生活中的对象

万物皆对象:看看下方,这些对象:名胜古迹,人类,汽车等等,都是我们日常生活中的事物,我们在认识这些事物(对象)的时候,很自认的就会进行分类,人类,哺乳类,爬行类,动物类等等。

所谓的分类就是将这些个体(对象)按照行为方式和特征进行归类,这个 对象的概念是我们面向对象中特别重要的组成。

我们再来看看,下面有两个不同身份的人:

对象的特征 - 属性

顾客 和 收银员 只是一个类

但是只要具体的某一个人,就是对象了。

描述的时候:特征和行为

特征在Java里面,叫做属性,行为在Java里面叫做方法。

属性-对象具有各种特性,每个对象都有特定值

例如:张浩和李明的年龄 性别 姓名都不一样
在这里插入图片描述

对象的行为—方法

方法 - 对象执行的操作

对象:用来描述客观事物的一个实体,由一组属性和方法构成。

PS:不同的业务,体现的特征和行为不同。

类和对象

类:具有相同属性和方法的一组对象的结合

类似对象的抽象,对象是类的具体。

类和对象的关系:

类似抽象的概念,仅仅是模板 比如说“人” 对象是一个你能够看到的,摸到的具体实体

分割线==

Java是面向对象的语言

所有Java程序都以类class为组织单元

关键字 class定义自定义的数据类型

类的创建方式

package org.nosafe.demo;

public class Test {
	
	/**
	 * 定义属性部分
	 * 属性1的类型 属性1;
	 */
	
	/**
	 * 属性n的属性 属性n
	 *
	 */
	
	// 方法
	public void Fangfa() {
		// 方法体
	}

}

定义学生类:

Public class Student{
 // 相关属性
int age;年龄
int StuNo;学号
String major;专业
char gender;性别
}

//相关方法
    public void study(){
        System.out.println("正在学习……");
}


创建对象的写法

语法 类名 对象名 =new 类名();

package test1;

public class Test1 {
	public static void main(String[] args) {
	// 创建对象
	Test a = new Test();
	a.age = 22;
	a.StuNo = 10086;
	a.major = "Java";
	a.gender = '男';
	
	System.out.println("我的年龄是:"+a.age);
	System.out.println("我的学号是:"+a.StuNo);
	System.out.println("我的专业是:"+a.major);
	System.out.println("我的性别是:"+a.gender);
	// 调用方法
	a.study();
}
}

基本方法的创建

面向过程/方法/函数,结构化方法

方法:是功能,是一系列代码的聚合,也可以理解为一个“魔术箱”、

基本语法:

	访问修饰符  返回值类型  方法名(参数列表){
		// 方法体
}

例如:

	Public void(表示没有返回值) showMyself{
	System.out.println();
	}

关于方法的访问修饰符 我们目前先可以写public ,而返回值类型是什么呢?

=有返回值的方法===

有返回值的方法:

1.如果方法没有返回值,则返回值类型为void (void表示空)

2.方法执行完成后,可能会返回一个结果,该结果的类型称为返回值类型

a.好比完成榨果汁这个一个动作
b.榨果汁这件事做完了,有一个劳动成果或者叫产出,就是果汁
c.对应到方法里面,方法执行完成了也可能有返回结果,就是返回值
d.张三让李四去买酱油,动作完成后,返回结果是酱油
e.并不是所有事情都需要有返回结果,比如:张三做了个自我介绍

3.如果返回类型不是void,则一定会有返回值,有返回值就需要用return关键字返回

4.return关键字的使用语法: return 表达式;

5.return关键字的作用:return就是返回的意思

a.跳出方法,即方法结束了
b.返回结果,返回的结果要和返回值类型一致或兼容
c.既然return表示结束,后面不能直接跟后续代码,因为无法执行

6.调用有返回值的方法,在方法执行完成后,结果可以用变量接收,也可以不接收。

带参方法====

带参方法:

1.日常生活中,完成某一操作,是需要前提条件,或者提供相关材料的

a.巧妇难为无米之炊  米 --> 做法烹饪 --> 饭
b.榨汁机
c.取钱

2.方法的本质:

a.接受外界提供的材料
b.方法体内部对材料进行加工处理(核心)
c.返回结果,相当于产品,产出

3.外界提供的材料,相当于方法的参数

4.执行完成的产出,相当于方法的返回值

5.参数列表:

a.方法可以有参数,也可以没有参数
b.一个方法可以有多个参数
c.每个参数由参数类型和参数名组成
d.多个参数之间用逗号分隔

6.带参方法语法:

	                  // 下面的[]号说明是可有可无的
	public 返回值类型  方法名 ([参数类型1 参数名1,参数类型2 参数2……]){
		//方法主体
		return 表达式;
		}

====调用带参方法

1.调用带参方法:

对象名.方法名(参数1,参数2,参数3……);

2.调用带参方法和调用无参方法相同,只不过前者需要在调用时传入参数

3.定义方法时候声明的变量叫做形式参数,是个占位符,简称形参

4.调用方法时候传入的变量叫做实际参数,是运行的实际值,简称实参

5.实际参数的值在调用的时候会传递给形参参数

6.调用带参方法注意:

a.先实例化对象,再通过对象调用方法

b.实参的类型,数量,顺序都要与形参一一对应

7.常见错误:
a.调用方法的时候,把数据类型也写上去了 calc.sum(int 5);

b.参数的数据类型不一致

c.参数的个数不够,多传了参数,或者少传了参数

this关键字

this表示当前对象,谁在调用这个方法 谁就是当前对象!

可以用来调用成员变量/实例变量。 this.属性名

可以用来调用成员方法 this.方法名()

它也可以用来调用构造方法 this(xxx); 必须写在构造中的有效代码的第一行。

===方法间的互相调用

方法间的互相调用:

1.在类的内部,类的不同成员方法之间也可以相互调用

2.调用的时候直接通过方法名调用即可,无需使用对象名

3.类的方法调用规则:

a.同一个类中,方法互相调用直接使用方法名

b.不同类的方法,首先创建对象,再通过对象.方法名();调用
package demo1;
/**
 * 
 * @author DreamingGod123
 * @version 1.0
 */
public class Cat {
	// 定义一个吃的方法
	// 扔给猫一条鱼 它叫一声喵喵喵
	public String eat(String fish) {
		// 如果传入的是鱼 喵喵喵
		if(fish.equals("鱼")) {
			return "喵喵喵";
		}else {
			return "不吃!";
		}
	}
	
	// 定义一个玩的方法
	// 逗猫玩 输出:猫咬了我一口
	public void play() {
		String result = eat("骨头"); // 同类之间的不同方法可以直接调用
		System.out.println(result);
		System.out.println("猫咬了我一口");
	}

}

package demo1;

public class Test {
	public static void main(String[] args) {
		// 不考虑静态static的概念
		// 不同类之间的方法先创建对象才能使用
		Cat a = new Cat();
		a.eat("鱼");
		System.out.println(a.eat("鱼"));
		a.play();
	}

}

常见错误:

a.返回值类型为void,表示没有返回值,不能有return语句

b.一个方法不能有多个返回值,更不能返回多次

c.声明方法时,方法中不能嵌套方法

d.return表示结束方法并返回结果,语句后面不能直接跟其他代码

e.不能在方法外面直接写逻辑代码

===变量的作用域

变量的作用域

1.生活中有些资源我们无权访问,或者只有特定的人才能访问

a.比如公司的财务报表,工资报表,只能领导或者财务高管才能看

b.群主可以@所有人

c.有些商品vip可以有折扣

2.java中声明的不同变量,在访问的时候也是有差别的,这个叫做变量的作用域

3.作用域不同,表示变量使用的范围不一样

4.成员变量

a.类中的成员变量,可以在本类所有方法的任意位置直接使用,即全局有效

b.类中的成员变量,如果要在类的外部即其他类使用,需要先实例化

5.局部变量

a.定义在方法的内部

b.使用范围只能在方法内使用

c.如果是流程控制语句内定义的局部变量,作用域范围更小

if(……){
	int a = 4;
}

6.成员变量和局部变量的区别:

a.作用域不同

b.初始值不同

c.如果重名,则局部变量优先级更高,类似于就近原则

猜你喜欢

转载自blog.csdn.net/DreamingGod123/article/details/88972361