Java学习-Day07(类与对象构建流程、this关键字、重载)

类与对象

对象(属性、行为)

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

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

在这里插入图片描述

jdk1.8 常量池位置有所变动,不再深究。

  • 属性=成员变量=field
  • 属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象、数组)

属性注意事项和细节:

  1. 访问修饰符 属性类型 属性名;

    public/private/protected/默认

  2. 属性的类型可以为任意类型,可以是基本数据类型,也可以是引用类型

  3. 对象的属性默认值,遵守数组规则。

Cat gaogao = new Cat();

//gaogao是对象名,也叫对象引用,new Cat()创建的对象空间(数据)才是真正的对象。

创建对象两种方法:

  1. 先声明再创建
   Cat gaogao;

   gaogao = new Cat();
  1. 直接创建
   Cat gaogao = new Cat();

访问属性的基本语法:对象名.属性

类与对象的内存分配机制:

Person p1 = new Person();

...

Person p2 = p1;//此时是引用传递,地址拷贝,p2改变会影响p1

java内存结构分析:

  1. 栈:一般存放基本数据类型(局部变量)

  2. 堆:存放对象(类、数组等)

  3. 方法区:常量池(常量,比如字符串)类加载信息

    可能版本有所更改

Java创建对象流程:

  1. 先加载Person类信息(属性和方法信息,只会加载一次)
  2. 在堆中分配空间,进行默认初始化
  3. 把地址付给p,p就指向对象
  4. 进行指定初始化,比如p.name=“jack”

成员方法调用机制分析:

  1. 当程序执行到方法时,就会开辟一个独立的空间(栈空间)
  2. 当方法执行完毕,或者执行到return语句时,就会返回
  3. 返回到调用方法的地方
  4. 返回后,继续执行方法后面的代码
  5. 当主方法(栈)执行完毕后,整个程序退出

成员方法的定义:

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

​ 语句;

​ return 返回值;

}

  1. 形参列表:表示成员方法的输入
  2. 返回数据类型:表示成员方法输出,void表示没有返回值
  3. 方法主体:表示为了实现某一功能的代码块
  4. return语句不是必须的,void就不用

方法的注意事项和细节:

  • 访问修饰控制方法使用范围,四种,public,protected,private,默认
  • 返回数据类型
    1. 一个方法最多有一个返回值,返回多个结果可以使用数组
    2. 返回类型可以是任意类型,基本数据类型和引用类型都可以
    3. 如果方法要求有返回数据类型,则方法体中最后的执行语句必须为return值,而且要求返回值类型和return的值类型一直或者兼容(自动类型转换)
    4. 如果方法是void,方法中可以不写return语句或者只写return语句(后面不要写值)
    5. 方法名遵循驼峰命名法,最好见名知意,表达出该功能的意思即可
  • 形参列表
    1. 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开
    2. 参数类型可以是任意类型,包括基本数据类型和引用类型
    3. 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数
    4. 方法定义时的参数成为形式参数(形参),方法调用时传入的参数实际参数(实参),形参和实参的类型要相同或兼容,个数、顺序必须一致
  • 方法体:可以是输入、输入、计算、循环等,但是不能嵌套方法
  • 方法调用
    1. 同一个类中的方法调用:直接调用即可;
    2. 跨类中的方法A类调用B类方法:需要通过对象名调用(先创建个对象,再调用方法);
    3. 跨类的方法调用和方法的访问修饰符相关

注意引用传递(传地址,可以通过形参影响实参)和值传递(不能通过形参影响实参)

class Person{
    int age;
}
Person p = new Person();
p.age = 10; 
System.out.println(p.age);
class B{
    public void test(Person p){
        p.age = 10000;//此时形参影响实参,输出10000
        p = null;//此时只是形参的p指向null,实参不变,输出10
        p = new Person();
        p.age = 50;//此时形参的p指向新建的对象,实参的p还是指向原来的对象,输出10
    }
}

方法递归调用:

  • 递归重要规则

    1. 执行一个方法时,就创建一个新的受保护的独立空间 (栈空间)
    2. 方法的局部变量是独立的,不会相互影响
    3. 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据
    4. 递归必须向推出递归的添加逼近,否则就是无限递归,出现StackOverflowError
    5. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时,当方法执行完毕或者返回时,该方法也就执行完毕。
  • 老鼠出迷宫

  • 汉诺塔

  • 八皇后(一维数组可以完成)

方法重载:

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

重载的好处:

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

方法重载的注意事项和细节:

  1. 方法名必须相同
  2. 形参列表必须不同(形参类型、个数或者顺序至少一个不同)参数名并无要求
  3. 返回类型无要求

可变参数:

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

  • 基本语法:

    访问修饰符 返回类型 方法名(数据类型 形参……)

  public in sum(int n1,int n2){
      return n1 + n2;
  }
  public in sum(int n1,int n2,int n3){
      return n1 + n2 + n3;
  }
  public in sum(int n1,int n2,int n3,int n4){
      return n1 + n2 + n3 + n4;
  }
  .........
   //可以使用可变参数,封装成一个方法
  public int sum (int... nums){
      int res = 0;
      for(int i = 0;i < nums.length;i++){
          res += nums;
      }
      return res;
  }

可变参数注意事项和细节:

  1. 可变参数的实参可以为0个或者任意多个
  2. 可变参数的实参可以为数组
  3. 可变参数的本质就是数组
  4. 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
  5. 一个形参列表中只能出现一个可变参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚来舟Mango

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值