热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中的类和对象

Java 中的类和对象原文:https://www.geeksforgeeks.org/classes-objects-java

Java 中的类和对象

原文:https://www.geeksforgeeks.org/classes-objects-java/

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

班级

类是用户定义的蓝图或原型,从中创建对象。它表示一种类型的所有对象共有的一组属性或方法。一般来说,类声明可以包含这些组件,顺序如下:


  1. 修饰符:类可以是公共的,也可以是默认访问的(详见本)。

  2. class 关键字: class 关键字用于创建类。

  3. 类名:名称应以首字母(按惯例大写)开头。

  4. 超类(如果有的话):类的父类(超类)的名称,如果有的话,前面加关键字 extends。一个类只能扩展(子类)一个父类。

  5. 接口(如果有):类实现的以逗号分隔的接口列表(如果有),前面有关键字 implements。一个类可以实现多个接口。

  6. Body: 大括号包围的类体,{ }。

构造函数用于初始化新对象。字段是提供类及其对象状态的变量,方法用于实现类及其对象的行为。
实时应用中使用的类有多种类型,如嵌套类、匿名类、 lambda 表达式。

目标

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


  1. 状态:用一个对象的属性来表示。它还反映了对象的属性。

  2. 行为:用一个对象的方法来表示。它还反映了一个对象与其他对象的反应。

  3. 身份:为一个对象赋予唯一的名称,使一个对象能够与其他对象进行交互。

一个物体的例子:狗

Blank Diagram - Page 1 (5)

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

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

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

示例:

Blank Diagram - Page 1 (3)

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

Dog tuffy;

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

初始化对象

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

Java 语言(一种计算机语言,尤用于创建网站)


// 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");



  • 执行该语句的结果可以说明如下:

Untitled

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

创建类对象的方法

用 java 创建对象有四种方法。严格来说只有一种方式(通过使用新增关键字),其余内部使用新增关键字。


  • 使用 new 关键字:是 java 中创建对象最常见、最通用的方式。示例:


// creating object of class Test
Test t = new Test();



  • 使用 Class.forName(String className)方法:Java . lang 包中有一个预定义的类,名字为 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();



  • 使用克隆()方法:克隆()方法存在于对象类中。它创建并返回对象的副本。


// 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();


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



  • 在实时中,我们需要一个类的不同对象在不同的方法中。创建大量引用来存储它们不是一个好的做法,因此我们声明一个静态引用变量,并在需要时使用它。在这种情况下,内存浪费较少。不再被引用的对象将被 java 的垃圾收集器销毁。示例:


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 引用)被按下时,我们只是简单地为仅仅调用 handle 方法创建了 EventHandler 类的匿名对象。


btn.setOnAction(new EventHandler()
{
public void handle(ActionEvent event)
{
System.out.println("Hello World!");
}
});

本文由高拉夫·米格拉尼供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用write.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 review-team@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
kuae_617
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有