面向对象编程(基础部分)(day7)

目录

1.类与对象(oop)

1.1 使用现有的技术解决。

1.2 类与对象的关系示意图:

1.3 对象在内存中存在的形式(重要!!!)

1.4 属性 / 成员变量 / 字段

1.5 如何创建对象

1.6如何访问属性

1.7 类和对象的内存分配机制(重要!!!)

2.成员方法

2.1基本介绍

2.3 方法的调用机制原理(重要!!!)

2.4成员方法的好处

2.5成员方法的定义

2.6注意事项和使用细节

3.成员方法传参机制 (非常非常重要!!!)

基本数据类型的传参机制:

 

引用数据类型的传参机制:

4.方法递归调用

基本介绍:

阶乘

 4.4递归重要规则

小迷宫

5.方法重载(OverLoad)

5.1基本介绍

5.2重载的好处。

5.3注意事项和使用细节

6.可变参数

6.1 基本概念

6.2 基本语法

6.3注意事项和使用细节

7.作用域

基本概念

7.2注意事项和使用细节 

8.构造方法 /  构造器

8.1基本语法

 8.2基本介绍

 8.3注意事项和使用细节

 9.对象创建流程分析(回顾)

 上下对照分析​

10.this关键字

10.2注意事项和使用细节


1.类与对象(oop)

1.1 使用现有的技术解决。

使用单独定义变量解决

使用数组解决。

缺点分析:不利于数组的管理效率低。

1.2 类与对象的关系示意图:

猫类Cat :自定义数据类型 猫对象(具体一只猫)

int : Java提供数据类型 100

1.类就是数据类型,比如Cat

2.对象就是一个具体的实例

1.3 对象在内存中存在的形式(重要!!!

例: Cat cat = new Cat(); //new Cat(); 创建一只猫 ,把创建的猫赋给cat

1.4 属性 / 成员变量 / 字段

基本介绍:

1) 叫法: 成员变量 = 属性 = field(字段)

2) 属性是类的一个组成部分,一般是基本数据类型,也可以说引用类型(对象,数组)

1.5 如何创建对象

1) 先声明在创建

         Cat cat ; //声明对象 cat

        cat = new Cat(); //创建

2)直接创建

        cat = new Cat();

1.6如何访问属性

基本语法:

        对象名.属性名;

1.7 类和对象的内存分配机制(重要!!!

   4)进行指定初始化

2.成员方法

2.1基本介绍

 

 

2.3 方法的调用机制原理(重要!!!

 

2.4成员方法的好处

1)提高代码的复用性。

2)可以将实现的细节封装起来,然后供其他用户来调用即可。

2.5成员方法的定义

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

                语句;

                Return返回值;

}

1.形参列表 :表示成员方法输入

2.数据类型(返回类型)表示成员方法输出,void表示没有返回值。

3.方法主体 :表示为了实现某一功能代码块。

4. return 语句不是必须的。

2.6注意事项和使用细节

 

方法调用

1)同一个类中的方法调用: 直接调用即可。

2)跨类中的方法  A类调用  B类方法; 需要通过  对象名.方法名(参数)

3)特别说明 :跨类的方法调用和方法的访问修饰符相关。

3.成员方法传参机制 (非常非常重要!!!

基本数据类型的传参机制:

        基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!

 

引用数据类型的传参机制:

        引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参。

 

 

 

4.方法递归调用

基本介绍:

        简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂问题,同时可以让代码变得简洁。

例题:

 

阶乘

 4.4递归重要规则

 

小迷宫

public class Migong {


	//编写一个main方法
	public static void main (String[] args) {
		int map[][] = new int[8][7];
		
		for(int i = 0;i < map[i].length;i++){//第一行和最后一行设置为1
			map[0][i] = 1;
			map[7][i] = 1;
		}
		
		for(int i = 0;i < map.length;i++){//第一列和最后一列设置为1
			map[i][0] = 1;
			map[i][6] = 1;
		}

		//设置障碍
		map[3][1] = 1;
		map[3][2] = 1;
		// map[2][2] = 1;
		// map[1][2] = 1;

		for(int i = 0;i < map.length;i++){ //遍历
			for(int j = 0;j < map[i].length;j++){
				System.out.print(map[i][j] + " ");

			}
			System.out.println();
		}

		System.out.println("=======回溯后=========");

		BB t = new BB();
		t.findWay(map,1,1);

		for(int i = 0;i < map.length;i++){ //遍历
			for(int j = 0;j < map[i].length;j++){
				System.out.print(map[i][j] + " ");

			}
			System.out.println();
		}


		// CC c = new CC();
		// c.findWay(map,1,1);

		// for(int i = 0;i < map.length;i++){ //遍历
		// 	for(int j = 0;j < map[i].length;j++){
		// 		System.out.print(map[i][j] + " ");

		// 	}
		// 	System.out.println();
		// }


	}
}


class BB{
	int count = 0;
	//用回溯的思想来解决老鼠出迷宫的问题

	//1.findWay方法就是专门来找出迷宫的路径
	//2.如果找到就返回true ,否则返回 false
	//3.map 就是二维数组,即表示迷宫
	//4.i ,j 就是表示老鼠的位置,初始化的位置为(1,1)

	//规定 0表示路 ,1表示墙,2表示可以走,3表示死路
	//判断方向:下 -> 右 -> 上 ->左

	public boolean findWay(int[][] map ,int i,int j){
		
		if( map[6][5] == 2){
			System.out.println("下 -> 右 -> 上 ->左:共走了= "+ count +"步");
			return true;

		}
		if(map[i][j] == 0){
			map[i][j] = 2;
			count++;

			if(findWay(map,(i+1),(j))){
				return true;
			}else if(findWay(map,(i),(j+1))){
				return true;
			}else if(findWay(map,(i-1),(j))){
				return true;
			}else if(findWay(map,(i),(j-1))){
				return true;
			}else{
				map[i][j] = 3;
				return false;
			}


		}else{//map = 1,2,3
			return false;

		}

	}
}



class CC{
	int count = 0;
	//用回溯的思想来解决老鼠出迷宫的问题

	//1.findWay方法就是专门来找出迷宫的路径
	//2.如果找到就返回true ,否则返回 false
	//3.map 就是二维数组,即表示迷宫
	//4.i ,j 就是表示老鼠的位置,初始化的位置为(1,1)

	//规定 0表示路 ,1表示墙,2表示可以走,3表示死路
	//判断方向:上 -> 右 -> 下 -> 左

	public boolean findWay(int[][] map ,int i,int j){
		
		if( map[6][5] == 2){
			System.out.println("上 -> 右 -> 下 -> 左:共走了= "+ count +"步");
			return true;

		}
		if(map[i][j] == 0){
			map[i][j] = 2;
			count++;

			if(findWay(map,(i-1),(j))){
				return true;
			}else if(findWay(map,(i),(j+1))){
				return true;
			}else if(findWay(map,(i+1),(j))){
				return true;
			}else if(findWay(map,(i),(j-1))){
				return true;
			}else{
				map[i][j] = 3;
				return false;
			}


		}else{//map = 1,2,3
			return false;

		}

	}
}

 

5.方法重载(OverLoad)

5.1基本介绍

        java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!

5.2重载的好处。

1)减轻了起名的麻烦

2)减轻了记名的麻烦。

5.3注意事项和使用细节

 

6.可变参数

6.1 基本概念

 Java允许将同一个类中多个同名同功能,但参数个数不同的方法,封装成一个方法。

6.2 基本语法

6.3注意事项和使用细节

 

7.作用域

基本概念

7.2注意事项和使用细节 

8.构造方法 /  构造器

8.1基本语法

 8.2基本介绍

 8.3注意事项和使用细节

 9.对象创建流程分析(回顾)

 上下对照分析

 

10.this关键字

        this 代表当前对象

小结: 哪个对象调用,this就代表哪个对象

 

10.2注意事项和使用细节

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值