当前位置: 首页 > news >正文

【Java 类】002-类、属性、方法、代码块

【Java 类】002-类、属性、方法、代码块

文章目录

  • 【Java 类】002-类、属性、方法、代码块
  • 一、类
    • 1、类与对象
    • 2、类的作用
    • 3、创建与使用类
      • 类结构
      • 创建类
      • 调用类
      • 运行结果
    • 4、Java 类的执行过程
    • 5、封装、继承、多态、抽象类、内部类、接口、枚举、记录、注解等
  • 二、属性
    • 1、概述
    • 2、类型
    • 3、定义属性
    • 4、修改与访问属性
    • 5、成员变量和局部变量的区别
    • 6、静态属性
  • 三、方法
    • 1、概述
    • 2、方法的内容
    • 3、定义方法
    • 4、调用方法
    • 5、静态方法、方法重载、方法重写
  • 四、代码块
    • 1、概述
    • 2、代码块顺序

一、类

1、类与对象

在面向对象编程中,类(Class)是一种用户定义的数据类型,用于描述对象的属性和方法。它是面向对象编程的基本概念之一,可以看做是一种模板或蓝图,用于创建对象

类定义了对象属性和方法,属性表示对象的特征或状态,方法表示对象的行为或功能。在 Java 中,类是一种引用类型,它定义了一组属性和方法,并且可以通过关键字 new 创建多个对象。

2、类的作用

Java 类是面向对象编程的基本单位,它的作用包括:

  1. 封装数据和行为:类可以将数据和行为封装在一起,形成一个独立的模块。封装可以隐藏对象的实现细节,提高代码的可维护性和安全性
  2. 继承:类可以通过继承现有类的属性和方法来扩展自己的功能。继承可以减少代码的重复,提高代码的可复用性和可维护性
  3. 多态:类可以通过多态来实现同一种行为具有不同的表现形式。多态可以提高代码的灵活性和扩展性
  4. 对象的创建和销毁:类是创建对象的模板,通过类可以创建多个对象。同时,类也可以定义对象的销毁方式,通过垃圾回收机制自动回收不再使用的对象。
  5. 数据类型扩展:Java 提供了基本数据类型,但是有时候需要使用自定义的数据类型,类可以用来定义自定义数据类型,扩展 Java数据 类型的能力。

3、创建与使用类

类结构

public class ClassName {// 类的成员变量// 类的构造方法// 类的成员方法// ...
}

创建类

package main;public class Person {// 成员变量private String name;private int age;// 在有带参的构造方法时,一个无参的构造方法是必不可少的public Person() {}// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 成员方法public void sayHello() {System.out.println("Hello, my name is " + name + ", I'm " + age + " years old.");}
}

调用类

package main;/*** @author zibo* @date 2023/3/5 12:35* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Main {public static void main(String[] args) {// 调用带参构造,创建对象Person person = new Person("zibo", 26);// 通过对象调用方法person.sayHello();}
}

运行结果

Hello, my name is zibo, I'm 26 years old.

4、Java 类的执行过程

Java 类的执行过程主要包括以下几个阶段:

  1. 加载(Loading):通过类加载器(ClassLoader)将类的字节码文件(.class 文件)加载到 JVM 内存中,生成一个对应的 Class 对象
  2. 验证(Verification):对字节码文件进行校验,以确保符合 JVM 规范,例如是否有不合法的指令或常量池中的常量引用不存在等。
  3. 准备(Preparation):为类的静态变量分配内存空间,并设置默认值(0、false、null 等)。
  4. 解析(Resolution):将类中的符号引用转化为直接引用,例如将方法调用转化为方法实际地址的映射
  5. 初始化(Initialization):对类进行初始化,包括静态变量的显式初始化和静态代码块的执行等。在初始化过程中,如果发现该类有父类,则先执行父类的初始化
  6. 使用(Usage):正式使用该类,例如创建对象、调用方法等。

需要注意的是,类的加载和初始化只会执行一次,即使创建多个对象也不会重新加载和初始化。而验证、准备和解析则可能会重复执行,例如在运行时通过反射机制获取某个类的信息时就会触发验证、准备和解析过程。在类加载过程中,还会根据一定的策略将类分为不同的类加载器(ClassLoader),以方便对不同类之间的依赖关系进行管理。

5、封装、继承、多态、抽象类、内部类、接口、枚举、记录、注解等

请查看本专栏内其他相关内容。

二、属性

1、概述

类的属性也被称为类的成员变量字段,它们用于存储对象的状态信息

2、类型

类的属性可以是以下类型之一:

  1. 基本数据类型:例如 int、double、boolean 等。
  2. 引用类型:例如字符串、数组、自定义类等。
  3. 特殊类型:例如枚举类型等。

3、定义属性

package main;/*** @author zibo* @date 2023/3/7 14:53* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Person {/*** 名字*/public String name;
}

4、修改与访问属性

package main;/*** @author zibo* @date 2023/3/5 12:55* @slogan 真正的大师永远怀着一颗学徒的心。——易大师*/
public class Main {public static void main(String[] args) {// 1. 创建一个Person对象Person person = new Person();// 2. 修改 Person 对象的 name 属性person.name = "zibo";// 3. 打印 Person 对象的 name 属性System.out.println(person.name);}
}

5、成员变量和局部变量的区别

  1. 定义位置不同:成员变量定义在中,而局部变量定义在方法或语句块中。
  2. 生命周期不同:成员变量的生命周期和对象相同,即当对象创建时,成员变量也会被创建,在对象销毁时,成员变量也会被销毁;而局部变量的生命周期只存在于方法或语句块的执行过程中,执行完后就会被销毁。
  3. 初始化方式不同:成员变量可以在定义时初始化,也可以在构造方法中初始化;而局部变量必须在定义时初始化,否则无法使用。
  4. 访问方式不同:成员变量可以通过对象访问,也可以通过类名访问(静态变量);而局部变量只能在所在的方法或语句块中使用,无法从外部访问。
  5. 作用域不同:成员变量的作用域是整个类,而局部变量的作用域仅限于所在的方法或语句块

6、静态属性

请查看本专栏内其他相关内容。

三、方法

1、概述

类的方法定义了可以对对象执行的操作。方法可以看作是类的行为或功能的具体实现。

2、方法的内容

Java 类的方法可以包括以下内容:

  1. 方法名:方法的名称,用于在程序中调用方法。
  2. 参数列表:方法接受的输入参数,可以是零个或多个
  3. 返回类型:方法的返回值类型,可以是任何 Java 数据类型,包括基本数据类型、对象类型和数组类型。
  4. 访问修饰符:控制方法在哪些位置可以被访问,包括 public、protected、private 和默认。
  5. 方法体:方法的具体实现代码。

3、定义方法

public class Calculator {// 将两个数字相加并返回结果public int add(int num1, int num2) {return num1 + num2;}
}

4、调用方法

System.out.println(new Calculator().add(100, 100)); // 200

5、静态方法、方法重载、方法重写

请查看本专栏内其他相关内容。

四、代码块

1、概述

Java 类中的代码块是指在类中使用大括号 {} 括起来的一段代码,它们可以是静态的或非静态的,并且可以分为多个不同类型。

  1. 静态代码块(Static Blocks):用 static { } 来定义,只在类加载时执行一次,且只能访问静态成员变量和方法。
  2. 实例初始化块(Instance Initialization Blocks):用 { } 来定义,每次创建新实例时都会执行,且在构造函数之前执行。
  3. 构造代码块(Constructor Blocks):用 { } 来定义,与构造函数一起构成了对象的构造过程,每次创建新实例时都会执行,且在构造函数之前执行。

使用代码块的好处是可以将多个方法中共同的部分提取出来,统一进行处理,从而提高代码的重用性和可维护性。比如在静态代码块中可以对静态成员变量进行初始化,或者对数据库连接进行初始化;在实例初始化块中可以对非静态成员变量进行初始化,或者执行一些必要的预处理操作;在构造代码块中可以对所有构造函数中共同的初始化操作进行封装,以避免重复代码。

2、代码块顺序

类被加载时(调用静态变量或静态方法)执行静态代码块;

第一次创建对象时:执行静态代码块——执行普通代码块——执行构造函数;

第二次及之后再创建对象时:执行普通代码块——执行构造函数。

相关文章:

【Java 类】002-类、属性、方法、代码块

【Java 类】002-类、属性、方法、代码块 文章目录【Java 类】002-类、属性、方法、代码块一、类1、类与对象2、类的作用3、创建与使用类类结构创建类调用类运行结果4、Java 类的执行过程5、封装、继承、多态、抽象类、内部类、接口、枚举、记录、注解等二、属性1、概述2、类型3…...

Ubuntu Linux 编译安装的基本步骤

文章目录1 基本步骤若报错: No such file or directory2 解压 tar.bz2文件参考:1 基本步骤 解压: tar -zxvf file.tar.gz 进入解压后的文件夹: cd file 源码编译安装 ./configure # ./configmakesudo make install 若报错&…...

day59反刍笔记

1.本地环境安装vue后,没有vue.js文件,只有vue.cjs.js文件, 引用后也无法正常使用,看npm install vue后的文件夹中没有vue.js文件_找不到vue.js_一枝风的博客-CSDN博客 老哥的博客后得到启发,将原本的命令由&#xff1…...

【阅读笔记】你不知道的Javascript--强制类型转换4

目录强制类型转换基本概念JSONboolean强转归纳其他知识点被诟病的安全使用隐式强转法则抽象关系比较语法表达式变动强制类型转换 基本概念 类型转换发生在静态类型语言的编译阶段; 强制类型转换则发生在动态类型语言的运行时(runtime) JSON…...

华为OD机试真题Python实现【有效子字符串】真题+解题思路+代码(20222023)

有效子字符串 题目 输入两个字符串S和L,都只包含小写字母, S长度 <= 100,L长度 <= 500000, 判断S是否是L的有效子字符串, 判定规则:S中的每个字符在L中都能找到(可以不连续) 且S在L中字符的前后顺序与S中顺序要保持一致 例如: S="ace"是L="abcd…...

上门按摩预约APP源码-东郊到家源码(开发,PHP,平台搭建)

一、什么是上门按摩预约APP源码&#xff1f; 上门按摩预约APP源码是一款家政服务类型的APP&#xff0c;可以帮忙用户在家就能享受按摩的服务。APP源码分两端&#xff0c;一端是用户端&#xff0c;另外一端是技师端。采用的技术&#xff0c;前端是安卓IOS&#xff0c;后端是PHP&…...

STL讲解——模拟实现vector

STL讲解——模拟实现vector vector深度剖析 在STL源码中&#xff0c;发现vector定义的并不是 start、size、capacity&#xff0c;而是start、finish、end_of_storage. 这样就可以得到size()和capacity()。 sizefinish-start capacityend_of_storage-start 扩容可能是本地扩容也…...

各种经典排序算法介绍及实现源码

一,冒泡排序(Bubble Sort) 排序算法是程序员必须了解和熟悉的一类算法,排序算法有很多种,基础的如:冒泡、插入、选择、快速、归并、计数、基数和桶排序等。 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不…...

历史大讲堂:这是真·图形化 苹果系统历史回顾(上)

众所周知&#xff0c;米国有个非常牛掰的公司叫苹果&#xff0c;想必大家对这个logo不陌生吧。 目前已发布的苹果产品有iPhone、iPad、iPod等等&#xff0c;简直花样繁多&#xff0c;而且各种功能很好用&#xff0c;我的手机就是一部苹果iPhone X。 等一下&#xff0c;似乎扯远…...

今天女神节,用python画个贺卡送给母亲吧

今天女神节&#xff0c;你给女神妈妈准备了什么祝福呢&#xff1f;如果还没有&#xff0c;那么画个贺卡送给她吧&#xff0c;在你眼里&#xff0c;她是一个什么样的人呢&#xff1f; 是"可爱"&#xff0c;“温柔”&#xff0c;“美丽”&#xff0c;“漂亮”&#xf…...

【编程基础之Python】11、Python中的表达式

【编程基础之Python】11、Python中的表达式Python中的表达式表达式与运算符算术表达式赋值表达式比较表达式逻辑表达式位运算表达式总结Python中的表达式 在Python中&#xff0c;表达式是由操作数、运算符和函数调用等组成的语法结构&#xff0c;可以进行各种数学运算、逻辑判…...

华为OD机试真题Python实现【乱序整数序列两数之和绝对值最小】真题+解题思路+代码(20222023)

乱序整数序列两数之和绝对值最小 题目 给定一个随机的整数数组(可能存在正整数和负整数)nums, 请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值 并返回这两个数(按从小到大返回)以及绝对值。 每种输入只会对应一个答案。但是,数组中同一个元素不能使用两…...

字符串转换整数 (atoi)(python)

链接&#xff1a; https://leetcode.cn/problems/string-to-integer-atoi 题目描述&#xff1a; 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法…...

洛谷 P1115 最大子段和

题目链接&#xff1a;P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给出一个长度为 n 的序列 a&#xff0c;选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数&#xff0c;表示序列的长度 n。 第二行有 n 个整数&#xff…...

【Linux】-- 权限和Shell运行原理

目录 Shell的运行原理 用户切换 su - / su sudo 权限 chmod chown chgrp 八进制方法修改文件属性 目录权限 粘滞位 umask 自定义默认权限 Shell的运行原理 广义上&#xff0c;Linux发行版 Linux内核 外壳程序 Linux 从广义上来理解它是一个操作系统 而从狭义上…...

C++各类设计模式及实现详解

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性&#xff1a;封装、继承、多态&#xff0c;真正领悟设计模式的精髓是可能一个漫长的过程&#xff0c;需要大量实践经验的积累。最近看设计模式的书&#xff0…...

【Linux】进程理解与学习(Ⅰ)

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程&#xff1f;进程是什么&#xff1f;我们打开任务管理器可以看到有…...

认识代码之前,请先认识你自己 |《编程人生》

这是我的湛庐课程《给技术人的职场突围课》 &#xff08;链接&#xff09; 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集&#xff0c;里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过&#xff0c;在这个书单课里&am…...

react学习笔记-5:react路由

react旧版本路由 旧版本的路由是按照组件的方式来写的 编写router/index.tsx文件 import App from "../App" import Home from "../views/Home" import About from "../views/About" import { BrowserRouter,Routes,Route } from "react…...

[Python图像处理] 使用高通滤波器实现同态滤波

使用高通滤波器实现同态滤波同态滤波基础实现同态滤波相关链接同态滤波基础 同态滤波是一种去除图像中乘性噪声的技术&#xff0c;常用于校正图像中的不均匀照明。根据图像形成的光照反射模型&#xff0c;图像 f(x,y)f(x,y)f(x,y) 可以由以下两个分量表征&#xff1a; 入射到…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...