• JAVA面向对象基础


    类和对象

    类和对象的关系

    类是自定义的数据类型,对象是类的实例
    类和对象的关系示意图

    快速入门

    养猫问题,存储两只猫的信息

    public class Object {
        public static void main(String[] args) {
    //        实例化猫
            Cat cat1 = new Cat();
            cat1.age = 3;
            cat1.name = "小白";
            cat1.color = "白色";
            
            Cat cat2 = new Cat();
            cat2.age = 100;
            cat2.name = "小花";
            cat2.color = "花色";
        }
    
    }
    //创建猫类
    class Cat {
        String name;
        int age;
        String color;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    内存中的存在形式

    • 执行new语句时会在方法池中加载类的信息
    • 然后再栈中存储类的地址,在堆中开辟存储空间
    • 对于类中的属性,基本数据类型直接存储,引用数据类型会存储地址,具体的值存储在方法区的常量池中。
      对象的内存分布

    属性

    • 属性就是成员变量,也可以叫做字段,是类的一个组成部分
    • 属性可以是基本数据类型,也可以是引用数据类型
    • 属性如果不赋值会有默认的值
    • 访问修饰符,可以控制属性的访问范围,有四种访问修饰符
      • public
      • proctected
      • 默认
      • private

    对象的创建和访问

    1. 创建类
    class Cat {}
    
    • 1
    1. 声明对象
    Cat cat
    
    • 1
    1. 创建实例对象
    cat = new Cat();
    // 可以和第二步直接结合
    Cat cat = new Cat();
    
    • 1
    • 2
    • 3
    1. 通过对象访问属性
    cat.age
    cat.color
    
    • 1
    • 2

    成员方法

    方法的定义和调用

    方法的定义

    在这里插入图片描述

    方法细节

    • public 是访问修饰符,用于限制方法的使用范围,不写就是默认范围。
    • 一个方法只能有一个返回值,要返回多个数值可以返回一个数组。
    • 返回类型可以为任意类型,包括基本类型和引用类型。
    • 如果方法要求有返回值,那么语句中必须包含return。
    • 如果是void方法,可以没有return,或者只写return不返回值。
    • 方法的命名采用驼峰法。

    方法的调用机制

    执行main函数时会先开辟出一个main栈,开始执行main函数
    在main栈中先执行new语句在堆中来开辟一处空间
    然后调用函数,会在主栈中在开辟一个getsum栈,函数执行完毕后该栈自动销毁
    方法调用机制

    方法传参机制

    • 对于基本数据类型,形参的数据变化不影响实参。
    • 引用数据类型传递的是地址,但地址也是值,形参的变化会影响实参,在函数中修改地址的值不会影响原有的地址。

    方法重载(OverLoad)

    允许在同一个类中多个同名方法存在,但要求形参不一样。

    好处

    • 减轻了起名的麻烦
    • 减轻的记名的麻烦

    快速入门

    class Computed {
        public int calculate(int a, int b) {
            return a + b;
        }
    
        public double calculate(int a, double b) {
            return a + b;
        }
    
        public double calculate(double a, int b) {
            return a + b;
        }
    
        public int calculate(int a, int b, int c){
            return a + b + c;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注意细节

    • 函数名必须相同
    • 参数必须有不同(类型不同,个数不同,顺序不同),参数名称不同无效
    • 函数返回类型不做要求

    可变参数

    定义

    将同一个类中多个同名同功能的但参数个数不同的方法封装成一个方法。
    类似ES6的剩余参数

    使用

    class HspMethod {
        //int... 表示接受的是可变参数(可以接受0-n的整数)
        //传入的参数会被存储在numbers数组中
        public int sum(int... numbers) {
            int t = 0;
            for (int i = 0; i < numbers.length; i++) {
                t += numbers[i];
            }
            return t;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    细节

    • 可变参数的实参可以为0个或多个
    • 可变参数的实参可以是数组
    • 可变参数本质就是数组
    • 可变参数可以和普通参数一起使用,但可变参数必须在最后
    • 一个函数中只能有一个可变参数

    作用域

    基本使用

    • 在java中,定义的主要变量就是属性和局部变量
    • 局部变量一般是指在成员方法中定义的变量
    • 全局变量可以在方法中使用,局部变量只能在对应的块中使用
    • 全局变量可以不赋值,因为有默认值,局部变量没有默认值,必须先定义再使用。

    细节

    • 局部变量和全局变量可以重名,访问时遵循就近原则
    • 在同一个作用域中不能有重名的变量
    • 属性的生命周期和对象相同,函数的生命周期与方法相同
    • 属性可以被本类和其他类使用,局部变量只能在方法调用时使用
    • 局部变量不能加修饰符

    构造器

    基本介绍

    • 方法名和类名相同
    • 没有返回值
    • 参数列表和普通方法相同
    • 在创建对象时,系统自动调用完成对象的初始化

    快速入门

    class T {
        int age;
        char sex;
        T (int a,char b){
            age = a;
            sex = b;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    细节

    1. 构造器可以重载
    2. 构造器是完成对象的初始化而不是创建
    3. 在创建对象时系统会自动调用构造器
    4. 如果没有定义构造器,系统会自动生成一个无参数的构造器
    5. 定义构造器后默认的构造器会被覆盖(必须传参数进去),除非再手动添加一个无参数构造器

    this

    this的本质

    this的本质就是一个指向自身的属性,简单来说,哪个对象调用,this就代表哪个对象。
    this的本质

    细节

    1. this可以用来访问本类的属性、方法、构造器等
    2. this用于区分属性和局部变量
    3. this访问方法的语法:this.方法名(参数表)
    4. 访问构造器语法:this(参数表),只能在构造器内部使用
    5. this不能在类定义的外部使用,只能在类定义的方法中使用
  • 相关阅读:
    [并发编程基础]-集合的线程安全
    数据中心标签的重要性
    springboot自定义参数解析器
    为什么sleeping的会话会造成阻塞
    腾讯云轻量应用服务器部署(新手图文教程)
    新手小白剪辑视频知识点:视频分辨率和位深度,有什么区别?
    美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
    业务架构·应用架构·数据架构实战~TOGAF理论全景解读
    Android全屏显示和屏幕旋转的处理
    Linux内核宏Container_Of
  • 原文地址:https://blog.csdn.net/m0_66711291/article/details/125443180