【Java】类和对象01

我们都听说过Java和C++是面向对象来编程的,那么什么是对象?又如何面向对象来编程呢?

目录

类和对象 

构造方法

初始化

1.形参名称与成员变量名称不同

2.形参名称与成员变量名称相同

 this的使用方法

this小结 

封装


类和对象 

对象从 来,类由字段(又称: 成员变量 / 属性 )和 方法(又称:行为 / 状态)组成;由类创建对象的过程称为实例化,这里需要用到关键字 new;此时,对象就是一个实体,它具有类中所存在的属性及动作(行为 / 方法),又或者举例子来说,类是一个房屋建筑图,对象是完工后的房子,图纸中有房子的占地面积,墙壁颜色,几个房间……等等,这些东西便是房子的属性;当天气变凉,我们身处房子之中,它可以为我们抵御严寒,这是房子功能,可以抽象地理解为行为,方法。 我们知道,我们可以根据建筑图建造出多个房子,即,类可以实例化多个对象;

如果不理解,我们可以再来举个例子。妈妈将我们生下来,即是创造了我们,而我们经过后天发育,掌握了多种行为,例如:吃饭,睡觉,玩耍,是因为我们的基因,即基因是我们的蓝图,里面存在着我们的一切————我们的发量、智商、身高基础、具有哪方面的天赋等等,但其是一个数值,我们要对其进行填充,这个过程即是构造对象的过程,初始化我们的属性(类中的字段 / 属性 / 成员变量),基础智商多高等等,类似于向里面填东西的过程,我们的智商能增长到何种地步?到底能长多高?拥有多少头发?蓬松或者地中海?这些是我们后天的行为所控制的(即类中的方法),例如你总熬夜,头发就会掉,发亮就会减少,用代码形式来表现:人.发量(-1-1-1);而类可以实例化多个对象,我们可以理解为,妈妈生了龙凤胎,双胞胎。 说到这里也感谢一下我们伟大的母亲。

如何创建类:

class + 类名

需要注意的几点:

1.类名用大驼峰

2.字段 在 类 方法之

3.方法不加static (这里后面会讲到为什么)

在上文中我们提到了 构造对象 这个词,在这里我们就要提一下new对象的这个过程了:

实例化对象有两个关键步骤:

1.为对象分配内存空间

  

2.调用合适的构造方法 -> 意义:当然是让对象更充盈啦,想想我们上述的例子!!!

(对象的生成一定会调用构造方法)

等等???调用 合适的 构造方法?? 难道说? 构造方法不止一个??

对,构造方法不止一个。这里我们先卖个关子。

class Person {  //class + 类名 -> 类名用大驼峰
    int age;
    int height;
    int iq;
    String name;
    // 属性  / 字段  / 成员变量
    
    public void eat() {   // 方法不加static ->后面会讲为什么
        System.out.println("大口吃肉 大口喝酒 ");
    } //行为 / 状态 / 方法
    
}

public class Test {
    Person person1 = new Person();
    Person person2 = new Person();
    Person person3 = new Person(); // 实例化多个对象
}

构造方法

构造方法(也称构造器):

名字与类名相同,无返回值,void也不行,一般情况下用public修饰;

在创建对象时由编译器自动调用,在构造方法中可以对成员变量进行初始化且在生命周期内只调用一次;

构造方法可以重载 -> 在这里试着理解 “调用 合适的 构造方法”  -> 根据传参来调用

好啦,我们上一段落又提到了一个关键字:传参

因为在创建对象的时候会自动调用构造方法来充盈对象,也就是说,我们可以在new的时候向里面丢参数。

那么我们能不丢参数吗?当然可以啦。

class Person { 
    int age;
    int height;
    int iq;
    String name;
    public void eat() {   
        System.out.println("大口吃肉 大口喝酒 ");
    }
}

public class Test {
    Person person = new Person();
}

现在这个代码中便没有构造方法,也没有在new的时候丢参数且运行也没有错误。

欸?你不是说一定会调用构造方法的吗???这也米有啊

解释:

当你没有构造方法时,编译器默认会添加一个无参的构造方法。

我们可以看到,此时编译器报错了,说Person(int)不能应用于 Person()

解释:

当我们创建了一个有参的构造方法时,编译器便不会给我们提供无参的构造方法了,代码便会出错,我们只需丢个参数进去便可以解决此问题。

 大家还记不记得我们所说的 合适的 构造方法?

 可以有多个构造方法的原因就是重载

那么我们先来回顾一下重载的规则:

重载:

1.方法名必须相同

2.参数不同(个数、类型、顺序)

3.和返回值无关

class Person {
    public int age;
    public int height;
    public String name;
    public Person() {
        System.out.println("这是一个无参的构造方法");
    }
    public Person(int year) {
        age = year;
        System.out.println("这是一个有一个参数的构造方法");
    }
    public Person(String ret,int tmp) {
        name = ret;
        height = tmp;
        System.out.println(name+"体重为: "+height);
        System.out.println("这是一个有两个参数的构造方法");
    }

}
public class test {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person(19);
        Person person3 = new Person("Li Ming",120);
    }
}

运行结果:

 在上述代码中,可以体现出:

1.一个类可以实例化多个对象。

2.age、name、height变量,定义在类中,方法之外,称为成员变量,我们一般不对其进行初始化,编译器会自动对其初始化;原因为:我们根据一个动物类实例化一个狗和一个猫,在类中定义成员变量为名字,假如都初始化成了狗或者猫,那你想想合适吗?狗能叫猫吗?那必然不能。

3.在创建对象的时候会自动调用合适的(有无参数,有几个参数)构造方法。

4.构造方法的重载

初始化

在这里和大家提一下需要注意的两点

1.形参名称与成员变量名称不同

    public void setAge(int year) {
       age = year;
    }

    public void setName(String monicker) {
        name = monicker;
    }

 这种情况很简单,我们只需要调用方法传参就好了。

2.形参名称与成员变量名称相同

    public void setAge(int age) {
        age = age;
    }

    public void setName(String name) {
        name = name;
    }

如上情况呢?

我们来看结果:

 欸????这是怎么回事呢???

因为这里的name是在方法中创建的,都是局部变量,没有对成员变量age和name赋值,因此它俩依然为初始值。那么如何避免这种情况呢???

 this的使用方法

若要避免上述情况,我们需要用到this关键字。

this表示当前对象的引用,那么如果构建了多个对象,同时调用同一个方法,那么如何确定是哪个对象呢???

答案:

 那么this既然可以调用成员变量,可不可以调用成员方法呢?

当然可以,this.func();

那它能不能调用构造方法呢?

当然可以。

1.this();语句要放在构造方法的第一行

 

2.表示为调用其他构造方法 

this小结 

1.this.date

2.this.func( );

3.this( );    放在构造方法第一行

封装

封装意为将隐私(不想被别人看到的方法或变量)屏蔽起来,仅提供接口供使用。

快捷方法:

这里可以自行选择Getter、Setter、Getter and Settler  

 

可以按住ctrl多选 然后点击ok 

 结果显示:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值