[Java初探08]__简单学习Java类和对象

  • 前言
    在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使用.

那么,这里为什么要先将类,而不是像之前一样先讲对象呢,那是因为在前面的学习中,我们知道了,对象是类的一个实例.类是封装兑现属性和行为的载体,所以对象的一切都在类之中,对象的属性,行为的调用都得先通过实例才能使用,它们是一个包含关系,对象是依赖于类的.

  • 类在Java中的创建

我们都知道,在我们新建一个Java文件的时候,大多是这样的.

2019-4-8-01.png

这充分说明了在Java语言中,一切都是基于类与对象建立的.

类在Java语言中式通过class关键字定义的.而且还可以使用各种修饰符对其权限进行限定,关于修饰符,在前面也有讲到过.

class cat{
    
}

  • 类的成员变量与成员方法

我们通过观察类文件的结构可以发现是这样的.

2019-4-8-02.png

我们可以发现:

  • 在一个Java文件中不仅是可以声明多个类的,还可以在类的内部定义一个类,这可以叫做类的嵌套使用了,这种机制应该就是Java中的内部类的特性.我们在后面在做详细学习.

  • 我们还可以在Structure视窗里发现,类的结构是由方法体和成员变量组成的.

  • 成员变量

我们已经了解到类封装对象属性和行为的载体,而对象的属性是通过成员变量定义的,行为是通过方法创建的.一个类的成员变量就是封装对象的某种属性,成员变量也可以通过修饰符限定其使用范围,因此有静态变量,成员变量,局部变量,常量等区分,关于它们之间的联系与区别,这一点在前面的Java基础中应该有讲过.

  • 成员方法

我们可以通过实例化一个对象,然后调用其属性和方法.而在通常情况下,一个对象的属性是不会在封装类就被初始化的,只会被定义,应为对象的属性通常都是可变的,我们只能通过实例化对象,来确定一个具体对象的具体属性.

那么我们应该如何来调用到对象的属性和设置对象的属性呢.这时我们就会理所当然的想到,当然时使用方法了嘛.是的我们只需要在类中封装获取和设置对象属性的方法就可以了.

而这类获取和设置成员变量的方法就叫做成员方法.(因为其都具有很明显的特征和作用)

// 成员方法,获取成员变量
    public boolean getindepentThing(){
        return this.independentThing;
    }
    // 成员方法,设置成员变量
    public void setindepentThing(boolean independentthing){
        this.independentThing = independentthing;
    }
  • 类的构造方法
    构造方法是类中的另以特殊的方法体,构造方法是一个与类名相同的方法,对象的创建就是通过构造方法来完成的.每当类实例化一个对象时,类都会调用构造方法,所以构造方法其实就是相当与实例化对象时的初始化一样.

    • 构造方法是没有返回值的
    • 构造方法的名称要与本类的名称相同.

为什么构造方法的名称必须与类名称相同,我们看看对象的实例化:

animal animal = new animal();

如此,我们大概明白了,之所以构造方法的名称和类名称相同,是为了在对象的实例化的时候,通过new animal(),使构造方法在对象的实例化的同时也运行了,这样才能实现在实例化对象就能够初始化对象的属性的目的.构造方法的存在,解决了对象的初始化问题,使得我们每次实例化的对象都拥有我们想要设定的属性值,之后我们就可以直接调用其属性,而不需要频繁的使用成员方法来设定对象的值.

    /**
     * 构造方法
     */
    public animal(){  // 无参的构造方法.
        this.independentThing= false;
}
    public animal(boolean independentthing){  // 有参的构造方法
        this.independentThing = independentthing;
}
  • 类中普通的方法

在之前的学习中我们已经了解了关于方法在Java中的定义,使用返回值类型修饰符+方法名.即可创建一个方法体.而我们常常会使用到的void修饰符是分特殊的,它不需要我们return一个值,void的字面意思就是空,我们治理只需要了解到void修饰的方法体,是不需要返回值的.

在类和对象的学习中,我们又了解到,类中的方法其实就是对某个对象的行为的一种封装,所以类中最常见的方法,其实就是这种对行为封装的方法,也可以说是我们自定义的方法,因为这种方法的所有内容都是我们自定义的.这类方法其实才是最普遍存在于类中的.

void eat(){
        System.out.println("动物的吃行为");
    }
  • 类的主方法
    我们在前面的学习中,了解到一个类只能有一个主方法,而这个主方法是用来让Java编译器识别,编译运行的.为什么要这样设计,我们其实已经可以分析的出来了,因为Java语言是基于类和对象的基础上的一门语言,其基本的组成单位其实可以说就是众多的类,然后由众多的类组成的类库组成了Java的标准类库,我们都是基于Java标准类库来编程的,如果不定义一个主方法用来编译运行,那么各种类中的不计其数的方法该如何来标记,如何知道该编译运行哪个方法,调用哪个类.所以类的主方法的存在是必然的一个演变过程.

类的主方法是类的入口点,它定义了程序从何处开始,主方法提供程序流向的控制,Java编译器通过主方法来执行程序.

主方法的语法是固定的:

public static void main(String[] args){
// 方法体
}

我们从主方法的定义可以看到其具有的一些特性:

  • 主方法是一个静态的方法,所以如果要直接在主方法中调用其他方法,则调用的方法也必须是静态的才行.

  • 主方法是没有返回值的.

  • 主方法的形式参数是数组,其中arg[0]~arg[n]表示程序的第一个参数到第n个参数.可以使用args.lenght获取到这个值.


  • 对象

我们现在已经非常了解了,对象就是由类抽象出来的一个实例.比如人类中有一个叫小舍,性别为男的人.那么这个人就是从人类中实例化出来的一个对象.

  • 对象的创建

    其实我们在之前的学习中已经或多或少的有使用到对象,我们是这样创建一个对象的:

animal animal = new animal();
animal animal12 = new animal(true);

在字符串的学习中,我们使用过String类的构造方法,创建一个初始化对象.

        String astr3 = new String(a,0,2);
        String astr4 = new String(b);
        String astr5 = new String(b,0,2);

在Java语言中我们通过new操作符来创建对象.

2019-4-8-01.gif

这里其实有一点小疏忽,一般情况下,类的成员变量一般不会设置成公开的,需要使用private修饰符将其修饰为私有的,然后通过成员方法来访问和设置它的值.

private boolean independentThing;
 System.out.println(animal.getindepentThing());
 animal1.setindepentThing(false);

我们实例化了对象之后,我们就可以通过对象来调用其属性和行为(就是方法)了

        animal.eat();
        System.out.println(animal.independentThing);

  • 对象的引用

在Java语言中,尽管一切都可以看作对象,但实际上的操作标识符是一个引用,那么引用在Java中是怎么体现的.

// 类名 对象引用名称,
animal animal;

实际上,引用并不一定要有一个对象相关联,引用和对象相关连的语法是:

animal animal = new animal();

new就是创建对象的操作符,整个语句相当于创建一个引用animal类的对象,这就是实例化对象的过程.

  • 对象的比较
    我们知道在程序的实际中经常会使用到比较判断,而我们在前面的基础数据类型和运算符的学习中知道了,符是用来比较两个数据的.那么我们现在又知道了对象在Java中的地位是举足轻重的,并且会时长用到,那么对象的比较是否也可以使用符来比较呢.
        System.out.println("字符串是否和abc相等:"+mstr.equals("abc"));
        System.out.println("字符串是否和abc相等:"+(mstr=="abc"));

显然,是不行的,因为我们在前面字符串的比较时就简单的了解到,号是不能用来比较两个String类型的值的,需要通过String类的equals()方法比较.对象的比较是通过其相应类的equals()方法进行比较的.而不能使用符比较,这是因为==比较的是两者引用的地址是否相等.而equals方法比较的才是比较两个对象引用的内容是否相等.

  • 对象的销毁

每个对象都有声明周期,当生命周期结束的时候,对象就会被销毁,其分配的内存就会被回收,在其他一些语言中,对象的内存回收可能会需要手动销毁回收,但在Java语言中,拥有一整套完整的垃圾回收机制,可以根据对象的生命周期来回收其内存,Java的垃圾回收机制也不单单运用在对象上,它对于Java的内存回收有一整个控制回收机制.我们在这里就简单的了解一下就行.

  • 源代码
package day_4_8;

/**
 * @outhor xiaoshe
 * @date 2019/4/8  - @time 17:22
 *类
 * 在Java语言中,类是使用class关键字来定义的
 * 类可以有不同种,通过类前面的关键字来修饰
 * 也就是Java修饰符,一般情况下,修饰符限定了类的使用范围.
 * class后接类名,class是定义类的关键字,具体的类名需要自定义命名,
 * 命名规则是需要遵循java标识符的规则的.
 */
public class sty_class {
    // 通过主类里的主方法来调用不同类的不同方法.因为只有主方法才会被编译运行
    // 所以想要使用任何类,或类的方法的使用.都需要通过主方法调用才能实现.
    public static void main(String[] args) {
        // 想要调用某个类的某个方法,就需要实例化一个这个类的对象,通过实例化对象调用方法.
        // 无参的构造方法构建对象.
        animal animal = new animal();
        animal.eat();
        System.out.println(animal.getindepentThing());
        //有参的构造方法,构建对象
        animal animal1 = new animal(true);
        animal1.setindepentThing(false);
        System.out.println(animal1.getindepentThing());
        System.out.println(args.length);
    }
    public static class book{

    }
}
/**
 * 我们在同一个java文件里,可以声明多个不同的类.
 * 声明animal动物类.
 * 通过类来封装对象的属性和行为.
 */
class animal{
    // 在哦Java语言中,通过类的成员变量表示对象的属性.
    private boolean independentThing;

    // 成员方法,获取成员变量
    public boolean getindepentThing(){
        return this.independentThing;
    }
    // 成员方法,设置成员变量
    public void setindepentThing(boolean independentthing){
        this.independentThing = independentthing;
    }
    /**
     * 构造方法
     */
    public animal(){  // 无参的构造方法.
        this.independentThing= false;
    }
    public animal(boolean independentthing){  // 有参的构造方法
        this.independentThing = independentthing;
    }
    // 在Java中通过构建方法的形式,来表示对象的行为.
    void eat(){
        System.out.println("动物的吃行为");
    }
}

  • 后记

类和对象可以说是Java语言的基础之基础,重中之重,理解清楚面向对象思想和学明白Java类和对象的机制是学习Java语言的必不可缺的阶段,在理解它们的基础上学习Java能够达到事半功倍的地步.因为可以说Java语言的一切几乎都是建立在类和对象上的,当你把类和对象理解透彻了,在其基础上学习其它知识怎会不更加简易呢.?


更新时间:
2019-4-8
21:04

posted @ 2019-04-08 21:12  小舍先生  阅读(223)  评论(0编辑  收藏  举报