第七章 :类与对象

第七章 :类与对象

类与对象的关系

类与对象的关系

对象内存分配机制

对象内存分配机制

属性和注意细节

概念:属性又称成员变量、字段

如何创建对象和访问属性

1.创建对象:
	(1):先声明再创建
		Cat cat;
		cat = new Cat();
	(2):直接创建
		Cat cat = new Cat();
2.访问属性:
	对象名.属性名

方法调用机制

方法调用机制

方法注意细节

注意细节:
	(1):返回类型可以为任何类型,包含基本类型和引用类型(数组、对象)
	(2):如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值,且返回值类型与return的值类型一致或兼容
    (3):方法不能嵌套定义

方法传参机制

基本数据类型传参机制

基本数据类型传参机制

结论:基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参
引用数据类型传参机制

引用数据类型传参机制

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

递归

概念:方法自己调用自己,每次调用时传入不同的变量
过程:
	(1):递归
	(2):回溯

递归练习

打印
阶乘
桃子问题
斐波那契数列
import java.util.Scanner;
public class fibonaqi {
    public static void main(String[] args){
        /*
        需求:斐波那契数列
         */
        //代码实现
        System.out.println("请输入想要知道的斐波那契数列的第多少项:");
        Scanner reader = new Scanner(System.in);
        int num = reader.nextInt();
        double sum = fibonaqi1(num);
        System.out.println("斐波那契数列第" + num + "项的值为:" + sum);
    }
    static double fibonaqi1(int num){
        if(num == 1|num == 2){
            return 1;
        }else{
            return fibonaqi1(num - 1) + fibonaqi1(num - 2);
        }
    }
}

迷宫问题
汉诺塔
public class hannuota {
    public static void main(String[] args){
        /*
        需求:汉诺塔
         */
        //代码实现
        int num = 5;
        char a = 'A',b = 'B',c = 'C';
        hannuota1(5,a,b,c);

    }
    static void hannuota1(int num,char a,char b,char c){
        if(num == 1){
            System.out.println(a + "-->" + b);
        }else{
            hannuota1(num - 1,a,c,b);
            System.out.println(a + "-->" + b);
            hannuota1(num -1 ,b,a,c);
        }
    }
}
八皇后

方法重载以及细节

同名不同参(参数类型、个数、顺序不同)
注意细节:
	(1):方法名相同
	(2):形参不同
	(3):返回类型无要求

可变参数以及细节

java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。(通过可变参数实现)
简单来说:形参可以传入0个或多个,以数组形式存在
语法:
	访问修饰符 返回类型 方法名(数据类型...形参名){
	
	}
注意细节:
	(1):可变参数的实参可以为0个或任意多个
   	(2):可变参数的实参可以为数组
    (3):可变参数的本质就是数组
    (4):可变参数可以和普通类型的参数一起放在形参列表,但需保证可变参数在最后
    (5):一个形参列表中只能出现一个可变参数

作用域以及细节

作用域的分类:
	(1):全局变量:属性,作用域为整个类体,声明周期较长
	(2):局部变量:除了属性之外的其他变量,作用域为定义它的代码块,生命周期较短
注意细节:(1):全局变量(属性)可以不赋值,有默认值
			局部变量必须赋值后使用,没有默认值
		(2):属性和局部变量可以重名,访问时遵循就近原则
		(3):属性可以加修饰符
			局部变量不可以加修饰符

构造器以及细节

语法:
[修饰符] 方法名(形参列表){
	方法体;
}
注意细节:
	(1):修饰符可以是默认,或者publicprotectedprivate
	(2):构造器没有返回值
	(3):方法名和类名相同
	(4):调用由系统自动完成
    (5):构造器重载
    (6):有则无,无则有

对象创建流程分析

对象创建流程分析1

对象创建流程分析

this关键字以及细节

this关键字的理解

简单来说:哪个对象调用,this就指向哪个对象
功能:访问本类属性、方法、构造器
	 用于区分当前类的属性和局部变量

本章作业

1.编写类A01,定义方法max,实现求某个double数组的最大值,并返回

public class zuoye1 {
    public static void main(String[] args){
        /*
        需求:### 编写类A01,定义方法max,实现求某个double数组的最大值,并返回
        实现:(1):先完成正常业务
             (2):再考虑代码健壮性
         */
        //代码实现
        double[] a = null;
        A01 a01 = new A01();
        Double max = a01.max(a);
        if(max != null){
            System.out.println("此double数组的最大值为:" + max);
        }else{
            System.out.println("double数组有误");
        }
    }
}
class A01{
    Double max(double[] a){
        if(a != null && a.length > 0 ){//防止数组长度为0或者为null,由于必须有返回值,所以将方法返回类型设为Double类,实际是个地址,就可以返回null或者max,因此可以判断数组是否有误
            double max = a[0];
            for(int i = 0;i < a.length; i++){
                if(a[i] > max){
                    max = a[i];
                }
            }
            return max;
        }else{
            return null;
        }

    }
}

14.扩展题:有个人Tom,设计他的成员变量、成员方法,可以和电脑猜拳,电脑每次都会随机生成0,1,2(0表示石头,1表示剪刀,2表示布)并要可以显示Tom的输赢次数(清单)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值