面向对象【成员变量与局部变量、方法声明与作用】

news2024/11/19 23:17:48

封面

文章目录

  • 成员变量
  • 局部变量
    • 成员变量与局部变量的区别
  • 方法
    • 方法的作用
    • 方法的声明

成员变量

Java中的成员变量是指类中声明的变量,也称为实例变量或属性。它们与方法一样属于类的成员,不同之处在于,它们存储在对象(堆)中而不是栈中,并且每个对象都有自己的一组值。

成员变量可以用来描述一个对象的状态,例如人的年龄、学生的姓名等。它们可以具有public、private、protected和默认(即没有修饰符)四种访问权限。

在Java中,如果没有显式地初始化成员变量,则它们将自动地初始化为其类型的默认值,如int类型变量默认值为0,引用类型变量默认值为null。

public class Person {
    public String name; //public访问权限
    private int age; //private访问权限

    //构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    //成员方法
    public void sayHello() {
        System.out.println("My name is " + name + ", I'm " + age + " years old.");
    }
}

局部变量

Java中的局部变量是声明在代码块(比如方法、循环、分支语句等)内部的变量,它们只能在声明它们的代码块内使用。与成员变量不同的是,局部变量不属于对象,而是存储在栈中。

局部变量必须在使用之前进行初始化,否则编译器会报错。一般情况下,在代码块内部第一次赋值即可。

public void sayHello() {
    String name = "Tom"; //局部变量,必须初始化
    int age; //定义局部变量

    System.out.println("My name is " + name);

    if (someCondition) {
        age = 20; //给局部变量赋值
    } else {
        age = 30; //给局部变量赋值
    }

    System.out.println("I'm " + age + " years old.");
}

成员变量与局部变量的区别

成员变量和局部变量都是用于存储数据的变量,但它们有一些关键的区别

  1. 作用域:成员变量属于类,因此它们的作用域是整个类。而局部变量只存在于方法循环代码块中,并且只能在其声明的范围内访问。

  2. 生命周期:成员变量的生命周期与对象的生命周期相同。也就是说,只要对象存在,成员变量就一直存在。而局部变量只在其声明的代码块内存在,在该代码块执行完毕后就会消失。

  3. 可见性:成员变量可以有不同的可见性修饰符(public、protected、private等),这些修饰符控制着成员变量对其他类和对象的可见性。而局部变量只能在其所在的代码块内部访问。

  4. 默认值:当声明成员变量时,如果没有显式地对其进行初始化,则会赋予默认值(例如,整数类型的成员变量默认值为0)。而声明局部变量时,必须显式地进行初始化,否则编译器会报错。

  5. 存储位置:成员变量存储在堆内存中,而局部变量存储在栈内存中。

方法

方法(Method)是一种执行特定任务的代码块。它们是定义在类中的函数,可以被其他部分调用。Java中的方法包括两个主要组件:方法头方法体。方法头指定了方法的名称、参数和返回值类型。方法体是一个代码块,包含了要执行的具体操作。

方法的作用

方法在Java中具有以下主要作用:

  1. 提高代码的可读性和复用性
    方法可以将代码划分为更小、更具可读性的模块。这不仅使代码易于阅读和理解,也使代码易于维护和修改。此外,方法还可以被多次调用以完成相同或类似的任务,提高了代码的复用性。

  2. 封装和隐藏实现细节
    方法可以将代码逻辑封装在一起,隐藏实现细节。这样,其他部分只需要知道如何调用该方法,而不需要关心方法内部的实现细节。

  3. 实现程序的模块化设计
    Java中的方法可以根据功能进行划分,实现程序的模块化设计。每个方法可以专注于实现某个具体的功能,使整个程序结构清晰明了。

  4. 支持多态性
    Java中的方法支持多态性,即相同的方法名可以被不同的类实现,并且能够根据运行时对象的类型自动选择正确的方法。这种特性是面向对象编程的重要特点之一。

方法的声明

Java中的方法声明主要包括以下部分:

  1. 访问修饰符
    访问修饰符用于控制方法的可见性,包括public、private、protected和默认(不写任何访问修饰符)四种。

  2. 返回值类型
    返回值类型指定了方法返回的数据类型。如果方法不返回任何值,则返回类型为void。

  3. 方法名
    方法名是方法的标识符,用于在程序中调用该方法。

  4. 参数列表
    参数列表指定了方法接受的参数类型和参数名称。如果方法不需要任何参数,则参数列表为空。

  5. 方法体
    方法体是一段由花括号包裹的代码块,包含了要执行的具体操作。

Student类

package atuigu03.field_method;

public class Student {
    // 定义学生类,包含姓名、年龄和成绩三个属性
    private String name;
    private int age;
    private double score;

    // 构造方法,初始化学生对象
    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    // 获取学生姓名
    public String getName() {
        return name;
    }

    // 设置学生姓名
    public void setName(String name) {
        this.name = name;
    }

    // 获取学生年龄
    public int getAge() {
        return age;
    }

    // 设置学生年龄
    public void setAge(int age) {
        this.age = age;
    }

    // 获取学生成绩
    public double getScore() {
        return score;
    }

    // 设置学生成绩
    public void setScore(double score) {
        this.score = score;
    }

    // 打印学生信息
    public void printInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Score: " + score);
    }

    public void specialty(String name, String time, String Specialty) {
        System.out.println("姓名:" + name);
        System.out.println("练习时长:" + time);
        System.out.println("特长:" + Specialty);

    }
}

调用

package atuigu03.field_method;

public class StudentTest {
    public static void main(String[] args) {
        // 创建学生对象并初始化
        Student s1 = new Student("蔡徐坤", 30, 99.0);

        // 调用对象的方法
        System.out.println("set前:");
        s1.printInfo();

        s1.setScore(66.0);
        s1.setAge(35);

        System.out.println("set后:");
        s1.printInfo();

        s1.specialty("蔡徐坤", "2.5年", "唱跳rap篮球");
    }
}

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于灰色预测模型的负荷预测(matlab程序)

0.代码链接 基于灰色预测模型的负荷预测(matlab程序)资源-CSDN文库 1.简述 灰色预测是一种对含有不确定因素的系统进行预测的方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来…

python:并发编程(二十六)

前言 本文将和大家一起探讨python并发编程的实际项目:win图形界面应用(篇八,共八篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。 本文为python并…

ADAS(高级驾驶员辅助系统)

什么是 ADAS ADAS —— 高级驾驶员辅助系统,包含一系列硬件和软件组件,自动起到驾驶员的多项作用。目前,常见的车辆 ADAS 功能包括自适应巡航控制、盲点检测、变道检测(车道偏离警告系统)、自动车道跟随和自动紧急制动、泊车。 L0到L2称为AD…

测试用例详解(强,硬,牛)

目录: 测试用例价值与体系黑盒测试方法论-等价类黑盒测试方法论-边界值黑盒测试方法论-因果图黑盒测试方法论-判定表黑盒测试方法论-场景法测试用例基础概念测试用例设计与评审面试测试测试用例设计搜索功能测试用例设计 1.测试用例价值与体系 测试用例概念测试…

【MQTT】| 搭建——在云服务器上搭建MQTT服务器

系列文章目录 【MQTT】| 搭建——在云服务器上搭建MQTT服务 失败了也挺可爱,成功了就超帅。 文章目录 前言1. EMQX简介2. EMQX部署3. EMQX一些操作指令3.1 启动EMQX3.2 停止EMQX3.3 检查EMQX运行状态3.4 卸载EMQX 4. EMQX设置4.1 进入EMQX控制面板 5. EMQX测试5.1…

模型评估 (Model Assessment)

1.模型评估 (Model Assessment) 笔记来源于《白话机器学习的数学》 我们训练好模型后,要对知道这个模型到底好不好,定量描述这个模型好坏就是模型评估 把获取的全部训练数据分成两份:一份用于测试,一份用于训练。然后用前者来评估…

数据库实训报告3000字

数据库实训报告1 一、实习目的 认识实习是本科教学计划中非常重要的实践性教学环节,其目的是使学生了解和掌握电力生产知识、印证、巩固和丰富已学过的计算机专业课程内容,培养学生理论联系实际,提高其在生产实践中调查研究、观察问题、分析问…

银行账户管理系统

1. 目的与要求 1、目的: (1)熟练掌握 C语言的基本知识和技能: (2)掌握面向对象程序设计的基本思想和方法;(3)能够利用所学的面向对象基本知识和技能,解决简单应用的程序设计 2、基本要求:(1)利用面向对象的方法以及 C的编程思想来完成系统的设计;(2)在设计的过程中…

抽象工厂模式(Abstract Factory)

定义 抽象工厂是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。 前言 1. 问题 假设你正在开发一款家具商店模拟器。你的代码中包括一些类,用于表示: 一系列相关产品,例如椅子(Chai…

091基于深度学习的手写汉字数字识别含10多种模型

emo仓库和视频演示找091期: 银色子弹zg的个人空间-银色子弹zg个人主页-哔哩哔哩视频 效果展示图如下: 代码文件展示如下: 运行01数据集文本生成制作.py可以读取图片路径保存再txt文本中, 运行02train.py可以对txt文本中的图片路…

同程数科基于 Apache Doris 构建统一实时数仓,查询提速数十倍!

本文导读: 同程数科是同程集团旗下的旅游产业金融科技服务平台,为上下游企业和个人消费者提供数字金融科技服务。近年来,随着同程数科业务的不断拓展和用户量的增加,高效可靠的一站式数据中心建设已成为必不可少的需求。为帮助业…

团体程序设计天梯赛-练习集L2篇④

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

WPF 零基础入门笔记(1):WPF静态页面,布局+样式+触发器

文章目录 官方文档往期回顾零基础笔记项目实战(已完结) WPF项目创建为什么选net core版本 WPF 静态页面WPF 页面布局WPF样式Style样式行内样式行外样式如果是简单样式,可以这么写如果是复杂样式 WPF样式继承WPF触发器单条件触发器多条件触发 …

LLDP(链路层发现协议)详解及C/C++代码实现

LLDP(链路层发现协议)是一种IEEE标准协议(IEEE 802.1AB),它定义了封装在以太网帧中的消息,目的是通过默认情况下每30秒从每个端口定期重传一次,为设备提供一种向LAN(局域网&#xff…

20个Java编程技巧

1. 把字符串常量放在前面 通过把字符串常量放在比较函数equals()比较项的左侧来防止偶然的 NullPointerException 从来都不是一个坏主意,就像这样: 这是毫无疑问的,把一种表达式转换成另一种更好的表达式,并不会失去什么。只要我…

mysql锁机制及MVCC底层原理

一、锁介绍 按性能可分为乐观锁(适用于读多写少的情况下,如果是写多,导致过多cpu空转,影响性能)和悲观锁(适用于写多的情况)按数据库操作粒度可分为表锁、页锁、行锁按数据库操作类型可分为读锁…

UE4/5动画系列(1.模板制作)

目录 动画模板制作 同步模板组制作 有模板做什么都方便,所以这里我们做一个动画蓝图的模板(动物专用) 动画模板制作 第一步创建一个动画蓝图的模板 然后找到第三人称的模板,将其模板的蓝图改名: 在动画蓝图的模板里…

团体程序设计天梯赛-练习集L2篇②

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

首个跨云元数据KV存储Xline正式进入CNCF沙箱

2023年6月13日,云原生计算基金会(CNCF)宣布Xline正式被纳入CNCF沙箱(Sandbox)项目。Xline是由达坦科技(DatenLord)于2022年年底推出的开源项目,是一个用Rust语言写就的,用于元数据管…

hello算法笔记之图

一、图的基础知识 图是一种非线性数据结构,由「顶点 Vertex」和「边 Edge」组成。 1.图的类型: 根据边是否具有方向可以分为有向图,无向图 根据所有顶点是否连通可以分为连通图(对于连通图,从某个顶点出发&#xf…