Java基础教程(7)-Java中的面向对象和类

简介: 【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。

面向对象编程

Java是一种面向对象的编程语言。面向对象编程,英文是Object-Oriented Programming,简称OOP

面向对象和面向过程的区别

面向过程编程是自顶而下的编程模式;把问题分解成一个一个步骤,每个步骤用函数实现,依次调用即可
面向对象编程是将事务高度抽象化的编程模式; 将问题分解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之
间的调用,组合解决问题。在进行面向对象进行编程的时候,要把属性、行为等封装成对象,然后基于这些对象及对象的能力进行业务逻辑的实现;

类和对象

面向对象编程的一个实质性的要素是抽象。人们通过抽象处理复杂性;

类是Java的核心和本质。它是Java语言的基础,因为类定义了对象的本性;

类就是对象的模板(template),而对象就是类的一个实例(instance)。既然一个对象就是一个类的实例,所以object和instance可以互换使用;

class定义了如何创建实例,因此,class本身就是一种数据类型:而instance是根据class创建的实例,可以创建多个instance,每个instance类型相同,但各自属性可能不相同;

创建类

使用关键字class来创建类;

定义在类中的变量被称为实例变量,这是因为类中的每个实例(也就是类的每个对象)都包含它自己对这些变量的拷贝。这样,一个对象的数据是独立的且是惟一的;

定义在类中的方法和实例变量被称为类的成员;在大多数类中,实例变量被定义在该类中的方法操作和存取。这样,方法决定该类中的数据如何使用

public class Box {
   
   
    //定义一个类
    int width;

    int height;

    public int getSquar(){
   
   
        return  width*height
    }
}
AI 代码解读
声明对象

当创建一个类时,也就创建了一种新的数据类型。就可以使用这种
类型来声明该种类型的对象。

获得一个类的对象需要两步:

  • 第一步,先声明该类类型的一个变量,这个变量没有定义一个对象。实际上,它只是一个能够引用对象的简单变量。
  • 第二步,该声明要创建一个对象的实际的物理拷贝,并把对于该对象的引用赋给该变量。通过使用new运算符实现的。new运算符为对象动态分配(即在运行时分配)内存空间,并返回对它的一个引用。然后这个引用被存储在该变量中。
  • 在Java中,所有的类对象都必须动态分配。

Box box = new Box();

类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间)

当你将一个对象引用赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。

public class Box {
   
   
    //定义一个类
    int width = 10;

    int height = 1;

    private int wh = 100;

    public int getSquar(){
   
   
        return  width*height;
    }

    public void setWh(int wh) {
   
   
        this.wh = wh;
    }

    public int getWh() {
   
   
        return wh;
    }
}

public class DemoOOP {
   
   

    public static void main(String[] args) {
   
   
        Box box = new Box();
        Box box1 = box;
        box.height = 10;
        System.out.println(box1.height);

        box.setWh(102);
        System.out.println(box1.getWh());
        box1 = null;
        System.out.println(box.width);
    }

}
AI 代码解读

输出如下:
在这里插入图片描述

方法

构造函数(方法)

类的后面跟的圆括号指定了类的构造函数。构造函数(constructor)在对象创建时初始化。它与它的类同名,它的语法与方法类似;

构造函数定义当创建一个类的对象时将发生什么。构造函数是所有类的重要组成部分,并有许多重要的属性。大多数类在他们自己的内部显式地定义构造函数。如果一个类没有显式的定义它自己的构造函数,那么Java将自动地提供一个默认的构造函数。

构造函数的任务就是初始化一个对象的内部状态,以便使创建的实例变量能够完全初始化,可以被对象马上使用。

一般方法

方法一般的形式:

type name(parameter-list) { 
// body of method 
}
AI 代码解读
  • type指定了方法返回的数据类型。这可以是任何合法有效的类型,包括你创建的类的类型。如果该方法不返回任何值,则它的返回值type必须为void 。
  • 方法名由name指定。方法名可以是任何合法的标识符。除了不能使用java的保留字;
  • parameter-list (变量列表)是一系列类型和标识符对,用逗号分开,也叫形参。接收方法被调用时传递给方法的参数值(实参)。变量列表可以为空。
  • 对于不返回void类型的方法,使用下面格式的return语句,方法返回值到它的调用程序,其中,value是返回的值。:

    return value;

方法的参数:

方法可以包含0个或任意个参数。方法参数用于接收传递给方法的量值。调用方法时,必须严格按照参数的定义一一传递。

参数还可以使用可变参数;可变参数用 类型… 定义,可变参数相当于数组类型;可变参数可以保证无法传入 null ,因为传入0个参数时,接收到的实际值是一个空数组而不是 null

  public int getWidth(int... w){
   
   
        return  0;
    }
AI 代码解读

在方法内部,可以使用一个隐含的变量 this ,它始终指向当前例。因此,通过 this.field 就可以访问当前实例的字段。如果没有命名冲突,可以省略 this 。但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上 this

目录
打赏
0
2
2
0
1634
分享
相关文章
|
11天前
|
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
34 0
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
40 15
|
18天前
|
《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
43 19
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
32 5
重学Java基础篇—Java对象创建的7种核心方式详解
本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
50 3
|
19天前
|
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
46 11
|
11天前
|
重学Java基础篇—Java泛型深度使用指南
本内容系统介绍了Java泛型的核心价值、用法及高级技巧。首先阐述了泛型在**类型安全**与**代码复用**中的平衡作用,解决强制类型转换错误等问题。接着详细讲解了泛型类定义、方法实现、类型参数约束(如边界限定和多重边界)、通配符应用(PECS原则)以及类型擦除的应对策略。此外,还展示了泛型在通用DAO接口、事件总线等实际场景的应用,并总结了命名规范、边界控制等最佳实践。最后探讨了扩展知识,如通过反射获取泛型参数类型。合理运用泛型可大幅提升代码健壮性和可维护性,建议结合IDE工具和单元测试优化使用。
16 1
|
11天前
|
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
21 1
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
java常见的集合类有哪些
Map接口和Collection接口是所有集合框架的父接口: 1. Collection接口的子接口包括:Set接口和List接口 2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及 Properties等 3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等