JAVA学习笔记第四天——类和对象、方法重载

一、回顾

数组: 3种初始化方式
   长度length, 长度不可变
   引用类型 -> 堆
   访问, index: 0~length-1
   内存图: 非常重要
方法:
修饰词  返回值类型  名字(参数列表) {方法体}
方法签名: 方法名+参数列表
返回值: return
调用: 执行方法体
JVM:
方法区: 类加载后的信息
栈: 临时变量\局部变量
堆: 引用的数据

方法参数: 基本数据类型, 就是传递的是值
                引用类型, 传递的是引用-地址

二、类和对象

面向对象: OOP Object Oriented Programming

一切皆对象, Java操作的基本单位就是对象

 类/类型: 所有同种对象共同的特征和行为, 抽象出来成为类
 
对象: 符合类的实例化个体
学生特征: - 属性/成员变量
姓名  性别  年龄  课程方向  学号....
学生行为: - 成员方法
吃饭  学习  说话  睡觉
以上抽象出一个概念: 类 - 学生, 实体类
对象: 符合类的特征的独立个体
类和对象的关系: 先定义/声明 类, 然后再创建对象
类名: 驼峰命名法, 首字母大写
       System Scanner Math Arrays

class: 类 类型 和int功能一样

使用对象的步骤:
1.必须先有类
class Student {
    成员变量 name age
    成员方法
}
2.才能创建对象 - main - 方法 - 存在于类中
    Student s = new Student();
3.有了对象, 对象包含了成员变量(name和age)和成员方法
    使用, 用 . 来调用的

局部变量和成员变量的区别

1.声明位置
    局部变量: 方法中
    成员变量: 类中
2.初始化
    局部变量: 使用前必须初始化
    成员变量: 可以初始化, 如果没有初始化, 会有默认初始值
3.个数
    局部变量: 声明个数
    成员变量: 由对象决定, 有几个对象就有几个成员变量
4.内存中的位置
    第一次使用类[创建类的对象]之前, 会先将类进行加载
    局部变量: 方法栈中, 方法结束, 局部变量消失
    成员变量: 跟对象一起, 在堆中

内存图

内存图1
内存图2

三、方法重载:

方法名一样, 参数列表不一样的几个方法
跟返回值类型无关
举例: println print
参数列表不一样的情况: 个数不同\类型不同\顺序不同
    (int a)
    (double d)
    (int a, int b)
    (int b, int a) ×
    (int a, float b)
    (float b, int a)

方法重载Demo

public class Demo01MethodOverload {
    public static void main(String[] args) {
        Demo01MethodOverload demo1 = new Demo01MethodOverload();
        // 调用方法: 需要方法名(传参)
        String s = demo1.(2.0);
        System.out.println(s);

        demo1.(2);

        demo1.("伞");
    }
    // String 表示伞
    void(String san) {
        System.out.println("撑起来");
    }
    // int 代表车
    void(int) {
        System.out.println("打开APP");
        System.out.println("输入目的地");
        System.out.println("开始叫车");
        System.out.println("有人接单了");
        System.out.println("车来了");
        System.out.println("走起");
    }
    // double 代表糯米
    String 打(double 糯米) {
        System.out.println("不停的锤");
        return "糯米糍吧";
    }
}

四、构造方法/构造器:

目的: 为了给成员变量初始化
特点: 方法名要和类名一致
    没有返回值类型
构造方法可以重载
当类中没有定义构造方法时, 编译器会默认添加无参构造方法

五、this:

表示当前对象 - 这个对象
哪个对象调用方法, 就表示哪个对象
this可以调用自己的成员变量, 当成员变量和临时变量重名时, this不能省
this也可以调用自己的成员方法, this可以省略
this也可以调用自己的构造方法, this(参数), this不能省
   只能放在构造方法的第一行

六、引用类型的数组

使用步骤:
 1.给数组初始化
    Student[] ss = new Student[5]; // 默认值都是null
 2.给数组元素初始化
    ss[0] = new Student();
    ss[1] = new Student();

NullPointerException: 空指针异常
产生原因: 调用了null空值得 成员变量 或者 方法

七、对象、类、引用数组、构造器使用Demo

Car类

定义了一个一个实体类Car

// 1.定义类
public class Car {
    // 2.定义成员变量
    String color;
    String name;
    double price;
    // 3.定义成员方法
    void run(String user) {
        System.out.println(user + "在开车");
    }
}

student类

定义了一个一个实体类student,类中有Car类型的成员变量,定义了一个无参构造器和一个有参构造器,包含一个成员方法study()

/**
 * 学生 实体类
 */
public class Student {
    // 成员变量 -> 可以不用初始化, 默认初始值
    // 默认初始值: 基本数据类型:0  引用类型:null
    String name;
    int age;
    // 类中的成员变量是Car类型, Car也是一个类
    Car car;

    // 构造方法/构造器
    Student() { // 无参构造器
//        this("无名", 100, null);
    }
    Student(String name, int age, Car car) { // 有参构造器
//        this();
        // 成员变量和临时变量同名, 使用时, 就近原则
        // 这时, 想要用成员变量, 需要借助this
        this.name = name;
        this.age = age;
        this.car = car;
//        this.study("java");
    }

    // 成员方法
    void study(String subject) {
        System.out.println(name + "正在学习" + subject);
    }
}

Demo01ClassDefinition 类 对象的基本使用

/**
 * 用来写主方法
 */
public class Demo01ClassDefinition {
    public static void main(String[] args) {
        int a = 1;
        // 创建对象 - 引用类型
        Student stu = new Student();
        // 使用对象的成员变量
        stu.age = 21; // 赋值
        stu.name = "小明";
        // 使用对象的成员方法
        stu.study("java");
        System.out.println(stu.age);
        stu.car = new Car();

        Student stu1 = new Student();
        stu1.name = "小明";
        System.out.println(stu1.age);

        // 4.创建对象
        Car car = new Car();
        // 5.给成员变量赋值或者使用成员变量
        car.price = 10000000;
        car.name = "宾利";
        car.color = "黄色";
        // 6.使用成员方法
        car.run("宗昕");
    }
}

Demo02ClassInit 类 主要是有参构造器的使用

public class Demo02Init {
    public static void main(String[] args) {
        // 1.创建Student对象 - 调用无参构造器
        Student s = new Student();
        // 2.刚创建好的对象, 成员变量是默认初始值
        // 3.给成员变量赋值
        s.name = "张三";
        s.age = 23;
        s.car = new Car();
        System.out.println(s.name);
        System.out.println(s.age);
        System.out.println(s.car);// com.zzxx.oop.Car@6979e8cb
        // 使用有参构造方法创建对象
        Student s2 = new Student("小明", 21, null);
        System.out.println(s2.name);

        Student s3 = new Student("鹏鹏", 20, new Car());
        System.out.println(s3.age);
    }
}

Demo03ReferenceArray 类 主要是引用数组类型的使用

public class Demo03ReferenceArray {
    public static void main(String[] args) {
        // 基本数据类型数组
        int[] arr = {1, 2, 3, 4};
        char[] arr2 = {'h', 'a', 'h', 'a'};
        // 默认值0
        int[] arr3 = new int[3];
        // 引用类型数组
        Student[] arr4 = {new Student(), new Student()};
        // 默认值 null
        Student[] arr5 = new Student[3];
        System.out.println(arr5[0]); // null
        // 要给第一个student对象, 修改name值为 "小俊"
//        arr5[0].name = "小俊";
//        arr5[0].study("java");
        arr5[0] = new Student("小明", 21, null);
        arr5[0].name = "小俊";
        System.out.println(arr5[0].name);
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值