java基础:成员变量与局部变量

2023-11-07

java中的变量

在java语言中,根据定义变量的位置不同,可以将变量分为两大类,一类是成员变量,一类是局部变量,由于二者之间存在很大的区别,所以在此介绍

1.成员变量

在类中定义的变量,分为类变量和实例变量两种,在定义类变量的时候,没有static的为实例变量,有static的为类变量。

1-1:实例变量

public  class people{
//实例变量
private String name;
private int age;

}

可以由实例调用(实例.实例变量),它从该类的实例创建时开始存在,直到系统完全销毁这个实例,实例变量的作用域和对应实例的生存范围相同

1-2:类变量(由static修饰)

从该类的准备阶段开始存在,直到系统完全销毁整个类,类变量的作用域和这个类的生存范围相同

public  class people{
//全局变量
private String name;
private int age;
//类变量
private static String sex;
}

 

1-3:比较

有无static修饰

类变量的作用域比实例变量的作用域更大

实例同样可以访问类变量(因为类变量被整个类共享),但是类不能访问实例变量

 

2.局部变量

2-1:形参

在定义方法签名的时候定义的变量,在整个方法内都有效

//name为形参
public void getName(String mName){
    this.name=mName;
}

2-2:方法局部变量

在方法体中定义的变量,作用域是从定义该变量的地方开始 ,直到方法结束

public int addNumber(int num1,int num2){
    //result为方法局部变量
    int result;
    result=num1+num2;
    return result;
}

2-3:代码块局部变量

在代码块中定义的局部变量

public static void main(String[]args){
    //代码块
{
    //代码块局部变量
    int a=5;
    System.out.println(a);
}
}

2-4:注意事项

java中允许形参成员变量同名,如果在方法中同名,则局部变量会覆盖成员变量的值,如果需要在方法中引用被覆盖的成员变量,可以使用this(对于实例变量)或者类名作为调用者来限定访问成员变量

//
public class People{
    private String name;
    public void getName(String name){
    this.name=mame;
}
}

3.成员变量的初始化和运行机制

举个栗子:


class Person{
public String name;
public static int eyeNum;
}


//创建第一个对象
Person p1=new Person();
//创建第二个对象
Person p2=new Person();

//开始赋值
p1.name="a1";
p2.name="a2";

p1.eyeNum=2;
p2.eyeNum=3;

分析一下上述代码在内存中的工作情况:

首先,当程序第一次执行 Person p1=new Person();时。加载并且初始化该Person类,然后开始为它分配空间(堆中分配空间),并且指定该类属性默认的初始值,同理p2。

然后,接着在栈中创建引用对象,给堆内存中的属性(name,eyeNum)进行赋值

注:由于eyeNum被static修饰,所以为单独空间(被整个类所共享,而不属于某个对象)

 

4.局部变量的运行机制

4-1:局部变量需要经过显示初始化后才可以使用,在定义局部变量之后,系统没有给变量分配空间,而是等到程序给该变量赋初值时,系统才会给局部变量分配内存,并且把初始值放在内存中

4-2:局部变量不属于任何类和对象,所以它保存在所在方法的栈内存中,局部变量无需系统进行回收,一旦方法或者代码块结束,自动进行回收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java基础:成员变量与局部变量 的相关文章

  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • JVM工具-jstack

    jstack 打印线程堆栈信息 支持支持本地java进程 core文件以及远程java进程 命令格式 jstack options pid jstack options executable core jstack options serv
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • 5、面向对象的设计思想

    一 面向对象设计思想 1 1 面向过程的设计思想与面向对象的设计思想 例如 我要去新疆 面向过程 我开车 我挂挡 我踩油门 我过河北 我过陕西 面向对象 我命令车去新疆 车怎么去不关我事 信息封装在这这个类的内部 我不用去了解车整个开动的过
  • java中的file.encoding属性到底由什么决定?

    首先先上一段代码 public class PropertiesTest public static void main String args System out println file encoding System getProp
  • java数组学习

    2021 2 2 数组 一维数组的使用 1 一维数组的声明和初始化 2 如何调用数组的指定位置的元素 3 如何获取数组的长度 4 如何遍历数组 5 数组元素的默认初始化值 6 数组的内存解析 package day01 import jav
  • javaSE进阶1之static用法

    JavaSE进阶 静态关键字 static static关键字的作用 成员变量分类 静态成员变量 实例成员变量 static修饰成员变量内存原理 static 修饰成员方法的基本用法 成员方法的分类 static修饰成员方法内存原理 sta
  • ThreadLocal学习

    1 threadLocal图解 java lang ThreadLocal类实现了线程的本地存储 ThreadLocal的内部实现 ThreadLocal的内部实现包括一个类似HashMap的对象 这里称之ThreadLocalMap Th
  • 一文彻底弄懂零拷贝原理

    零拷贝 零拷贝 Zero Copy 是一种 I O 操作优化技术 可以快速高效地将数据从文件系统移动到网络接口 而不需要将其从内核空间复制到用户空间 其在 FTP 或者 HTTP 等协议中可以显著地提升性能 但是需要注意的是 并不是所有的操
  • 进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)

    目录 前言 一 十进制 n进制 进制转换详解 1 先说说什么是进制 2 二进制介绍 3 十进制 n进制 进制转换详解 重点 十进制 gt n进制 2 8 16 n进制 2 8 16 gt 十进制 非十进制间的互相转化 二 原码 反码 移码
  • JAVA,异常

    异常概念 通常大家认为异常就是错误 但这个错误有很多种 1 语法错误 2 JVM虚拟机错误 3 平台错误 4 程序运行错误 平台或者资源或者逻辑 数值等错误 常见的异常 1 java lang NullPointerException 空指
  • 《编写高质量代码:改善Java程序的151个建议》读书笔记

    编写高质量代码 改善Java程序的151个建议 秦小波 67个笔记 前言 本书附带有大量的源码 下载地址见华章网站www hzbook com 建议11 养成良好习惯 显式声明UID SerialVersionUID 也叫做流标识符 Str
  • 重试机制的实现(4m,10m,10m,1h,2h,6h,15h)

    项目场景 由于我们现在所做的项目有有很多的外放接口供代理商调用 但是有些接口的响应并不是实时返回的 此时我们就需要使用回调接口的方式 将信息响应给代理商 在这期间可能会出网络不稳定等其他情况 导致回调接口调用失败 所以需要特定的回调重试机制
  • 对接百度api的工具类:Base64Util,FileUtil,HttpUtil

    对接百度api的工具类 Base64Util FileUtil HttpUtil package com baidu ai aip utils Base64 工具类 public class Base64Util private stati
  • jeecgboot问题解决方案

    常见问题Q A JEECG老版在线文档 点击进入 1 后台访问提示token错误 报错截图 解决方案 JeecgBoot后台的所有请求访问 增加了token机制 所以不能直接访问后台 而需要通过前台登录才能访问 默认前台访问地址 http
  • JAVA--GUI(2)--布局

    布局 为了更好适应不同平台而引入的概念 Java的布局管理器是一个实现了LayoutManager接口的实例 用户无法设置setLocation 这些方法 如果想自己设置则需要取消布局管理器 采用布局管理器 边界布局 顺序布局 网格布局 卡
  • Java对象的快速复制的几种方式

    浅拷贝 深度复制 BeanUtils copyProperties 对象的克隆是指创建一个新的对象 且新的对象的状态与原始对象的状态相同 当对克隆的新对象进行修改时 不会影响原始对象的状态 注释 clone 是object类的protect
  • 多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件 支持暂停 取消 断点续传 多线程同时下载文件即 在同一时间内通过多个线程对同一个请求地址发起多个请求 将需要下载的数据分割成多个部分 同时下载 每个线程只负责下载其中的一部分 最后将每一个线程下载的部分组装起来即可 涉及的知
  • 关于svn如何上传一个完整的项目

    注意 请一定要按照该步骤进行操作 请上传新项目时将项目名称进行规范命名 例如原始文件是arrange v2 将此项目需要注入新的医院 则命名为 arrange 某医院名称 门诊或者医技或者药房 v2 重新命名文件夹名称快捷键 F12 一 先
  • java连接oracle出现ORA-12505错误

    问题 sqlplus可以连接 但java连接报错 ORA 12505 ORA 12505 TNS listener does not currently know of SID given in connect descr 解析 原因 数据

随机推荐

  • 【状态估计】基于卡尔曼滤波器和扩展卡尔曼滤波器用于 INS/GNSS 导航、目标跟踪和地形参考导航研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 算例1 2 2 算例2 2 3 算例3 3 参考文献 4 Matlab代码及数据 1
  • 前端Vue框架

    封装了HTML CSS JS的代码 按需搭建 特点 是一个轻量级的前端框架 双向绑定 数据动态更新 是一个渐进式的框架 其核心是数据驱动 组件化前端开发 Vue关注的 操作的是数据 第一步 需要将vue js文件导入到你的工程中 并把文件引
  • Column 'id' in where clause is ambiguous

    使用mysql数据库进行左右连接查询的时候出现错误提示 Column id in where clause is ambiguous 这个错误in where clause is ambiguous多半是因为多表查询的时候几个表中同时出现了
  • 【C#】《三子棋》

    使用 数组 函数 循环 实现一个超级简单的三子棋 总共200行代码 先来看看成果 运行程序 显示出菜单 选择1 开始游戏 玩家先 输入坐标 如 1 1 为电脑 为玩家 玩家胜利 按任意键继续 返回菜单 首先分别创建一个头文件和两个源文件 g
  • NeRF与三维重建专栏(一)领域背景、难点与数据集介绍

    前言 关于该系列专栏 主要介绍NeRF在三维重建中的应用 这里我们特指MVS multi view stereo 也即输入带位姿的图片 输出三维结构例如点云 mesh等 并且后面的工作也都是围绕MVS with NeRF讨论的 虽然也有wi
  • Spark 总结项目一---报错:bigger than spark.driver.maxResultSize

    七 spark集群报错 bigger than spark driver maxResultSize 难点 报错代码 20 09 15 15 21 32 ERROR scheduler TaskSetManager Total size o
  • Android Small插件化框架--启动插件Activity源码解析(下)

    转自 http m blog csdn net article details id 53158432 参考博文 http www tuicool com articles EjEJNrJ http m w2bc com article 1
  • 四、基础数据结构和算法:简单排序算法

    4 简单排序算法 4 1 冒泡排序 4 1 1 步骤 方式1 首先实现一趟冒泡排序 单趟冒泡排序将数组内最大值放到arr n 1 的位置 void bubble int arr int n for int i 0 i lt n 1 i if
  • 第5章 K8s基础篇-基本概念

    01 master节点 举个栗子 你启动3个nginx 副本 此时你想扩容至5个 输入完对应命令后 kube apiserver会通通知cm cm实施具体的容器扩缩容操作 02 Node节点 查看kube proxy工作模式 iptable
  • 如何用matplotlib绘制柱状图,并显示超出坐标范围的数据

    最近在处理数据 为了方便展示 需要绘制柱状图进行可视化 数据类似对数正态分布 即数据值越接近均值 数据越多 反之距离均值越远 数据量越少 形式类似于下图 可以看到 大部分数据落在0 10以内 大于10的部分我们不太关心 import num
  • linux下获取本机IPv6地址、前缀、网关

    获取本机IPv6信息命令 cat proc net if inet6 root IT PC 135 home user1 cat proc net if inet6 fe80000000000000922b34fffe4e70f4 02 4
  • libmodbus学习(一)之Modbus RTU-master

    一 Modbus 协议 Modbus簇主要有三种协议 Modbus RTU Modbus ASCII Modbus TCP 工控行业通常的设备组网看 三者应用的范围如下 三者模型区别如下 如上图所示 串行传输的物理层是RS 485或RS 2
  • datagrid传参_12. ajax、datagrid请求传参实例

    实例1 var data data orgRoleCode orgRoleCode data orgRoleName orgRoleName data containRoleIds containRoleIds data remark re
  • 1-问过 chatgpt 的问题(天马行空想问什么问什么)

    这里写目录标题 一 复数的极坐标形式是什么 如何求它的相位角 二 信号分解方法 2 1 了解 Fourier decomposition method 方法吗 具体解释一下它的原理 并给出一些参考文献 2 2 我说的FDM算法是出自 The
  • Unity3D项目程序加密——对dll进行混淆

    这里假设我们在Unity3D里面写的代码抽象成这样一个Test类 里面包含了公开和私有的变量 有自带的Start方法 Update方法和OnGUI方法 还有public private和protected方法 虽然说用抽象类代表了项目里面实
  • MySQL导入与导出.sql文件实操

    你是否对获得MySQL导入与导出 sql文件的实际操作感到无语 如果是这样子的话 此文将会给你相应的解决方案 以下的文章主要是介绍获得MySQL导入与导出 sql文件 的方案 以下就是相关内容的具体描述 一 MySQL的命令行模式的设置 桌
  • c++基础

    C 浅谈 闲暇之际 一直想把自己那些零碎的知识给连贯起来 形成一个体系 所以才决定写点东西来整理下最近半年来的知识点 我想把自己的知识输出才是最高效的学习方法 本博客讲结合我自己本人的实际工作经验 进行浅谈 与诸君分享 共同进步 由于能力有
  • idea java 阿里巴巴_AS 阿里巴巴Java开发规约 CheckStyle-IDEA

    Alibaba Java Coding Guidelines 简介 Alibaba Java Coding Guidelines 是阿里巴巴发布的基于 IDEA 的 Java 开发规约扫描插件 经过247天的持续研发 阿里巴巴于10月14日
  • Jmeter使用教程

    一 Jmeter介绍 二 Jmeter安装教程 1 下载地址 安装之前首先配置Java环境变量 Apache JMeter Download Apache JMeter 根据自己电脑系统来选择合适的安装包即可 2 环境变量配置 配置Jmet
  • java基础:成员变量与局部变量

    java中的变量 在java语言中 根据定义变量的位置不同 可以将变量分为两大类 一类是成员变量 一类是局部变量 由于二者之间存在很大的区别 所以在此介绍 1 成员变量 在类中定义的变量 分为类变量和实例变量两种 在定义类变量的时候 没有s