首页 > 编程笔记

Java类和对象的基本用法(小白必读)

在 Java 的世界中,我们可以把世间万物都看作对象,例如一个人、一间房子、一台电脑等,总之任何事物我们都可以将其看作对象,然后通过对象之间的相互调用来完成需求。

既然对象可以描述任何事物,那么不同的对象一定是有差别的,每一个对象都应该有自己的特征,如何来描述这些特征呢?答案是借助属性和方法。

属性指的是对象的静态特征,例如一个人的年龄、身高、性别等,一辆车的颜色、品牌、排量等。方法用来描述对象的动态特征,例如一个人可以跑步、说话、吃饭、一辆车可以加速、刹车。一静一动两方面特征就构成了一个完整独立的对象。

总结一下:对象就是用来描述客观存在的一个实体,该实体由一组属性和方法构成。

与对象紧密结合的另外一个概念是类,关于类,我们说过它是用来组织 Java 程序的,一个 Java 文件就是一个类,这是从物理属性的层面来解读的,也是最基本的认识。

这里需要对类有更深层次的理解,一句话来解释:类是产生对象的模板,所有的对象都是通过类来创建的。二者关系:类是对象的抽象化描述,这些对象具有相同的特征和动作(属性和方法),而对象是类的具体实例。

例如狗是类,那么隔壁家的小狗“旺财”就是对象;例如计算机是类,那么你面前的这台计算机就是对象;例如学生是类,那么教室中的每一位同学就是对象,如图 1 所示。

图 1 类和对象的关系

类可以创建出很多个对象,一般来讲一个对象归属于一个类,但是不够准确,例如我可以说旺财是狗,也可以说旺财是宠物,可以说我现在用的笔记本电脑是一台电脑,也可以说它是一个电子产品。

类是抽象概念,是一种描述,仅仅是模板,对象是实实在在的具体存在的,对象和类是面向对象编程思想的核心。

所有的 Java 程序都是以类为组织单元,程序运行时的主体是通过类创建的具体化对象。例如学生来上课,我们需要定义学生类、班级类和课程类。这 3 个类定义好之后,每一次学生来上课的业务场景都可以用这 3 个类产生 3 个具体对象来完成。

张三去 1 班上 Java 课。
李四去 2 班上大数据课。
……

这些例子中对象是可以产生很多个的,没有上限,但是类只有 3 个。

类的定义

了解了类的概念以及类与对象的关系,接下来我们学习如何定义一个类,基本语法:
public class 类名{
    //定义属性,属性名符合驼峰式命名法
    public 数据类型 属性名;
    //定义方法,方法名符合驼峰式命名法
    public 返回值类型 方法名(参数列表){
    //方法体
    }
}
定义属性需要指定其数据类型,语法比较简单。

方法的定义比属性稍复杂一些,有两个重点:返回值类型和参数列表。定义方法需要指定方法的返回值类型,Java 关于返回值的定义分为两类:有返回值和无返回值。有返回值的方法需要在方法定义时指定返回值数据类型,并在方法体中用 return 将结果返回给外部调用者,如一个加法运算的方法,将 10+10 的结果返回给外部调用者,代码如下:
public int add(){
    return 10+10;
}
参数列表是指外部在调用该方法时需要传到方法内部进行运算的数据,在方法名后面的括号中定义。语法:数据类型 参数名,我们对上述代码进行优化,将外部调用 add 方法时传入的两个参数进行相加,然后返回结果,具体实现如下:
public int add(int num1,int num2){
    return num1+num2;
}
如果一个方法不需要进行返回操作,我们将其返回值类型定义为 void,这里需要强调没有返回值的方法就用void来修饰其返回值类型,如我们定义一个方法打印"Hello World",不需要返回值,代码如下:
public void add(){
    System.out.println("Hello World");
}
类名一般要首字母大写,驼峰式命名法是指第一个单词全部小写,后续的单词仅首字母大写,如 userName、myScore。定义一个用户类,具体实现如下:
public class User {
    //定义属性
    public int id;
    public String name;
    public char gender;
    public String password;  
    //定义方法
    public void show(){
        System.out.println("展示用户信息");
    }
}

构造函数

现在我们已经学会了如何定义一个类,接下来就可以通过类来创建对象了,如何完成呢?

Java 是通过类的构造函数,也叫构造方法来创建对象的。构造函数是一种特殊的方法,方法名必须与类名一致,不需要定义返回值类型,基本语法如下:
public 构造函数名(参数列表){
}
构造函数包括有参构造和无参构造,我们来创建 User 类的构造函数,代码如下:
public class User {
    //定义属性
    public int id;
    public String name;
    public char gender;
    public String password;  
    //无参构造函数
    public User(){}
    //有参构造函数
    public User(int id,String name,char gender,String password ){
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.password = password;
    }
}
每个类默认都有一个无参构造函数,我们在定义类时不需要声明无参构造函数,便可直接调用来创建对象,但是如果手动定义一个有参构造函数,就会覆盖掉默认的无参构造函数。

对象的创建

创建对象只需要调用对应类的构造函数即可,构造函数分为无参构造和有参构造,区别在于调用无参构造创建的对象,不会给属性赋值,需要手动对属性进行赋值,先创建再赋值,代码如下:
public class Test {
    public static void main(String[] args) {
        //创建一个User对象,id:1,name:张三,gender:男,password:root
        User user = new User();
        user.id = 1;
        user.name = "张三";
        user.gender = '男';
        user.password = "root";
    }
}
调用有参构造,则不需要在构造函数外部进行属性赋值,构造函数本身就会为创建好的对象赋值,只需要在调用有参构造时将属性值作为参数传入即可,边创建边赋值,代码如下所示:
public class Test {
    public static void main(String[] args) {
        //边创建边赋值
        User user = new User(1,"张三",'男',"root");
    }
}

对象的使用

对象的使用包括获取和修改属性,以及调用方法。访问属性通过“对象名.属性名”来完成,调用方法通过“对象名.方法名(参数列表)”来完成,代码如下所示:
public class Test {
    public static void main(String[] args) {
        User user = new User(1,"张三",'男',"root");
        System.out.println("用户姓名:"+user.name);
        user.id = 2;
        System.out.println("用户编号:"+user.id);
        user.show();
    }
}
运行结果为:

用户姓名:张三
用户编号:2
展示用户信息

推荐阅读