四、面向对象编程(基础)

本文介绍了面向对象编程的基础概念,包括类与对象的定义,构造器的使用,参数传递(值传递与引用传递),以及重载、可变参数、作用域和this关键字的讲解。实例演示了类的创建、对象的初始化过程以及如何通过this关键字访问本类的属性和方法。
摘要由CSDN通过智能技术生成

四.面向对象编程(基础)

1.类与对象概念
  • 类与对象
class Cat {
    //属性、成员变量、字段(field)
    String name;
    int age;
    String color;
    String[] master;//属性可以是基本类型、也可以是引用类型
}//这是一个类

Cat cat1 = new Cat();//cat1是一个对象
  • 对象的存在形式

    在这里插入图片描述

  • 访问修饰符:控制属性的访问范围(后边会详细讲 )

    • public、protected、private、默认
  • Java创建对象流程(要理解,很重要!!)

    • 先加载类信息(属性和方法信息,只会加载一次)
    • 在堆中分配空间,根据类内属性类型进行默认初始化
    • 把地址赋给对象名,也就是对象名指向对象数据
    • 进行指定初始化
  • 方法的调用机制原理

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

    在这里插入图片描述

  • 方法的好处

    • 提高代码的复用性
    • 内部封装起来
  • 方法里边不能嵌套方法!!!

  • 类中方法调用

    • 同一个类中的方法,直接调用即可,即不需要声明类对象
    • 跨类中的方法A类调用B类中的方法,需要先声明一个对象,并通过对象名调用
public class Homework02{
		public static void main(String[] args) {
			A a = new A();
			a.sayOk();
			a.m1();
		}
}
class A {
	public void print (int n) {
		System.out.println("print()方法被调用 n = "+n);
	}
	public void sayOk() {
		System.out.println("sayOk()方法被执行")print(10);
	}
	public void m1() {
		System.out.println("m1()方法被调用");
		B b = new B();
		b.hi();
	}
}
class B {
	public void hi() {
		System.out.println("B类中的hi()方法被执行")}
}
  • 参数传递机制
    • 基本变量类型是值传递(拷贝),形参的任何改变不影响实参
    • 引用变量类型是地址传递,形参的改变影响实参
2.递归

有时间再细看

3.重载、可变参数、作用域、构造器、this
  • 重载:

    • 同一个类中,多个同名方法存在,形参列表不一致
    • 方法名必须相同,形参类型或者个数或者顺序至少有一个不一样,返回类型无要求
  • 可变参数

    • 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法
    public int sum(int... nums){  //nums 可以传递0-N个int类型参数
        int res = 0;
        for(int i = 0; i < nums.length; i++){   //可变参数可以当做数组来求长度
            res += nums[i];
        }
        return res;
    }
    
    • 注意:一个形参列表中最多只能出现一个可变参数,且参数必须放到最后
  • 作用域

    • 全局变量

      • 也就是属性,作用域是整个类,不赋值也有默认值
      • 生命周期长,伴随对象的创建而创建,伴随对象的销毁而销毁
      • 可以被本类使用,可以被其他类使用(通过对象调用属性)
      • 可以加修饰符
    • 局部变量

      • 除了属性之外的其他变量,作用域为定义它的代码块中,必须赋值才能使用!
      • 生命周期短,伴随着它的代码块而创建,即在一次方法调用的过程中
      • 只能在对应的代码块中使用
      • 不能加修饰符
    • 细节:全局变量和局部变量可以重名,就近原则使用

  • 构造器

    • 分为有参构造器、无参构造器、默认构造器
    • 构造器可以有修饰符(默认、public protected private)
    • 构造器没有返回值,而且方法名必须和类名一致
    • 构造器也是一种方法,所以可以重载
    • 不写构造器,系统自动给一个默认无参数构造器(也叫默认构造器
    Dog dog = new Dog();
    //这里用Dog()其实就是因为使用一下类的默认构造器
    
    • 一个小技巧:反编译
      • 在控制台数输入javap Dog.class 即可以把class文件反编译为源文件java
    • 一旦定义了自己的构造器,那默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非再显示的定义一下
    public class MyClass {
        // 有参构造器
        public MyClass(int value) {
            // 构造器的初始化逻辑
        }
    
        // 显式定义无参构造器
        public MyClass() {
            // 可以在这里添加初始化逻辑,或者留空表示不进行额外的初始化
        }
    }
    
  • 对象创建流程(理解了非常重要)

    1. 先加载Preson类信息,整个程序只会加载一次,加载到方法区

    2. 在堆中分配一个对象地址

    3. 完成对象初始化

      3.1 默认初始化

      3.2 显式初始化

      3.3 构造器初始化

    4. 将对象在堆中的地址,返回给栈中的对象引用

  • this关键字

    • 简单滴说,那个对象调用,this就代表哪个对象,可以把它理解成一个引用对象名
      在这里插入图片描述
    • this可以用来访问本类的属性、方法、构造器
    • this用于区分当前类的属性和局部变量
    • 访问成员方法的语法是:this.方法名(参数列表)
    • 访问构造器语法:this(参数列表) 注意只能在构造器中使用(只能在构造器中访问另外一个构造器, 必须放在第一条语句)
  • 45
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值