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
分享
相关文章
Java 类和对象
本文介绍了Java编程中类和对象的基础知识,作为面向对象编程(OOP)的核心概念。类是对象的蓝图,定义实体类型;对象是具体实例,包含状态和行为。通过示例展示了如何创建表示汽车的类及其实例,并说明了构造函数、字段和方法的作用。同时,文章还探讨了访问修饰符的使用,强调封装的重要性,如通过getter和setter控制字段访问。最后总结了类与对象的关系及其在Java中的应用,并建议进一步学习继承等概念。
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
54 15
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
46 5
|
7天前
|
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
19 0
|
28天前
|
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等
|
2月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
194 60
【Java并发】【线程池】带你从0-1入门线程池
|
9天前
|
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
47 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
83 23
|
1月前
|
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
147 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
AI助理

你好,我是AI助理

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