类和对象 详解「Java」

目录

1.前言

🍑2.类的定义

🍎2.1定义一个类

🍎2.2类产生对象

🍑3.this引用

🍑 4.对象的构造和初始化

🍎 4.1初始化变量

🍎4.2对象的构造

❤️4.2.1没有参数的构造方法

❤️4.2.2带有参数的构造方法


🍑1.前言

要学习类和对象,首先要了解面向对象和面向过程的区别,Java和C++就是面向对象的语言。我个人的理解:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。(可理解为微观角度)

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。(可理解为宏观角度)

🍑2.类的定义

类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。必须先定义出一个类,我们才能实例出对象。

🍎2.1定义一个类

当我们定义了一个类,就相当于在计算机中定义了一种新的类型,与int和double相似,只不过int和double是计算机中自带的内置类型,而类是由用户自定义的。

再定义类名时使用大驼峰,给大家看一下基本的语法

      class ClassName{
         //成员变量
         //成员方法
      }
    

可能这样还不是很清楚,我们举一只小狗的例子,一起来定义一个小狗的类。我们都知道小狗有很多类型,名字不同,年龄不同,颜色也不同,这些就是我们的成员变量。小狗有很多种技能,有的能摇尾巴,有的能旺旺叫

class Dog {
    //1、字段/属性【成员变量】:类的内部  方法的外部
    public String name;//名字
    public int age;//年龄
    public String color;//颜色
    //2、行为 / 方法【成员方法】
    public void wag() {//摇尾巴
        System.out.println(name+" 摇尾巴!");
    }
    public void bark() {//旺旺
        System.out.println(name+" 旺旺!");
    }
}

在Java的开发过程中,一般一个Java文件只写一个类。

🍎2.2类产生对象

我们通常将类产生对象的过程称为实例化,那有了类我们要如何产生对象呢?

最简单的方法就是用new语句来产生一个对象(也就是我们常说的new一个对象)

Dog dog = new Dog();
Dog dog2 = new Dog();

创建成功后,会在栈上开辟一块内存给 dog,它会存入堆的一块地址,之后我们便可以对对象中的属性进行赋值

 public static void main(String[] args) {
        //通过new关键字 实例化了一个对象
        Dog dog = new Dog();
        dog.name = "郑立群";
        dog.color = "白色";
        dog.age = 2;
        dog.wag();
        dog.bark();
        dog.show();
        Dog dog2 = new Dog();
        dog2.name = "大漠叔叔";
        dog2.age = 44;
        dog2.color = "黑色";
        dog2.show();

        Dog dog3 = new Dog();

        Dog dog4 = new Dog();
        //通过一个类  可以实例化 多个对象
    }

🍑3.this引用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。(也就是说只能在成员方法中使用)只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

public class Date {

    int year;
    int month;
    int day;

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

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

    public static void main(String[] args) {
        Date date1 = new Date();
        date1.setDate(2020,5,8);
        date1.printDate();

        Date date2 = new Date();
        date2.setDate(2021,5,8);
        date2.printDate();

        Date date3 = new Date();
        date3.setDate(2022,5,8);
        date3.printDate();
    }
}

也就是说this是指向我们的对象Date。

这里找到了其他人写的this有关的资料,放出来供大家参考

this关键字:

关键字,代表当前类对象
可以代表当前类还没有产成的对象,代表当前类刚创建的对象,代表当前正在使用的对象,this是灵活的指代,是虚拟的,可以指代当前类正在活动的对象
当一个类被创建的时候,java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this,
因为this在对象创建的时候才有,所以this只能在类中的非静态方法中使用,静态方法和静态代码块中绝对不能出现this,因为静态资源和类关联,this和类对象关联,所以不同的对象不同的this,this指针是灵活的指代地址,最初始没有地址的是虚拟的
this语句–在同一个类中的构造方法里调用其他别的构造方法—必须要在首行----this(参数)
this可以调用其他的非构造方法,this.m();
由于子类可以获取父类的属性,所以this也可以在子类中出现调用父类的方法,一个类中可以出现多个this语句
this只能出现在方法中,作为变量的应用调用其他资源
this.用于创建对象的时候进行属性的初始化,用于指定自身,方法调用的对象可以是this

🍑 4.对象的构造和初始化

🍎 4.1初始化变量

在Java方法内部定义一个局部变量时,必须要初始化,否则会编译错误。

🍎4.2对象的构造

实例化一个对象分为两步:1. 为这个对象分配内存  2. 调用合适的构造方法

构造方法不止一个,对象的生成一定会构造方法。再构造这个对象的时候也可以给定一些默认值。构造的方法名字与类相同,没有返回值类型,一般情况下用public修饰。

 如果没有给它赋值,那么这个函数就会帮你将数字初始化为0

❤️4.2.1没有参数的构造方法

 public Date() {
        this.year = 1992;
        this.month = 9;
        this.day = 0;
        System.out.println("不带参数的构造方法!");
    }

❤️4.2.2带有参数的构造方法

public Date(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用带有3个参数的构造方法!");
    }

 可以传参进入这个方法,来给对象赋值。

 这两种方法可以同时存在,在构造第二种方法的时候,就生成了方法的重载。

方法的重载:1. 方法名相同   2. 参数列表不同:个数,类型,顺序   3.和返回值无关

如果用户没有显示定义,编译器会形成一套默认的构造方法,生成默认的构造方法一定是无参的。

对于成员的赋值:👇

1.定义字段的时候,同时初始化-->就地初始化

2.不初始化--> 0

3.在类外,通过对象的引用直接赋值。dog.name = "haha";

 4.通过构造方法初始化

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值