Java中的类和对象

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

类和对象是面向对象编程的基本概念,它围绕着现实生活中的实体。

本节我们重点研究对象和类的概念。

  • 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。

下图中男孩女孩为类,而具体的每个人为该类的对象:

一个类是用户定义的蓝图或从中创建对象的原型。它表示一种类型的所有对象共有的一组属性或方法。通常,类声明可以包含这些组件,依次为:

  1. 修饰符  :一个类可以是公共或具有默认访问。
  2. class名称:  姓名应以首字母(按惯例大写)开头。
  3. 超类(如果有):类的父类(超类)的名称,如果有的话,以关键字extends开头。一个类只能扩展(子类)一个父类。
  4. 接口(如果有):由类实现的以逗号分隔的接口列表,如果有的话,以关键字实现为前缀。一个类可以实现多个接口。
  5. class主体:被大括号{}包围的class主体。

构造函数用于初始化新对象。字段是提供类及其对象状态的变量,方法用于实现类及其对象的行为。

实时应用程序中使用了各种类型的类,例如  嵌套类,匿名类,lambda表达式。

Java中的对象

Java中的对象它是面向对象编程的基本单元,代表了真实的生活实体。一个典型的Java程序会创建许多对象,如您所知,通过调用方法进行交互。一个对象包括:

  1. 状态:它由对象的属性表示。它也反映了对象的属性。
  2. 行为:它由对象的方法表示。它也反映了对象与其他对象的响应。
  3. 身份:它为一个对象提供一个唯一的名称,并使一个对象与其他对象交互。

一个物体的例子:狗

Java中的类和对象

对象对应于现实世界中发现的事物。例如,图形程序可能具有诸如“圆形”,“方形”,“菜单”之类的对象。在线购物系统可能具有诸如“购物车”,“顾客”和“产品”之类的对象。

声明对象(也称为实例化类)

当一个类的对象被创建时,这个类被说成是实例化的。所有实例共享类的属性和行为。但是这些属性的值,即状态对每个对象都是唯一的。单个类可以有任意数量的实例。

示例:

Java中的类和对象

当我们声明像(type name;)这样的变量时。这会通知编译器,我们将使用name来引用类型为type的数据。对于原始变量,此声明还为变量保留适当的内存量。所以对于引用变量,类型必须严格是具体的类名。一般来说,我们不能创建抽象类或接口的对象。

Dog tuffy;

如果我们像这样声明引用变量(tuffy),那么它的值将是未确定的(null),直到实际创建并分配一个对象为止。简单地声明一个引用变量不会创建一个对象。

初始化一个对象

新运算符通过为新对象分配内存并返回对该内存的引用来实例化类。新的操作符也调用类的构造函数。

// Class Declaration

public class Dog
{
    // Instance Variables
    String name;
    String breed;
    int age;
    String color;

    // Constructor Declaration of Class
    public Dog(String name, String breed,
                   int age, String color)
    {
        this.name = name;
        this.breed = breed;
        this.age = age;
        this.color = color;
    }

    // method 1
    public String getName()
    {
        return name;
    }

    // method 2
    public String getBreed()
    {
        return breed;
    }

    // method 3
    public int getAge()
    {
        return age;
    }

    // method 4
    public String getColor()
    {
        return color;
    }

    @Override
    public String toString()
    {
        return("Hi my name is "+ this.getName()+
               ".\nMy breed,age and color are " +
               this.getBreed()+"," + this.getAge()+
               ","+ this.getColor());
    }

    public static void main(String[] args)
    {
        Dog tuffy = new Dog("tuffy","papillon", 5, "white");
        System.out.println(tuffy.toString());
    }
}

输出:

Hi my name is tuffy.
My breed,age and color are papillon,5,white
  • 这个类包含一个构造函数。我们可以识别构造函数,因为它的声明使用与类相同的名称,并且它没有返回类型。Java编译器根据参数的数量和类型区分构造函数。Dog类中的构造函数有四个参数。以下语句为这些参数提供“tuffy”,“papillon”,5,“white”作为值:
    Dog tuffy = new Dog("tuffy","papillon",5, "white");

    执行此语句的结果可以表示为:
    Java中的类和对象

注意:所有类都至少有一个构造函数。如果一个类没有显式声明任何东西,Java编译器会自动提供一个无参的构造函数,也称为默认构造函数。这个默认构造函数调用父类的无参数构造函数(因为它只包含一个语句,即super();),或者如果该类没有其他父类,则为Object类构造函数(因为Object类是所有类的父类,直接或间接)。

创建类的对象的方法

在java中有四种创建对象的方法,严格来说只有一种方法(使用new关键字),其余的内部使用new关键字。

  • 使用新的关键字:这是在java中创建对象最常用和最常用的方法。例:
    // creating object of class Test
    Test t = new Test();
  • 使用Class.forName(String className)方法:在名为Class的java.lang包中有一个预定义的类。forName(String className)方法返回与具有给定字符串名称的类关联的Class对象。我们必须给出一个类的完全限定名称。在此Class对象上调用新的Instance()方法时,将返回具有给定字符串名称的类的新实例。
    // creating object of public class Test
    // consider class Test present in com.p1 package
    Test obj = (Test)Class.forName("com.p1.Test").newInstance();
  • 使用clone()方法:clone()方法存在于Object类中。它创建并返回对象的副本。
    // creating object of class Test
    Test t1 = new Test();
    
    // creating clone of above object
    Test t2 = (Test)t1.clone();

 

  • 反序列化:反序列化是从文件中保存的状态读取对象的技术。参考java中的序列化/反序列化
                
    FileInputStream file = new FileInputStream(filename);
    ObjectInputStream in = new ObjectInputStream(file);
    Object obj = in.readObject();
    

仅以一种类型创建多个对象(一种好的做法)

  • 实时地,我们需要不同方法的不同对象。创建大量引用来存储它们不是一个好习惯,因此我们声明一个静态引用变量并在需要时使用它。在这种情况下,内存浪费较少。垃圾收集器将销毁不再被引用的对象。例:
              
    Test test = new Test();
    test = new Test();
    
  • 在继承系统中,我们使用父类引用变量来存储子类对象。在这种情况下,我们可以使用相同的引用变量切换到不同的子类对象。例:
    class Animal {}
    
    class Dog extends Animal {}
    class Cat extends Animal {}
    
    public class Test
    {
        // using Dog object
        Animal obj = new Dog();
    
        // using Cat object
        obj = new Cat();
    }

匿名对象

匿名对象是实例化的对象,但不存储在引用变量中。

  • 它们用于立即调用方法。
  • 方法调用后它们将被销毁。
  • 它们广泛用于不同的图书馆。例如,在AWT库中,它们用于执行捕获事件的一些操作(例如按键)。
  • 在下面的例子中,当一个键是按钮(由btn引用)被按下时,我们只是简单地创建EventHandler类的匿名对象来调用handle方法。
    btn.setOnAction(new EventHandler()
    {
        public void handle(ActionEvent event)
        {
            System.out.println(“Hello World!”);
        }
    });

Java中的类和对象的拓展理解

对于Java中的类和对象,明白了基本概念之后,可以思考和理解下面的问题:

面向对象最关键的两个词汇是类与对象,实质上可以将类看作对象的抽象,它定义了对象所具有的属性和方法。学习 Java 语言必须掌握类与对象,这样可以从深层次理解 Java 这种面向对象语言的幵发理念。因此,掌握类与对象是学习 Java 语言的基础,可以使开发人员更好、更快地掌握 Java 编程思想与编程方式。

  •   本文标题:Java中的类和对象 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/3810.html

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读