走进Java:类和对象的初步理解

一、类和对象的引出

对于Java初学者来说,类和对象是一个有些不太好理解的知识点,在学习类和对象之前,会接触到Java中的八大基本数据类型。

数据类型分类 数据类型名称 关键字 占用字节数 取值范围
整数类型 字节型 byte 1 字节 -128 到 127
短整型 short 2 字节 -32768 到 32767
整型 int 4 字节 -2147483648 到 2147483647
长整型 long 8 字节 -9223372036854775808 到 9223372036854775807
浮点类型 单精度浮点型 float 4 字节
双精度浮点型 double 8 字节
字符类型 字符型 char 2 字节 0 到 65535
布尔类型 布尔型 boolean 没有明确的字节规定,通常认为是 1 位 truefalse

在之前的学习过程中,更多的情况是接触以上一些数据类型,比如我们在定义一个年龄的时候,就会这样去写。 就会使用熟悉的int变量。

java 复制代码
        int age = 18

如果要定义一个身高,就会这样去定义。

java 复制代码
        double height = 180.5

以上就是一些基本类型变量的定义方式,在没有学习类和对象之前,所有的变量定义像是一种临时的,没有归属的,只知道要定义一个年龄,要定义一个身高,所以还要区分是谁的身高,是谁的年龄。可以这样去考虑,要区分谁的身高谁的年龄还不简单,直接定义张三的身高和年龄,然后定义李四的身高和年龄,就像下边的代码。

java 复制代码
        // 定义一个age 值为18
        int zhangsan_age = 18;
        // 定义身高 值为180.5
        double zhangsan_height = 180.5;

        int lisi_age = 18;
        double lisi_height = 179.2;            

嗯,挺聪明的,这确实是一种解决问题的方式,好了,现在一共有十个人,他们是同一个省,同一个市,同一个县,同一个村的人,分别定义他们的姓名,省份,城市,县区和村镇,来尝试一下。

java 复制代码
        String name = "喜羊羊";
        String first_province = "动画省";
        String first_city = "喜羊羊与灰太狼市";
        String first_conty = "青青草原区";
        String first_village = "羊村";

        String second_name = "美羊羊";
        String second_province = "动画省";
        String second_city = "喜羊羊与灰太狼市";
        String second_conty = "青青草原区";
        String second_village = "羊村";
        /*·····························*/    

还可以,除了有点累,其他的没什么,还是一样可以写出来的。现在有这样的两个问题。

  1. 在代码当中,这样子去定义这么多人是不是有点繁琐
  2. 这么多人,很多信息是一样的,这样子去定义是不是太冗余

这么多的信息,我们是不是不需要去定义呢?我们是不是可以直接默认所有人的地区信息是一样的呢?当然是可以的,这种情况下就要使用到类和对象了。

二、类和对象

类是一个模板,对象是模板创建出来的变量,就像之前定义年龄的时候使用int,定义对象可以通过类。类和对象就可以解决之前提出的两个问题。

为什么说类是模板?看如下代码。

java 复制代码
public class Person {
    public String name;
    public String province = "动画省";
    public String city = "喜羊羊与灰太狼市";
    public String county = "青青草原区";
    public String village = "羊村";
}

在上边的代码当中,Person作为类,类中定义了一些变量,这些变量部分有自己的默认值,也就是所有人的地区信息,不难发现除了name没有赋值外,其他的属性已经全部赋值了。

两个问题的解决

当定义出Person类的时候,在创建十个人的信息,代码就会变成下方的样子。有没有发现代码量减少了很多,没有之前那么繁琐。并且我们这样的代码并没有之前那样冗余,没有在去写所有人的地址信息。

java 复制代码
public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "喜羊羊";
        Person p2 = new Person();
        p2.name = "沸羊羊";
        Person p3 = new Person();
        p3.name = "美羊羊";
        /*······················*/
    }

那么类和对象到底该如何理解呢?一定要记住这句话:类是模板,对象是由模板创造出的。

在上方的Person模板中,有姓名和地区信息,地区是有默认值的,名字是没有默认值的,p1,p2,p3在创建的时候已经有了模板中的属性,对于地区信息直接使用默认值就可以,姓名需要在重新定义。

现在可以大概了解,什么是类和对象了。

对象的创建是通过new关键字来创建的,一般是这种方式。

java 复制代码
类名 对象名 = new 类名();

三、属性和行为

了解完类和对象就要了解类和对象中的属性和行为。

  • 属性:属性是类中包含的一些信息,如同人员中的姓名和地区信息,也就是这个对象通过类这个模板创建出来的时候包含那些信息。
  • 行为:行为就是对象可以完成的动作或者一个过程。

举个例子,美羊羊最后选择了和喜羊羊在一起,沸羊羊就会很伤心,他向羊村居委会提交了自己的迁移申请,他要自己出去住,去一个没有美羊羊的世界。那么沸羊羊就不在是羊村的人了,他选择加入老虎一族,去到了虎村。沸羊羊这个对象会通过行为修改自己的属性。

java 复制代码
public class Person {
    public String name;
    public String province = "动画省";
    public String city = "喜羊羊与灰太狼市";
    public String county = "青青草原区";
    public String village = "羊村";
    // 修改村地址的行为
    public void changeVillage(String village){
        this.village = village;
    }
}

这个动作是沸羊羊完成的。

java 复制代码
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "喜羊羊";
        Person p2 = new Person();
        p2.name = "沸羊羊";
        Person p3 = new Person();
        p3.name = "美羊羊";
        System.out.println("喜羊羊的村地址是:" + p1.village);
        System.out.println("沸羊羊的村地址是:" + p2.village);
        System.out.println("美羊羊的村地址是:" + p3.village);

        System.out.println("喜羊羊和美羊羊在一起了,沸羊羊搬了出去······");
        System.out.println("沸羊羊去了虎村");
        p2.changeVillage("虎村");
        System.out.println("沸羊羊的村地址是:" + p2.village);
        /*······················*/
    }

这就是对象的一种行为,对象可以通过行为获取和修改类中的属性。

对象可以通过行为获取属性,在哪里体现?在上方的代码中是通过.来获取的属性,这得益于我们在类中定义这些属性的时候,使用的是public类型的变量,如果修改为private后,就不可以在通过.的方式来获取对象属性的值了,public和private的知识这里先不讲。

我们可以这样修改上方的代码。

java 复制代码
public class Person {
    public String name;
    public String province = "动画省";
    public String city = "喜羊羊与灰太狼市";
    public String county = "青青草原区";
    public String village = "羊村";
    // 修改村地址的行为
    public void changeVillage(String village){
        this.village = village;
    }
    public String getVillage(){
        return this.village;
    }
}
java 复制代码
public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "喜羊羊";
        Person p2 = new Person();
        p2.name = "沸羊羊";
        Person p3 = new Person();
        p3.name = "美羊羊";
        System.out.println("喜羊羊的村地址是:" + p1.getVillage());
        System.out.println("沸羊羊的村地址是:" + p2.getVillage());
        System.out.println("美羊羊的村地址是:" + p3.getVillage());

        System.out.println("喜羊羊和美羊羊在一起了,沸羊羊搬了出去······");
        System.out.println("沸羊羊去了虎村");
        p2.changeVillage("虎村");
        System.out.println("沸羊羊的村地址是:" + p2.getVillage());
        /*······················*/
    }

结果还是一样的。

对象的属性和行为都是通过**.** 来访问的。

行为不止可以修改对象属性,行为可以完成一些很复杂的事情。沸羊羊不仅可以更换村落,还可以找喜羊羊单挑,夺回美羊羊。至于在夺回美羊羊之前做了什么,我们就并不知道了,行为也可以理解为是对一件事情的封装,看下边的过程。我们只知道沸羊羊夺回了美羊羊,但我们看不到沸羊羊的努力,就像你的舍友期末说只看了一点点,但是最后考的90分那样子。舍友的行为是可见的,但是完成行为的过程是不可见的。

相关推荐
高建伟-joe26 分钟前
Spring Boot Tomcat 漏洞修复
java·spring boot·后端·网络安全·tomcat
19岁开始学习32 分钟前
cgi,php-cgi,fastcgi,php-fpm,nginx 小记
开发语言·nginx·php
小钊(求职中)32 分钟前
RabbitMQ从入门到实战-知识详情总结
java·服务器·spring boot·分布式·spring·面试·rabbitmq
Vitalia1 小时前
⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance
开发语言·c++·算法
开开心心就好1 小时前
便捷开启 PDF 功能之旅,绿色软件随心用
android·java·windows·智能手机·eclipse·pdf·软件工程
小冯的编程学习之路1 小时前
【QT】:QT图形化界面相关准备工作
开发语言·c++·qt
Key~美好的每一天1 小时前
一文了解JVM的垃圾回收
java·jvm
龙雨LongYu121 小时前
Go执行当前package下的所有方法
开发语言·后端·golang
米饭好好吃.2 小时前
【Go】Go MongoDB 快速入门
开发语言·mongodb·golang
By北阳2 小时前
Go语言 vs Java语言:核心差异与适用场景解析
java·开发语言·golang