Java中变量详解(类的五成员之一:变量)

2023-11-09

目录

友情提醒

概述:Java中的成员包含五部分

第一部分:变量

(1)Java中的变量分类

(2)成员变量和局部变量的位置区别

(3)Java中成员变量作用域/Java权限修饰符

(4)Java中成员变量和成员属性的区别

(5)成员变量初始化方式

(6)成员变量初始化顺序


友情提醒

先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。

概述:Java类的五个成员之一:变量

Java的基本单位是类,类中包含五个部分这是第一部分变量。

(1)变量

(2)方法

(3)构造器

(4)初始化块

(5)内部类

第一部分:变量

(1)Java中的变量分类

①Java中的变量根据数据类型分为几类?

两类:Java中的变量根据数据类型分为两类:基本数据类型变量和引用数据类型变量。

②Java中的变量定义位置?

两类:变量根据定义位置的不同分为成员变量和局部变量。成员变量直接定义在类中局部变量定义在方法体中或者语句块中。

③Java成员变量分为哪两种?Java成员变量和类变量的区别是什么? 

成员变量包含类变量和实例变量。

实例变量:成员变量也称为实例变量,只能通过对象名调用。这个变量属于对象。存储在堆内存。
类变量(静态变量):静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用,这个变量属于类。存储在方法区栈中的静态区。

(2)成员变量和局部变量的位置区别

①成员变量直接定义在类中,整个类可以使用。

class Ver_1
{
    //成员变量,定义在类里
    int a = 10;

 
}

②局部变量定义在方法块中,必须赋一个初始值,只有在方法中才可以使用,出了方法就不可以使用。

public void test(){
        //局部变量
        int a = 100;
    }

③内存位置不一样。成员变量位于堆当中。局部变量位于栈当中。

④生命周期不同。成员变量随着对象创建而诞生,随着对象被回收消失。局部变量随着方法进栈诞生,随着方法出栈消失。

(3)Java中成员变量作用域/Java权限修饰符

对于类的成员(包括成员变量和成员方法)而言,其能否被其他类所访问,取决于该成员的修饰词。

①其中public成员变量可以被任何类访问和使用。可以通过类名.成员变量名的方式来访问public成员变量。 

②protected成员变量只能在类内部和子类中使用。在子类中,可以通过super关键字来访问父类的protected成员变量。

③(如图)

④private成员变量只能在类内部使用,要访问private成员变量必须通过类提供的公共方法来访问。

(4)Java中成员变量和成员属性的区别

①属性的官方定义:属性是指get或者set方法名,去掉get或者set后,把剩余的部分首字母改为小写后,即为这个类的属性。

②图中紫色P为类的属性,黄色f为成员变量。从图中可以看出age是成员变量,size和name为类的属性,不是类的成员变量。

(5)成员变量初始化方式

①直接无值初始化,会给一个默认值

class Ver_1
{
   
    //成员变量初始化时不赋值会有默认值
    private boolean flag;   // false
	private int _int;       // 0

	private char _char;     //'0000'
	
	private float _float;   //Default value: 0.0
	private long _long;     //Default value: 0
	private double _double; //Default value: 0.0

	//引用类型默认值是 null
}

②直接赋值初始化

class Ver_1
{
    //成员变量,定义在类里
    int a = 10;

}

③构造方法初始化,在进入构造函数之前,默认初始化num为0,进入构造函数后赋值为20。

public class Ver_1{
  int num ;  
  public Ver_1(){
    num = 20;
  }
}

(6)成员变量初始化顺序

①非静态成员变量,在构造函数之前初始化,并且按定义顺序初始化。

②静态代码块和静态成员变量执行顺序和代码中出现的顺序有关。

③静态成员变量优先于非静态成员变量,静态初始化只在Class对象第一次创建时发生一次。下面搬运了一段代码举例:

public class StaticInitialization {
	public static void main(String[] args) {
		System.out.println("Creating new Cupboard() in main");
		new Cupboard();
		System.out.println("Creating new Cupboard() in main");
		new Cupboard();
		t2.f2(1);
		t3.f3(1);
	}
	static Table t2 = new Table(); 
	static Cupboard t3 = new Cupboard(); 
}
class Bowl{
	Bowl(int i){
		System.out.println("Bowl"+i);
	}
	void f(int i){
		System.out.println("f"+i);
	}
}
class Table{
	static Bowl b1 = new Bowl(1); 
	Table(){
		System.out.println("Table()");
		b2.f(1);
	}
	void f2(int i){
		System.out.println("f2("+i+")");
	}
	static Bowl b2 = new Bowl(2); 	
}
class Cupboard{
	Bowl b3 = new Bowl(3);
	static Bowl b4 = new Bowl(4); 
	Cupboard(){
		System.out.println("Cupboard()");
		b4.f(2);
	}
	void f3(int i){
		System.out.println("f3("+i+")");
	}
	static Bowl b5 = new Bowl(5); 
}

输出结果如下:

Bowl1
Bowl2
Table()
f1
Bowl4
Bowl5
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
Creating new Cupboard() in main
Bowl3
Cupboard()
f2
f2(1)
f3(1)

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

Java中变量详解(类的五成员之一:变量) 的相关文章

  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何提取文件 jre-9/lib/modules?

    In JRE 9 lib目录 至少在 Windows 上 有一个名为modules其大小约为107 MB 是否可以提取该文件或在其中列出 java 模块 我可以看到一个名为jmod可以在jdk 9 bin jmod exe 但那是为了阅读
  • Java 读取大文本文件时出现 OutOfMemoryError

    我是 Java 新手 正在读取非常大的文件 需要一些帮助来理解问题并解决它 我们有一些遗留代码 必须对其进行优化才能正常运行 文件大小仅在 10mb 到 10gb 之间变化 只有当文件开始大小超过 800mb 时才会出现启动问题 Input
  • GET 请求的 Spring 注解

    这两种spring GET方法有什么区别呢 哪一种是首选方法 Component Scope request Path public class TestComponent GET Path hello public String prin
  • JavaFX 2.0 FXML 子窗口

    经过多次搜索我发现了这个问题如何创建 javafx 2 0 应用程序 MDI https stackoverflow com questions 10915388 how to create a javafx 2 0 application
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • MongoDB java 驱动程序 3.0 在身份验证时无法捕获异常

    我超级卡住o 0 在尝试通过 Java 驱动程序进行身份验证时 存在捕获异常的问题 正如你可能会看到的Throwable类不工作 private MongoClient mongoClient private MongoDatabase m
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb

随机推荐

  • webpack loader和plugin编写

    1 基础回顾 首先我们先回顾一下webpack常见配置 因为后面会用到 所以简单介绍一下 1 1 webpack常见配置 入口文件 entry app src js index js 输出文件 output filename name bu
  • msvcp140.dll是什么?怎么解决电脑提示msvcp140.dll丢失的问题?(分享解决方法)

    msvcp140 dll是动态链接库文件 是一种不可执行的二进制程序文件 允许程序共享执行特殊任务所需要的代码和其他资源 程序可根据DLL文件中的指令打开 启用 查询 禁用和关闭驱动程序 很多小伙伴在使用电脑软件的时候 有一些问题会搞不明白
  • crontab中执行多条命令

    在使用crontab中执行相关命令的时候存在如下情况 可能需要先更换工作目录然后再执行相关命令 可以在crontab中按照如下格式添加定时任务 00 cd opt task python application py 通过 连接符来执行多条
  • 记录错误 pom文件中<project标签报红

    1 找到本地仓库删除刚刚下载的对应依赖 pom中删除再撤销 若红线依然存在 试试第二步 一般鼠标移到红线上都会有提示 有可能是没有版本号导致的 然后看看是哪一个依赖错了 去本地仓库删了 再重新下载 2 将自己seeting文件中的阿里云镜像
  • WebGL入门前三节(附源码和学习建议)

    在正式进入webgl之前 我想有必要简单了解一下渲染管线 毕竟它贯穿webgl学习的整个过程 渲染管线流程图 除此之外 需简单了解一下webgl着色器简单语法 向量与矩阵 常见内置变量 常见数据类型 常见修饰符 vec3 gl PointS
  • 基于opencv实现人脸识别及签到系统

    首先需要安装opencv dlib face recongnition库 opencv安装起来比较简单 其他两个库的安装请看关于face recognition的安装最简单方式 时间和我都在往前走的博客 CSDN博客 这里代码可以直接用 不
  • UTC、RTC、UNIX时间戳、localtime 理解

    UTC RTC UNIX时间戳 localtime 理解 UTC 时间 UTC是世界协调时间时 UTC 是现在全球通用的时间标准 全球各地都同意将各自的时间进行同步协调 UTC 时间是经过平均太阳时 以格林威治时间GMT为准 地轴运动修正后
  • 集合框架( ArrayList LinkedList)

    集合框架 存储多个数据 对象 使用数组 数组 存储相同数据类型一段连续的空间 限制 定长 添加 删除 统计比较麻烦 存储的是单列的值 学号 学生信息 订单号 订单详情 中文名称 英文名称 集合框架 一些接口和类 java util包 Col
  • 泛型反射,如何用泛型反射获得当前类泛型的具体类型

    有时候我们需要知道当前类所传入的泛型的具体类型而进行下一步操作 这是我们可以使用泛型反射 1 假如Dao层的接口有很多共同的方法 增删改查 我们可以对他进行提取到一个公共接口IBaseDao
  • 地质灾害监测的主要内容

    地质灾害就地质环境或地质体变化的速度而言 可分为突发性地质灾害与缓变性地质灾害两大类 其中崩塌 滑坡 泥石流是地质灾害的主要表现形式 我国是地质灾害多发的国家 全国共有较大型崩塌3000多处 滑坡2000多处 泥石流2000多处 中小规模的
  • 通过JavaAPI访问HBase

    先开始创建表 create emp001 member id address info 放入数据 put emp001 Rain id 31 put emp001 Rain info birthday 1990 05 01 put emp0
  • 九、1~8文章的阶段案例

    一 案例 现在我们来做一个相对综合一点的练习 书籍购物车 案例说明 1 在界面上以表格的形式 显示一些书籍的数据 2 在底部显示书籍的总价格 3 点击 或者 可以增加或减少书籍数量 如果为1 那么不能继续 4 点击移除按钮 可以将书籍移除
  • 最大权值闭合子图的证明详解

    前面定义部分转自这篇博客 网络流 最小割求最大权闭合子图 定义 有一个有向图 每一个点都有一个权值 可以为正或负或0 选择一个权值和最大的子图 使得每个点的后继都在子图里面 这个子图就叫最大权闭合子图 能选的子图有 4 3 4 2 4 1
  • CocosCreator ios 使用sdl库找不到arm64指令集

    关于sdl如何打包成ios库 android库的问题 之后会有相关文章介绍 现在先说一下CocosCreator在使用xcode运行过程中 会报的一个错 Undefined symbols for architecture arm64的错误
  • Android墓碑以及ANR跟踪文件路径

    ANR data anr 墓碑 data tombstones
  • Hadoop-3.2.3集群搭建

    Hadoop 3 2 3集群搭建 一 准备工作 准备三台最小化安装的Linux服务器 单节点伪集群一台虚拟机即可 hdfs配置副本数设置为1 worker只有一个 ipaddress hostname 192 168 116 10 hado
  • 华为2288H-V5 组RAID安装系统(描述安装系统)

    先说下兼容性我这里是bios是最新的19版 和17版有些许差异 windows方面不支持windows2012以下的版本 2008R2再见 linux方面支持常用的linux系统如红帽6 9 6 10 7 4以上系统 7 0 7 3这些不支
  • k8s与log--利用fluent bit收集k8s日志

    前言 收集日志的组件多不胜数 有ELK久负盛名组合中的logstash 也有EFK组合中的filebeat 更有cncf新贵fluentd 另外还有大数据领域使用比较多的flume 本次主要说另外一种 和fluentd一脉相承的fluent
  • 如何更新R

    更新R版本 1 直接安装install packages installr 然后 library installr 再updateR 2 把原来的R删掉 再到官网下载 The R Project for Statistical Comput
  • Java中变量详解(类的五成员之一:变量)

    目录 友情提醒 概述 Java中的成员包含五部分 第一部分 变量 1 Java中的变量分类 2 成员变量和局部变量的位置区别 3 Java中成员变量作用域 Java权限修饰符 4 Java中成员变量和成员属性的区别 5 成员变量初始化方式