面向对象详讲(上)

面向对象上篇*

## 1.类与对象

1.1看一个养猫猫问题在这里插入图片描述

1.2 java语言是面向对象的
计算机语言的发展向接近人的思维方式演变(能编写功能更多软件):
汇编语言 [面向机器] 有助记符 load return …
c语言 [面向过程] 函数=> 完成功能
java语言 [面向对象] 类与对象 => 编写更加复杂,大型软件

		汇编语言(汇编 不会编,不会编汇编)=> 驱动程序

1.3类与对象的关系示意图
在这里插入图片描述

1.4 快速入门-面向对象的方式解决养猫问题

import java.util.Scanner;
public class OOPTest
{
   
	public static void main(String[] args) {
   
		// int num1 = 20;
		Cat cat1 = new Cat();
		cat1.name = "小白";
		cat1.age = 3;
		cat1.color = "白色";
		System.out.println("猫的信息:" + cat1.name + " " + cat1.age + " " + cat1.color);	
	}
}
//定义一个猫类(数据类型)
class Cat //Cat.class
{
   
	//属性
	String name; // null
	int age;//0
	String color;//null

	//行为 =》 方法
}
class Car
{
   
	//属性,成员变量,字段
	String  name;
	double price;
	String color;
}

1.5类和对象的区别和联系
通过上面的案例和讲解我们可以看出:

1)类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型.
2)对象是具体的,实际的,代表一个具体事物, 即 是实例.
3)类是对象的模板,对象是类的一个个体,对应一个实例

1.6对象在内存中存在的形式

在这里插入图片描述

1.7属性/成员变量
基本介绍

1)从概念或叫法上看: 成员变量 = 属性 = field (即 成员变量是用来表示属性的,授课中,统一叫 属性)
案例演示:Car(name,price,color)

2)属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类 的 int age 就是属性

属性的注意事项和细节
在这里插入图片描述

import java.util.Scanner;
public class ProDetail
{
   
	public static void main(String[] args) {
   
		
			int num = 100;
		
			/*
			属性如果不赋值,有默认值,规则和数组一致。
			案例演示:[Cat, Dog] //int 	0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,
			boolean false,String null , 即只有是引用类型,统统为null
			*/
			Cat myCat = new Cat();
			System.out.println("默认值 " + myCat.name + " " + myCat.age + " " + myCat.color);

			Cat myCat2 = new Cat();
			myCat2.name = "小白"; 
			System.out.println("mycat " + myCat.name + " " + myCat.age + " " + myCat.color);
			System.out.println("mycat2 " + myCat2.name + " " + myCat2.age + " " + myCat2.color);
	}
}

//定义一个猫类(数据类型)
class Cat
{
   
	//属性
	String name;
	int age;
	String color;
	//行为 =》 方法
}

1.8类和对象的内存分配机制(重要)
在这里插入图片描述
在这里插入图片描述

1.9Java内存的结构分析
1)栈: 一般存放基本数据类型(局部变量)
2)堆: 存放对象(Cat cat , 数组等)
3)方法区:常量池(常量,比如字符串), 类加载信息
4)示意图 [Cat (name, age, price)]

1.10java创建对象的流程简单分析
在这里插入图片描述
1)先加载Person 类 , 只会加载一次
2)在堆中,分配空间[地址],并进行默认初始化,比如 name=null age = 0
3)把堆中地址,返回给 p1
4)进行指定初始化 name = “jack” age = 10
5)开始使用p1

1.11类和对象的内存分配机制-练习题

在这里插入图片描述

在这里插入图片描述

2成员方法

2.1基本介绍

在某些情况下,我们要需要定义成员方法。比如人类:除了有一些属性外( 年龄,姓名…),我们人类还有一些行为比如:可以说话、跑步…,通过学习,我们人类还可以做算术题。这时就要用成员方法才能完成。现在要求对Cat类完善。

2.2成员方法快速入门

1)添加speak 成员方法,输出 我是一只好猫
2)添加jisuan 成员方法,可以计算从 1+…+1000的结果
3)添加cal 成员方法,该方法可以接收一个数n,计算从 1+…+n 的结果
4)添加getSum成员方法,可以计算两个数的和
5)代码:

import java.util.Scanner;

//成员方法的使用
public class MethodTest
{
   
	public static void main(String[] args) {
   
		//调用方法
		//1. 创建对象
		Cat myCat = new Cat();
		//2. 调用方法
		myCat.speak();
		myCat.jisuan();
		System.out.println("请输入一个整数");
		Scanner myScanner = new Scanner(System.in);
		int num = myScanner.nextInt();
		myCat.cal(num); // 20 称为 实际参数(实参)
		myCat.getSum(30, 100);
	}
}

//定义一个猫类(数据类型)
class Cat //Cat.class
{
   
	//属性
	String name; // null
	int age;//0
	String color;//null

	//行为 =》 方法
	//添加speak 成员方法,输出 我是一只好猫
	//解读
	//1. public 表示公开方法
	//2. void 没有返回值
	//3. speak 方法名, () 没有形参
	//4 { } 称为方法体
	//5. 写入你的代码
	public void speak() {
   
		System.out.println("我是一只好猫");
	}

	//添加jisuan 成员方法,可以计算从 1+..+1000的结果
	public void jisuan() {
   
		int sum = 0;
		for( int i = 1; i <= 1000; i++) {
   
			sum += i;
		}
		System.out.println("sum=" + sum);
	}
	//传递参数
	//添加cal 成员方法,该方法可以接收一个数n,计算从 1+..+n 的结果
	//传递参数
	//术语 :int n 称为 形式参数(形参)
	public void cal(int n) {
   
		int sum = 0;
		for( int i = 1; i <= n; i++) {
   
			sum += i;
		}
		System.out.println("sum=" + sum);
	}
	//添加getSum成员方法,可以计算两个数的和
	public void getSum(int n1, int n2) {
   
		int sum = n1 + n2;
		System.out.println("和=" + sum);
	}
}

2.3方法的调用机制原理:(重要!!!)
提示:画出程序执行过程[cal]+说明

2.4为什么需要成员方法
看一个需求:
请遍历一个数组 , 输出数组的各个元素值。
解决思路1,传统的方法,就是使用单个for循环,将数组输出,大家看看问题是什么?

解决思路2: 定义一个类 MyTools ,然后写一个成员方法,看看效果又如何。

代码如下

import java.util.Scanner;

//成员方法的使用
public class WhyMethod
{
   
	public static void main(String[] args) {
   
		int[] arr1 = {
   1, 2, 50, 900, 900, -12};
		//创建MyTools对象
		MyTools tools = new MyTools();
		tools.printArr(arr1);
		int[] arr2 = {
   1, 2, 50, 900, 900, -12, 10000};
		tools.printArr(arr2);
		int[] arr3 = {
   1
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值