教妹学Java(二十三):怎么理解 Java 中对象和类的概念?(1)

简介: 教妹学Java(二十三):怎么理解 Java 中对象和类的概念?

你好呀,我是沉默王二,CSDN 排名前十的博客专家。这是《教妹学 Java》专栏的第二十三篇,我们来理解一下 Java 中的对象和类,以及它们俩的概念——什么是对象?什么又是类?


本专栏中的代码已收录到 GitHub github.com/itwanger ,里面还有我精心为你准备的一线大厂面试题。

————————————————


三妹上的洛阳理工,校区离我家很近, 所以每逢周末她都会来我家,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,以及父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,这次我们要学习的内容是‘对象和类’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。Java 是一门面向对象的编程语言,所以我们需要使用对象和类来设计程序。 ”我面带着朴实无华的微笑回答着她,“Java 中的对象既是物理实体也是逻辑实体,而 Java 中的类仅仅是逻辑实体。”


01、Java 中的对象是什么


具有状态和行为的实体被称为对象,例如铅笔、苹果、书本、书包、黑板,这些是物理存在的,有形的。


image.png


也可以是逻辑上存在的,我们按照想象力把它设计出来的。比如说支付宝、微信。




对象具有三种特征:


状态:描述了对象给人的直观印象(名词),比如说人的名字、年纪、性别。


行为:表示对象具有的功能(动词),比如说人可以吃饭、睡觉、打豆豆。


定义:Java 虚拟机在内部会使用一个唯一标识(对外部是不可见的)来标记每一个对象。


02、Java 中的类是什么


类可以看做是创建对象的一个模板,我们来通过一个简单的例子理解一下类的定义。


/**
 * @author 沉默王二,一枚有趣的程序员
 */
public class Person {
    private String name;
    private int age;
    private int sex;
    private void eat() {
    }
    private void sleep() {
    }
    private void dadoudou() {
    }
}



一个类可以包含:


字段

方法

构造方法

在 Person 类中,字段有 name、age 和 sex,它们也称为实例变量或者成员变量——在类内部但在方法外部,实例变量在编译时不占用内存空间,在运行时(对象实例化 new Person())获取内存——这也正是它被称作“实例”变量的原因。


方法有 eat()、sleep() 和 dadoudou(),表示 Person 这个对象可以做什么。


咦,没有构造方法呢?的确在 Person 类的源码文件(.java)中看不到,但在反编译后的字节码文件(.class)中是可以看得到的。


//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.itwanger.twentythree;
public class Person {
    private String name;
    private int age;
    private int sex;
    public Person() {
    }
    private void eat() {
    }
    private void sleep() {
    }
    private void dadoudou() {
    }
}



public Person(){} 就是默认的构造方法,因为是空的构造方法(方法体中没有内容),所以可以缺省。



相关文章
|
10月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1099 157
|
11月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
530 101
|
11月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
423 100
|
10月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
422 4
|
10月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
422 5
|
10月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
398 4
|
10月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
520 5
|
10月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
441 1
|
10月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
566 1
|
10月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
370 0