初步认识Java中的类和对象

一、面对过程与面对对象

        在学习类和对象之前,先来了解一下什么是面向过程,什么是面向对象。
        首先面向过程和面相对象并不是一门语言,而
是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

        1.面向过程
        面向过程是一种以过程为中心的思想,就是解决一个问题的时候,注重过程,一步一步的解决问题。
eg:假设我们要洗衣服,面向过程的思想像是传统的洗衣方式注重的是洗衣服的过程

 


        2.面向对象
       
面向对象就是不关注一件问题解决的过程,通过对象之间的交互来解决问题问题。
eg:假设我们要洗衣服,面向过程的思想像是现代的洗衣方式,这里共有:人,洗衣机,洗衣粉,衣服这四个对象,人把衣服放进洗衣机,加入洗衣粉,启动洗衣机,洗衣机洗衣服。这就是通过人,衣服,洗衣粉,洗衣机这四个对象相互交互配合完成洗衣服这个工作,不用关注是如何洗衣服这个过程的。

二、类的定义和使用

        1.什么是类 
        
类是用来对一个对象进行描述的,主要用来描述该对象有什么属性,什么功能。
        比如把学生看作一个类别,张三这名学生就是这个学生类的一个对象。
        再比如把洗衣机看做一个类别,它的属性就可以有:产品品牌,型号,产品重量,外观尺寸,颜色等它的功能就可以有:洗衣,烘干、定时等。

        2.类的定义
eg:定义一个冰箱类

class WashMachine{
    //成员变量
    public String brand; // 品牌
    public String type; // 型号
    public double weight; // 重量
    public double length; // 长
    public double width; // 宽
    public double height; // 高
    public String color; // 颜色

    //成员方法
    public void washClothes(){ // 洗衣服
        System.out.println("洗衣功能");
    }
    public void dryClothes(){ // 脱水
        System.out.println("脱水功能");
    }
    public void setTime(){ // 定时
        System.out.println("定时功能");
    }
}

        在Java中定义一个类要用到关键字classWashMachine是这个类的类名(采用大驼峰方式命名)类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

三、类的实例化

        1.什么是类的实例化
        
在Java中定义了一个类之后,这个类就相当与一种新的类型,和int,double类型类似,只不过这两种是Java的内置类型,而我们定义的类是自定义类型。
用类创建对象的过程就叫类的实例化
eg:自定义学生类,实例化类

class Student {
    public String name;//姓名
    public String sex;//性别
    public int age;//年龄

    public void show() { //打印信息
        System.out.println("姓名:"+name+" 性别:"+sex+" 年龄:"+age);
    }
}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();//这就是实例化一个student1对象
        student1.name = "张三";//对student1对象进行赋值
        student1.sex = "男";
        student1.age = 23;
        student1.show();//调用Student类中的show方法
        Student student2 = new Student();//这就是实例化一个student2对象
        student2.name = "李四";//对student2对象进行赋值
        student2.sex = "男";
        student2.age = 24;
        student2.show();//调用Student类中的show方法
    }
代码结果:

        在Java中用关键字new来创建一个对象的实例。这里学生就是一个类,而张三,李四就是实例化的对象。一个类可以创造多个对象,就像一个学生类,可以创造张三,李四等等对象。

四、this的引用

        1.为什么要有this的引用
        
定义一个日期类:

class Date{
    public int year;
    public int month;
    public int day;

    public void setDay(int year, int month, int day) {
        year = year;
        month = month;
        day = day;
    }
}

        上述类中的方法存在一个问题,那就是形参名与成员变量名相同,那赋值的时候怎么赋值,是把形参赋值给成员变量还是成员变量赋值给形参?这就造成了错误。

        再定义一个日期类:

class Date{
    public int year;
    public int month;
    public int day;

    public void setDay(int year, int month, int day) {
       this.year = year;
       this.month = month;
       this.day = day;
    }

    public void printDate() {
        System.out.println(year + "/" + month + "/" + day);
    }

    public static void main(String[] args) {
// 构造三个日期类型的对象 d1 d2 d3
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();
// 对d1,d2,d3的日期设置
        d1.setDay(2020, 10, 15);
        d2.setDay(2021, 11, 16);
        d3.setDay(2022, 12, 17);
// 打印日期中的内容
        d1.printDate();
        d2.printDate();
        d3.printDate();
    }
}


        上述代码三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和printDate函数如何知道打印的是那个对象的数据呢?这里就是使用到了this引用。

       2. 什么是this引用
        
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。


        在这个方法中虽然形参名和成员变量的名字一样,但是有了this引用就可以区分开形参和成员变量,带this的是成员变量
        

        对于上述代码,三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和printDate函数如何知道打印的是那个对象的数据呢?        
        其实在类中的定义成员方法的时候
this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收。
        上述日期类中的两个成员方法setDay和printDay的this都没有写,但this也是存在的一个隐藏参数。实际上的setDay和printDay方法:

 

        this都存在只是被隐藏起来了,所以当d1.setDay(2020, 10, 15);的时候setDay方法就知道是d1这个对象调用的。

五、对象的构造及初始化

        1.如何初始化对象
       
在Java方法中定义一个局部变量必需要初始化,否则会编译失败!
eg:定义一个学生类

class Student {
    public String name;
    public String sex;
    public int age;

    public void show() {
        System.out.println("姓名:"+name+" 性别:"+sex+" 年龄:"+age);
    }
}
public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name = "张三";
        student1.sex = "男";
        student1.age = 23;
        student1.show();
    }
}


        定义一个学生对象通过对象. 给成员变量赋值,这就是对象的初始化。

        也可以像上面日期类那里,通过对象调用类里的方法给对象初始化。但每次创建对象后都需要初始化,这样有些麻烦,我们就可以使用到构造方法。

        2.构造方法
        
构造方法(也称为构造器)是一个特殊的成员方法,
名字必须与类名相同,在创建对象时,由编译器自动调用没有返回值类型设置为void也不行,并且在整个对象的生命周期内只调用一次构造方法可以重载
eg:

class Date{
    public int year;
    public int month;
    public int day;

    public Date (int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public Date () {
        this.year = 2024;
        this.month = 3;
        this.day = 18;
    }
    public static void main(String[] args) {
        Date d1 = new Date(2024,3,18);
        Date d2 = new Date();
        // 打印日期中的内容
        d1.printDate();
        d2.printDate();
    }
}

        代码中橙色部分就是构造方法,对象d1在创建的时候就调用了它,并把参数传过去完成了初始化,d2则调用了不用传参的方法,在方法里也完成了对象的初始化。上述两个构造方法:名字相同,参数列表不同,因此构成了方法重载
        
果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。一旦用户定义,编译器则不再生成。
        如果一个类中有多个构造方法,可用使用
this(参数),在一个构造函数中调用另一个构造函数。注意:this(参数)必须是构造函数里的第一条语句,构造函数之间的调用不能产生环。

        3.默认初始化与就地初始化
        
为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?原因就是成员变量会默认初始化,对于int,byte,double,float,char等类型会默认初始化成对应的0值,对于boolean类型会默认初始化成false类型。
        就地初始化就是在定义成员变量的时候就给它附一个值,这就是就地初始化。
eg : public int a = 10;
//就地初始化

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Milliliter___

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

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

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

打赏作者

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

抵扣说明:

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

余额充值