Java从入门到精通-类和对象(二)

0. 类和对象

![在这里插入图片描述](https://img-blog.csdnimg.cn/9ab78dc17d214f0f831be8f7c9defd6e.png

3. 类的构造方法

在这里插入图片描述
构造方法是一种特殊的方法,用于创建和初始化对象。构造方法的名称必须与类名相同,它没有返回值,并且在创建对象时自动调用。构造方法的主要作用是确保对象在创建时具有合适的初始状态。

以下是构造方法的基本概念和使用方式:

3.1 构造方法的特点:

  1. 构造方法的名称必须与类名相同。
  2. 构造方法没有返回值,甚至不需要使用void关键字。
  3. 构造方法在对象创建时自动调用,不能手动调用。
  4. 类可以有多个构造方法,根据不同的参数列表进行重载。
  5. 如果没有为类定义任何构造方法,Java会自动生成一个默认无参构造方法。

3.2 构造方法的作用:

构造方法的主要作用是进行对象的初始化,通常用于执行以下操作:

  • 初始化对象的属性。
  • 分配内存空间。
  • 执行必要的设置和准备工作。

3.3 构造方法示例:

public class Student {private String name;private int age;// 无参构造方法public Student() {// 默认构造方法,不执行特定初始化操作}// 带参数的构造方法public Student(String name, int age) {this.name = name;this.age = age;}// 其他构造方法...
}

定义了一个Student类,它有两个构造方法:一个无参构造方法和一个带有参数的构造方法。带参数的构造方法用于初始化学生的姓名和年龄属性。

3.4 构造方法的使用:

public class Main {public static void main(String[] args) {// 使用无参构造方法创建对象Student student1 = new Student();// 使用带参数的构造方法创建对象Student student2 = new Student("Alice", 20);}
}

我们使用构造方法创建了两个Student对象,一个使用无参构造方法,另一个使用带参数的构造方法来初始化属性。

4. 静态变量和静态方法

在这里插入图片描述
静态变量和静态方法是与类关联而不是与对象关联的。它们属于类而不是对象,因此可以通过类名直接访问,而无需创建类的实例。让我们深入了解静态变量和静态方法的概念和用法。

4.1 静态变量(静态字段)

静态变量,也称为静态字段或类变量,是在类级别上声明的变量,它们的值对于所有类的实例都是共享的。静态变量通常用static关键字修饰。以下是静态变量的特点和用法:

  • 静态变量属于类,而不属于类的任何实例。
  • 所有类的实例共享相同的静态变量。
  • 静态变量在类被加载时初始化,只会初始化一次。
  • 静态变量可以通过类名直接访问,无需创建对象。

示例:

public class Counter {// 静态变量public static int count = 0;// 静态方法public static void increment() {count++;}
}

示例中,Counter类具有一个静态变量count,用于跟踪计数,并且有一个静态方法increment(),用于增加计数。

4.2 静态方法

静态方法是在类级别上声明的方法,它们不需要依赖于类的实例而可以直接调用。静态方法通常用static关键字修饰。以下是静态方法的特点和用法:

  • 静态方法属于类,而不属于类的任何实例。
  • 静态方法可以直接通过类名调用,无需创建对象。
  • 静态方法不能访问非静态变量和非静态方法,因为它们不依赖于对象的状态。

示例:

public class MathUtils {// 静态方法:计算两个整数的和public static int add(int a, int b) {return a + b;}
}

示例中,MathUtils类具有一个静态方法add(),用于计算两个整数的和。这个方法可以通过类名直接调用,如MathUtils.add(5, 3)

4.3 静态变量和静态方法的用途

静态变量和静态方法通常用于以下情况:

  1. 共享数据:静态变量可用于存储类级别的共享数据,例如计数器、配置信息等。

  2. 工具方法:静态方法通常用于实现与类相关的工具方法,无需创建对象即可使用。

  3. 工厂方法:静态方法可用于创建类的实例,例如单例模式中的静态工厂方法。

  4. 常量:静态变量可以用于定义常量,例如Math.PI表示圆周率。

  5. 静态类:有时候,可以创建静态类,其中所有方法和变量都是静态的,用于实现工具类或全局配置类。

5. 类的主方法

在这里插入图片描述
在Java中,类的主方法是一个特殊的方法,它是Java程序的入口点(entry point)。每个Java应用程序必须包含一个主方法,它具有以下特点:

  1. 主方法的声明必须如下所示:

    public static void main(String[] args)
    
  2. 主方法的名称必须是main

  3. 主方法的参数列表必须包括一个String数组参数,通常命名为args,用于接收命令行参数。

  4. 主方法的返回类型是void,表示它不返回任何值。

主方法的主要作用是作为程序的入口点,当程序启动时,Java虚拟机(JVM)会调用主方法来执行程序的逻辑。在主方法内部,您可以编写程序的主要逻辑,处理输入、执行计算、调用其他方法等。

以下是一个典型的Java程序包含的主方法:

public class MyProgram {public static void main(String[] args) {// 主方法的逻辑代码System.out.println("Hello, World!");}
}

示例中,MyProgram类包含了一个名为main的主方法,它简单地打印出"Hello, World!"。

主方法是Java程序的入口点,它允许您执行程序并与用户或其他系统进行交互。在实际应用中,主方法通常会包含更复杂的逻辑,从而实现特定的功能或任务。当您运行Java程序时,JVM会查找并执行主方法内的代码。

6. 对象

在这里插入图片描述
在Java中,对象是面向对象编程的核心概念之一。对象表示现实世界中的实体或概念,并具有属性(成员变量)和方法(成员方法)来描述其特征和行为。让我们深入了解对象的概念和用法。

6.1 对象的基本概念

  • 对象是类的实例:类是对象的模板,而对象是根据模板创建的实际实例。对象是类的具体实体。

  • 对象具有状态和行为:对象的状态由成员变量(属性)表示,对象的行为由成员方法表示。状态描述了对象的特征,行为描述了对象可以执行的操作。

  • 对象是引用类型:在Java中,变量可以保存对象的引用而不是对象本身。引用是指向对象内存地址的指针。

在Java中,对象的创建通常遵循以下步骤:

  1. 定义类:首先,您需要定义一个类,该类描述了对象的属性和方法。

  2. 实例化对象:使用new关键字创建类的实例(对象),并分配内存空间。例如:

    ClassName objectName = new ClassName();
    
  3. 访问对象:通过对象引用,可以访问对象的属性和方法。例如:

    objectName.propertyName = value; // 设置属性值
    objectName.methodName();        // 调用方法
    

6.3 创建和使用对象

public class Student {// 成员变量private String name;private int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;}// 成员方法public void displayInfo() {System.out.println("姓名: " + name);System.out.println("年龄: " + age);}
}public class Main {public static void main(String[] args) {// 创建Student对象Student student1 = new Student("Alice", 20);Student student2 = new Student("Bob", 22);// 访问对象的成员方法student1.displayInfo();student2.displayInfo();}
}

在示例中,定义了一个Student类,该类有两个成员变量nameage,以及一个成员方法displayInfo()用于显示学生信息。然后,在Main类的main方法中,我们创建了两个Student对象,并使用对象的引用调用了displayInfo()方法来显示学生信息。

6.4 对象的引用和生命周期

对象的引用是指向对象内存的指针。对象的引用可以被分配给变量,传递给方法,存储在数据结构中等等。对象的生命周期从创建(实例化)开始,到不再被引用时结束。一旦对象不再被引用,它将变为不可达,最终由垃圾收集器回收内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/107430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【业务功能107】微服务-springcloud-springboot-Sentinel容器安装-熔断降级限流

Sentinel 在微服务架构下,会涉及到 微服务A需要远程调用其他的微服务B,C,D等的接口,比如商品服务接口,需要调用库存服务数据,秒杀服务数据等,这里就会衍生一个长链路的调用过程,那么一旦下游需要被调用的数…

【服务器 | 测试】如何在centos 7上面安装jmeter

安装之前需要几个环境,以下是列出的几个环境 CentOS 7.7 64位JDK 1.8JMeter 5.2 1. 下载jmeter安装包 JMeter是开源的工具,安装 JMeter 要先安装好 JDK 的环境,安装JDK在前面的文章已经讲到 JMeter最新版下载地址:Apache JMeter…

成绩定级脚本(Python)

成绩评定脚本 写一个成绩评定的python脚本,实现用户输入成绩,由脚本来为成绩评级: #成绩评定脚本.pyscoreinput("please input your score:") if int(score)> 90:print("A") elif int(score)> 80:print("B&…

Java面试笔试acm版输入

首先区分scanner.nextInt()//输入一个整数,只能读取一个数,空格就停止。 scanner.next()//输入字符串,只能读取一个字符串,空格就停止,但是逗号不停止。 scanner.nextLine() 读取一行,换行停止&#xff0c…

buuctf crypto 【密码学的心声】解题记录

1.打开可以看到一个曲谱 2.看到曲谱中的提示埃塞克码可以想到ascii码,没有八可以联想到八进制,而八进制又对应着三位的二进制,然后写个脚本就好了 oct [111,114,157,166,145,123,145,143,165,162,151,164,171,126,145,162,171,115,165,143,…

算法通过村第七关-树(递归/二叉树遍历)青铜笔记|手撕递归

文章目录 前言1. 递归的特征2. 如何写出好的递归3. 怎么看懂递归的代码总结 前言 提示:我们生活在24小时不眠不休的社会里但是没有24小时不眠不休的身体有些东西必须舍弃 -- 马特海格 这一关,我看要谈论的是递归问题,说到它就牵扯到很多问题了…

量化:基于支持向量机的择时策略

文章目录 参考机器学习简介策略简介SVM简介整体流程收集数据准备数据建立模型训练模型测试模型调节参数 参考 Python机器学习算法与量化交易 利用机器学习模型,构建量化择时策略 机器学习简介 机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。…

Python实现机器学习(下)— 数据预处理、模型训练和模型评估

前言:Hello大家好,我是小哥谈。本门课程将介绍人工智能相关概念,重点讲解机器学习原理机器基本算法(监督学习及非监督学习)。使用python,结合sklearn、Pycharm进行编程,介绍iris(鸢尾…

时间序列论文-聚类和异常检测(二)

同样摘自知乎的回答:https://www.zhihu.com/question/29507442/answer/1212624591?utm_id0 正巧之前做过时间序列 的异常检测项目,这里介绍几种尝试过的方法,也算是抛砖引玉 吧,欢迎大家讨论交流~ 背景与定义 时间序列异常 检测…

【C++ • STL • 力扣】详解string相关OJ

文章目录 1、仅仅翻转字母2、字符串中的第一个唯一字符3、字符串里最后一个单词的长度4、验证一个字符串是否是回文5、字符串相加总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ" 1、仅仅翻转字母 力扣链接 代码1展示&…

Gitlab仓库部署

Gitlab仓库部署 一、Gitlab的概述1、gitlab介绍2、gitlab主要功能3、gitlab和github的区别 二、部署环境1、安装依赖环境2、安装Postfix邮箱3、Gitlab优势4、Gitlab工作流程 三、Gitlab部署过程1、Yum安装Gitlab2、配置gitlab站点URL3、启动并访问Gitlab 四、Gitlab具体操作1、…

X86_64函数调用汇编程序分(2)

X86_64函数调用汇编程序分(2) 1 X86_64寄存器使用标准2 leaveq和retq指令2.1 leaveq2.2 retq 3 执行leaveq和retq之后栈的结构3.1 执行leaveq之后栈的结构3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图3.1.2 test_fun_b函数执行leaveq之后的栈结构示…