Java新手小白入门篇 Java面向对象(一)

导读:本篇文章讲解 Java新手小白入门篇 Java面向对象(一),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Java新手小白入门篇 Java面向对象(知识点体系汇总)

  • 面向对象知识链接汇总,知识点体系(思维导图)

Java新手小白入门篇 Java面向对象(一)

  • Java面向对象(第一天)类,对象,方法的重载,练习题

Java新手小白入门篇 Java面向对象(二)

  • Java面向对象(第二天)构造方法,this关键字,内存结构初识,null,NullPointerException,引用类型数组(上),拓展,练习题

Java新手小白入门篇 Java面向对象(三)

  • Java面向对象(第三天)引用类型数组(下),继承,super,向上造型(上),拓展,练习题

Java新手小白入门篇 Java面向对象(四)

  • Java面向对象(第四天)向上造型(下),重写,访问控制修饰符,static关键字,拓展,练习题

Java新手小白入门篇 Java面向对象(五)

  • Java面向对象(第五天)final,static final,abstract关键字(抽象方法,抽象类)

Java新手小白入门篇 Java面向对象(六)

  • Java面向对象(第六天)成员内部类(不经常使用),匿名内部类(经常使用)

Java新手小白入门篇 Java面向对象(七)

  • Java面向对象(第五天)接口,拓展(类与接口的关系,抽象类与接口的区别),练习题

Java新手小白入门篇 Java面向对象(八)

  • Java面向对象(第八天)多态(对象的多态,行为的多态),拓展(面向对象)

Java新手小白入门篇 Java面向对象(九)

  • Java面向对象(第九天)简单的内存结构,面向对象三大特征

  • Java新手小白入门篇系列持续更新中…

一、面向对象

1. 什么是面向对象

小伙伴们可能有很多都听说过面向对象这个概念,但是什么是面向对象呢,其实我们又说不出个所以然来。

面向对象是以对象为核心来思考,解决问题的一种方式,它是 Java 核心的一种思想;
世间的万事万物我们都可以理解成一个对象,所以才有我们万物皆对象的说法。

经过上述的描述,很多小伙伴应该说了,这我还没明白什么是面向对象啊,你这讲的是什么鬼?
我们暂时先把这个概念放下,因为要说面向对象,首先得了解两个概念:什么是类,什么是对象?等我们对这两个概念有些了解了,我们再回来看看这个概念。

2. 什么是类,什么是对象

2.1 类

  • 类指的是类型(Type),是指一类事物,使用Java中的 class 关键字来描述,也可以把类理解成设计图纸,模板等

    // 这里我们的 Student 就是我们所说的类 , 指的是学生这一类事物
    public class Student {
    }
    
  • 类是抽象的,它是一个泛指,指的不是某一个具体的东西,类呢是要提取这一类事物的共有特征(属性)与功能(行为)

  • 一个类中可以包含:

    • 成员变量
      • 指的是一个类型所包含的(共有的)属性/特性
    • 方法
      • 指的是一个类型所包含的(共有的)行为/功能
    // 这里我们的 Student 就是我们所说的类 , 指的是学生这一类事物
    public class Student {
        // 成员变量 - 属性/特征
        String stuId; // 学号
        String name; // 名字
        int age; // 年龄
        String address; // 地址
        // ...
    
        //方法 - 行为/功能
        void study(){
            System.out.println(name+"在学习...");
        }
        void sayHi(){
            System.out.println("大家好,我的学号是" + stuId + ",我叫"+name+",今年"+age+"岁了,家住"+address);
        }
    }
    
  • 一个类可以创建多个对象

  • 类也是 数据类型 的一种,它属于我们的 引用类型

2.2 对象

  • 对象就是根据类创建出来的一个个独立且具体的实例(实际个体)

    public class StudentTests {
        public static void main(String[] args) {
            // 数据类型  引用  指向        对象
               Student    s1    =      new Student();
        	// 声明一个Student类型的引用s1,指向了一个学生对象 
        	// 还可以理解为:创建了一个学生对象,指向了Student类型的引用s1  
        }
    }
    
  • 一个类可以创建多个对象

    public class StudentTests {
        public static void main(String[] args) {
            Student s1 = new Student();
            Student s2 = new Student();
            Student s3 = new Student();
        }
    }
    
  • 每个对象都具有类里面各种属性(变量),且这些属性可能相同也可能不同

  • 每个对象都具有类里的各种行为(方法),且每个对象都可以执行各种方法

    // 学生测试类,用于测试对象及属性赋值和调用方法
    public class StudentTests {
        public static void main(String[] args) {
            // 创建一个学生对象s1
            Student s1 = new Student();
            // 给s1对象的属性赋值
            s1.stuId = "JSD2207080101";
            s1.name = "zs";
            s1.age = 24;
            s1.address = "辽宁沈阳";
            // 调用s1对象的方法
            s1.sayHi(); // 大家好,我的学号是JSD2207080101,我叫zs,今年24岁了,家住辽宁沈阳
            s1.study(); // zs在学习...
    
            // 创建一个学生对象s2
            Student s2 = new Student();
            // 给s2对象的属性赋值
            s2.stuId = "JSD2207080102";
            s2.name = "ls";
            s2.age = 22;
            s2.address = "辽宁铁岭";
            // 调用s2对象的方法
            s2.sayHi(); // 大家好,我的学号是JSD2207080102,我叫ls,今年22岁了,家住辽宁铁岭
            s2.study(); // ls在学习...
    
            // 创建一个学生对象s3
            Student s3 = new Student();
            // 给s3对象的属性赋值
            s3.stuId = "JSD2207080103";
            s3.name = "ww";
            s3.age = 18;
            s3.address = "辽宁营口";
            // 调用s3对象的方法
            s3.sayHi(); // 大家好,我的学号是JSD2207080103,我叫ww,今年18岁了,家住辽宁营口
            s3.study(); // ww在学习...
        }
    }
    

2.3 类与对象的关系

  • 我们先创建类,再通过类创建出对象
  • 我们可以通过一个类创建出多个对象
  • 类是抽象的,对象是具体的

2.4 属性/成员变量默认值

  • 基本类型
    • byte,short,int,long,char
      • 默认值为 0
    • float,double
      • 默认值为 0.0
    • boolean
      • 默认值为 false
  • 引用类型
    • 默认值为null

二、方法的重载(overload/overloading)

1. 定义

在同一个类中,方法名称相同,参数列表不同的方法叫方法的重载

重载是一个类里,方法的一种特性/特质,它是在二个或者多个方法才会产生

2. 重载的注意事项

2.1 在重载定义中,参数列表不同指的是:

  • 与参数的名称无关,只与参数类型有关
    • 一个参数
      • 参数类型不同表示参数列表不同
    • 多个参数
      • 参数类型的顺序不同表示参数列表不同

2.2 重载与返回值无关

  • 方法的重载和 方法的返回值 没有任何关系,它只与方 法的名称和参数列表 有关
public class Aoo{
    void show(){}
    void show(String name){}
    void show(int age){}
    void show(String name,int age){}
    void show(int age,String name){}

    //int show(){ return 1; } //编译错误,重载与返回值类型无关
    //void show(String address){} //编译错误,重载与参数名称无关
}

2.3 在使用方法时,如何识别具体使用的是何方法

编译器在编译时会自动根据 方法的签名 自动绑定方法

2.3.1 方法的签名

方法的签名 = 方法名 + 参数列表

public class AooTests {
    public static void main(String[] args) {
        Aoo o = new Aoo();
        o.show();
        o.show("zhangsan");
        o.show(25);
        o.show("zhangsan",25);
        o.show(25,"zhangsan");
    }
}

请添加图片描述

三、练习题

1. 习题

1.1 类与变量的练习

  • 创建一个手机类 Phone
    • 成员变量
      • 品牌 brand
      • 型号 type
      • 内存 ram
      • 颜色 color
      • 屏幕尺寸 size
      • 价格 price
    • 方法
      • 打电话 call
        • 输出:使用xx品牌手机,xx型号,打电话,xx颜色晃瞎了眼
      • 发短信 message
        • 输出:我新换了一个手机,内存xx,xx寸,山寨版,xx价格贼合适
  • 创建一个手机测试类 PhoneTest
    • main方法
      • 创建三个手机对象,并为其属性赋值
      • 调用其两个方法,输出结果

1.2 成员变量默认值

  1. 成员变量类型为 char ,其默认值为 0,是否正确,如何能验证,为什么?

1.3 方法重载练习题

  1. 定义两个重载方法 avg,分别用来求两个整数、三个整数的平均值,然后分别调用并将结果输出
  2. 定义两个重载方法 maxNum,分别用来求两个整数的较大值、三个整数的最大值,分别调用并将结果输出

2. 答案

2.1 类与变量的练习

  • 创建一个手机类 Phone
    • 成员变量
      • 品牌 brand
      • 型号 type
      • 内存 ram
      • 颜色 color
      • 屏幕尺寸 size
      • 价格 price
    • 方法
      • 打电话 call
        • 输出:使用xx品牌手机,xx型号,打电话,xx颜色晃瞎了眼
      • 发短信 message
        • 输出:我新换了一个手机,内存xx,xx寸,山寨版,xx价格贼合适
  • 创建一个手机测试类 PhoneTest
    • main方法
      • 创建三个手机对象,并为其属性赋值
      • 调用其两个方法,输出结果

答案:
Phone类

// Phone电话类
public class Phone {

    String brand; //品牌
    String type; //型号
    String ram; //内存
    String color; //颜色
    String size; //屏幕尺寸
    double price; //价格

    // 打电话方法
    void call() {
        System.out.println("使用"+brand+"手机,"+type+",打电话,"+color+"颜色晃瞎了眼");
    }

    //发短信方法
    void message() {
        System.out.println("我新换了一个手机,内存"+ram+","+size+"寸,山寨版,"+price+"贼合适");
    }
}

PhoneTest类

// 电话测试类
public class PhoneTest {
    public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.brand = "苹果";
        p1.type = "iphone13 pro max";
        p1.ram = "256G";
        p1.color = "星光色";
        p1.size = "6.7英寸";
        p1.price = 777;
        p1.call();
        p1.message();
        System.out.println("===============================");
        Phone p2 = new Phone();
        p2.brand = "华为";
        p2.type = "HUAWEI Mate40 Pro+";
        p2.ram = "256G";
        p2.color = "黑色";
        p2.size = "6.76英寸";
        p2.price = 888;
        p2.call();
        p2.message();
        System.out.println("===============================");
        Phone p3 = new Phone();
        p3.brand = "小米";
        p3.type = "12S Ultra";
        p3.ram = "512G";
        p3.color = "冷杉绿";
        p3.size = "6.73英寸";
        p3.price = 666;
        p3.call();
        p3.message();
    }
}

2.2 成员变量默认值

  1. 成员变量类型为 char ,其默认值为 0,是否正确,如何能验证,为什么?

    public class Demo {
        char c;
    
        public static void main(String[] args) {
            Demo demo = new Demo();
            // 查看控制台结果,控制台结果为数字0所对应的字符,所以我们可以类型转换
            System.out.println(demo.c); 
            System.out.println(demo.c == 0);
            System.out.println((int)demo.c);
        }
    }
    

2.3 方法重载练习题

  1. 定义两个重载方法avg,分别用来求两个整数、三个整数的平均值,然后分别调用并将结果输出
    答案:
    重载方法定义

    public class Demo {
        double avg(int num1,int num2) {
            return (num1 + num2)/2.0;
        }
    
        double avg(int num1,int num2,int num3) {
            return (num1 + num2 + num3)/3.0;
        }
    }
    

    重载方法测试

    public class OverloadDemo {
        public static void main(String[] args) {
            int a = 5;
            int b = 10;
            int c = 4;
            Demo demo = new Demo();
            double result1 = demo.avg(a,b);
            System.out.println(result1);
            double result2 = demo.avg(a,b,c);
            System.out.println(result2);
        }
    }
    
  2. 定义两个重载方法maxNum,分别用来求两个整数的较大值、三个整数的最大值,分别调用并将结果输出
    答案:
    重载方法定义

    public class Demo {
        int maxNum(int num1,int num2) {
            return num1>num2?num1:num2;
        }
        int maxNum(int num1,int num2,int num3) {
            int max = num1>num2?(num1>num3?num1:num3):(num2>num3?num2:num3);
            /*
                //方法2:
                int max = num1>num2?num1:num2;
                max = max>num3?max:num3;
             */
            /*
                //方法3:
                int max = maxNum(maxNum(num1,num2),num3);
             */
            return max;
        }
    }
    

    重载方法测试

    public class OverloadDemo {
        public static void main(String[] args) {
            int a = 5;
            int b = 10;
            int c = 4;
            Demo demo = new Demo();
            int max1 = demo.maxNum(a,b);
            System.out.println(max1);
            int max2 = demo.maxNum(a,b,c);
            System.out.println(max2);
        }
    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107645.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!