【Java】类和对象

类和类的实例化

类就是一类对象的统称。对象就是这一类具体化的一个实例。
声明一个类就是创建一个新的数据类型,而类在 Java 中属于 引用类型 Java 使用关键字 class 来声明类。我们来 看以下简单的声明一个类。
基本语法:
class < class_name > {  
field ; // 成员属性
method ; // 成员方法
}
// 实例化对象
< class_name > < 对象名 > = new < class_name > ();
  • class定义类的关键字,ClassName为类的名字,{}中为类的主体。
  • 类中的元素称为:成员属性。类中的函数称为:成员方法。

代码示例:

class Student{public String name;public char sex;public int age;public void study(){System.out.println("学习");
}public void eat(){System.out.println("吃饭");
}
}

 这里我们创建了一个 Student 类,其中有成员属性:name、sex、age。和成员方法:study、eat。

类的实例化

用类类型创建对象的过程,称为类的实例化
代码示例:
class Student{public String name;public char sex;public int age;public void study(){System.out.println("学习");
}public void eat(){System.out.println("吃饭");
}
}public class TeatDemmo{public static void main(String[] args){Student stu1 = new Student();stu1.study();stu1.eat();
}
}

其中 stu1 就是类 Student 的一个实例,我们创建了实例后才能在另一个类中用到这个类里面的成员方法和成员属性。

  • new 关键字用于创建一个对象的实例
  • 使用 . 来访问对象中的属性和方法
  • 同一个类可以创建多个实例

类的成员

类的成员可以包含以下:字段、方法、代码块、内部类和接口等

字段

在类中 , 但是方法外部定义的变量 . 这样的变量我们称为 " 字段 " " 属性 " " 成员变量 "
  • 使用 . 访问对象的字段
  • "访问" 既包含读, 也包含写
  • 对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值
默认值规则
  • 对于各种数字类型, 默认值为 0
  • 对于 boolean 类型, 默认值为 false
  • 对于引用类型(String, Array, 以及自定制类), 默认值为 null

方法

成员方法:用于描述一个对象的行为,就相比于C语言中的函数

构造方法

方法中还有一种特殊的方法称为 构造方法  在实例化对象的时候会被自动调用到的方法, 方法名字和类名相同 , 用于对象的初始化。
我们来举个例子描述构造方法:
class Student{public String name;public int age;public char sex;public Student(String name,int age,char sex){this.name = name;this.age = age;this.sex = sex;}}public class Data{public static void main(String[] args) {Student stu1 = new Student("张三",20,'男');}
}

此处 Student() 方法就是我们的构造方法,构造方法在实例化对象的时候就会被自动调用,一般用于对象的初始化。

调试结果截图:

这里我们可以看到,我们只使用了实例化对象,但是以经给成员变量赋值了。
构造方法是一种特殊方法 , 使用关键字 new 实例化新对象时会被自动调用 , 用于完成初始化操作。
new 执行过程
  • 为对象分配内存空间
  • 调用对象的构造方法
语法规则
  • 1.方法名称必须与类名称相同
  • 2.构造方法没有返回值类型声明
  • 3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
注意事项
  • 如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
  • 若类中定义了构造方法,则默认的无参构造将不再生成
  • 构造方法支持重载. 规则和普通方法的重载一致

this关键字

this 表示当前对象引用, 可以借助 this 来访问对象的字段和方法
我们会发现在构造函数的内部,我们可以使用 this 关键字,构造函数是用来构造对象的,对象还没有构造好, 我们就使用了this。
代码示例:
class Person { private String name;private int age; private String sex; public Person() { this("bit", 12, "man");//必须放在第一行进行显示} //这两个构造函数之间的关系为重载。public Person(String name,int age,String sex) { this.name = name; this.age = age; this.sex = sex; } 
} public class Main{ public static void main(String[] args) { Person person = new Person();//调用不带参数的构造函数}
}

这里我们使用了构造方法的重载,我们在 main()函数中实例化的时候没有传参,说明我们自动调用了不带参数的构造方法。在不带参数的构造方法中我们又使用了 this() 函数,这个函数的作用是调用其他的构造方法(根据传参来选择调用哪个构造方法)。

注意:this() 方法必须在该构造方法的第一行。

static 关键字

  • 1、修饰属性
  • 2、修饰方法
  • 3、修饰代码块
  • 4、修饰类
修饰属性 Java 静态属性和类相关 , 和具体的实例无关 . 换句话说 , 同一个类的不同实例共用同一个静态属性。
修饰方法 
如果在任何方法上应用 static 关键字,此方法称为静态方法。
  • 静态方法属于类,而不属于类的对象。
  • 可以直接调用静态方法,而无需创建类的实例。
  • 静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
注意事项 : 静态方法和实例无关 , 而是和类相关
  • 静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的)。
  • thissuper两个关键字不能在静态上下文中使用。

代码示例:

class Student{public String name;public int age;public char sex;public static String classroom;public Student(String name,int age,char sex){this.name = name;this.age = age;this.sex = sex;}public static void func(){System.out.println("这是一个静态方法");System.out.println(classroom);}}public class Data{public static void main(String[] args) {Student stu1 = new Student("张三",20,'男');Student.classroom = "2022308";Student.func();}
}

通过上述代码我们可以看出,在我们使用被 static 修饰过的成员变量或方法的时候,并不需要对象实例化,我们只需要通过类来调用。而且在静态方法里面我们可以直接使用静态成员变量。

运行结果图:

上述代码数据属性的内存布局:

因此被 static 关键字修饰的变量并不存在类中,不需要用用实例化来调用。

代码块

字段的初始化方式有:
  • 1. 就地初始化
  • 2. 使用构造方法初始化
  • 3. 使用代码块初始化
前两种方式前面已经学习过了 , 接下来我们介绍第三种方式 , 使用代码块初始化
什么是代码块
使用 {} 定义的一段代码就是代码块
根据代码块定义的位置以及关键字,又可分为以下四种:
  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块
普通代码块:定义在方法中的代码块
构造块:定义在类中的代码块 ( 不加修饰符 ) 。也叫: 实例代码块 。构造代码块一般用于初始化实例成员变量
静态代码块:使用 static 定义的代码块。 一般用于初始化静态成员属性。
代码示例:
class Student{public String name;public String id;public int age;public char sex;public static String classroom;static{classroom = "2000123";System.out.println("这是一个静态代码块");}{this.name = "小明";this.id = "202258454";this.age = 20;this.sex = '男';System.out.println("这是一个构造代码块");}public Student(){System.out.println("这是一个构造方法");}
}public class Data{public static void main(String[] args) {Student stu = new Student();}
}

我们在 Student 类中写了一个静态代码块一个构造代码块和一个构造方法。接下来我们来看当实例化对象的时候,它们三个的执行顺序。

我们可以看到静态代码块优先于构造代码块优先于构造方法。
注意事项
  • 静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
  • 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。

toString 方法

class Person {private String name;private int age;public Person(String name,int age) {this.age = age;this.name = name;}public void show() {System.out.println("name:"+name+" " + "age:"+age);}//重写Object的toString方法@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}
public class Data {public static void main(String[] args) {Person person = new Person("小明",19);person.show();System.out.println(person);}
}

输出结果:

注意事项
  • toString 方法会在 println 的时候被自动调用
  • 将对象转成字符串这样的操作我们称为 序列化
  • toString Object 类提供的方法, 我们自己创建的 Person 类默认继承自 Object , 可以重写 toString 方法实 现我们自己版本的转换字符串方法
  • @Override Java 中称为 "注解", 此处的 @Override 表示下面实现的 toString 方法是重写了父类的方法
  • IDEA快速生成ObjecttoString方法快捷键:alt+f12(insert)

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

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

相关文章

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery&#xff1a;数据丢失的终结者&#xff0c;您的数字世界守护神 在数字化时代&#xff0c;数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料&#xff0c;数据都扮演着重要的角色。然而&#xff0c;意外删除、格式化、系统崩溃或病毒攻击等原因导…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力&#xff0c;为边缘设备的Ai计算提供了可能。 集成图形处理器&#xff0c;拥有8GB/16GB LPDDR4X&#xff08;我这个是8G内存版本的&#xff09;&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&a…

python自动化-自动化网络配置工具v2(可巡检,可批量配置)

在日常工作中遇到需要配置相同配置的场景&#xff0c;网络工程师一个个去登陆配置会让工作效率显得没那么高效。 但是随着科技发展&#xff0c;人们不断的学习&#xff0c;我们似乎可以使用一些软件或者脚本来帮助我们实现巡检任务或者配置任务。 今天我想给大家分享一款我自己…

攻击同学网络,让同学断网

技术介绍&#xff1a;ARP欺骗 ARP欺骗&#xff08;ARP spoofing&#xff09;是一种网络攻击技术&#xff0c;它通过伪造ARP&#xff08;地址解析协议&#xff09;响应包来欺骗目标设备&#xff0c;使其将网络流量发送到攻击者指定的位置。具体操作步骤如下&#xff1a; 攻击者…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式&#xff0c;使用的是一种类sql的风格语法。 文章链接&#xff1a; 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能&#xff0c;包括数据传输、方法调用和事件调用。需配套ArkUI端API使用&#xff0c;ArkUI侧具体用法请参考[Bridge API]。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-…

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码

采用java语言&#xff0b;B/S架构&#xff0b;后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码 ADR监测引擎每日主动获取检验数据、病历内容&#xff08;可拓展&#xff09;、以及其他临床数据&#xff0c;根据知识库内容自动判定患者是否有不良反应迹象&#xf…

Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解

文章目录 Diffusion Model生成模型DDPM概述向前扩散过程前向扩散的逐步过程前向扩散的整体过程 反向去噪过程网络结构训练和推理过程训练过程推理过程优化目标 详细数学推导数学基础向前扩散过程反向去噪过程 Stable Diffusion组成结构运行流程网络结构变分自编码器 (VAE)文本编…

探索Python中的随机数生成与统计分析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、随机数的魅力与实用性 1. 随机数生成基础 2. 批量生成随机数 二、随机数的高级应用&a…

数字化工厂怎么收集,处理数据?

数字化工厂的数据收集与处理 数字化工厂是现代化工厂&#xff0c;利用数字技术和数据分析提高效率和优化流程。数据分析作为数字化工厂的核心技术&#xff0c;对数据的获取与处理至关重要。在数字化工厂中&#xff0c;数据的来源包括企业内部信息系统、物联网信息以及外部信息&…

《智能水表计量平台技术架构:数字化管理助力节水环保》

随着科技的不断发展&#xff0c;智能水表计量平台作为一种新型的水资源管理工具&#xff0c;正在逐渐受到关注和应用。本文将深入探讨智能水表计量平台的技术架构设计与实现&#xff0c;以及如何通过数字化管理助力节水环保事业。 ### 1. 系统架构概述 智能水表计量平台的技术…

Jenkins的Pipeline流水线

目录 前言 流水线概念 什么是流水线 Jenkins流水线 pipeline node stage step 创建一个简单的流水线 创建Pipeline项目 选择模板 测试 前言 提到 CI 工具&#xff0c;首先想到的就是“CI 界”的大佬——Jenkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具…

VPN的详细理解

VPN&#xff08;Virtual Private Network&#xff0c;虚拟私人网络&#xff09;是一种在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使远程用户访问公司内部网络资源时&#xff0c;实现安全的连接和数据传输。以下是对VPN的详细介绍&#xff1a; 选择代理浏览器…

Python项目:数据可视化_下载数据【笔记】

源自《Python编程&#xff1a;从入门到实践》 作者&#xff1a; Eric Matthes 02 下载数据 2.1 sitka_weather_07-2021_simple.csv from pathlib import Path import matplotlib.pyplot as plt import csv from datetime import datetimepath Path(D:\CH16\sitka_weather_0…

在链游中,智能合约如何被用于实现游戏内的各种功能

随着区块链技术的快速发展&#xff0c;链游&#xff08;Blockchain Games&#xff09;作为区块链技术的重要应用领域之一&#xff0c;正逐渐展现出其独特的魅力和优势。其中&#xff0c;智能合约作为链游的核心技术之一&#xff0c;对于实现游戏内的各种功能起到了至关重要的作…

【MySQL】初识数据库

序言 在接触到新知识时&#xff0c;相信各位都会有一种陌生以及想逃避的感觉&#xff0c;但是一旦克服了这种万事开头难的感觉&#xff0c;之后就犹如拨开云雾见天明&#xff0c;并且随着一步一个脚印地走下去&#xff0c;时间久了再回过头来看相信各位一定都会发出轻舟已过万重…

【vue-4】遍历数组或对象v-for

1、遍历数组 <ul><li v-for"(value,index) in web.number">index>{{index}}:value>{{value}}</li> </ul> 知识点&#xff1a; <ul>标签定义无序列表 举例&#xff1a; <ul><li>Coffee</li><li>Tea…

本地部署Whisper实现语言转文字

文章目录 本地部署Whisper实现语言转文字1.前置条件2.安装chocolatey3.安装ffmpeg4.安装whisper5.测试用例6.命令行用法7.本地硬件受限&#xff0c;借用hugging face资源进行转译 本地部署Whisper实现语言转文字 1.前置条件 环境windows10 64位 2.安装chocolatey 安装chocol…

java项目级云MES源码(制造执行系统) springboot + vue-element-plus-admin生产制造业MES系统源码

java项目级云MES源码&#xff08;制造执行系统) springboot vue-element-plus-admin生产制造业MES系统源码 MES系统通过信息传递对从订单下达到产品完成的整个生产过程进行优化管理。当工厂发生实时事件时&#xff0c;MES制造执行系统功能的发挥重点体现在及时做出反应、报告&…