Java变量详解


这里写目录标题

  • 第一章、Java中的变量分类
    • 1.1)变量分类
    • 1.2)成员变量分类
    • 1.3)成员变量和局部变量的区别
  • 第二章、成员变量详解
    • 2.1)成员变量作用域/权限修饰符
    • 2.2)成员变量和成员属性的区别
    • 2.3)成员变量初始化方式
    • 2.4)成员变量初始化顺序

第一章、Java中的变量分类

在这里插入图片描述

​​​概述:Java类的五个成员之一:变量
Java的基本单位是类,类中包含五个部分:变量、方法、构造器、初始化块、内部类

1.1)变量分类

①变量根据数据类型分类
两类:Java中的变量根据数据类型分为两类:基本数据类型变量和引用数据类型变量。
1、基本数据类型变量:基本数据类型是Java语言内置的数据类型,用于存储简单的数值。基本数据类型包括整型、浮点型、字符型和布尔型。

public class PrimitiveExample {public static void main(String[] args) {int num = 10; // 整型变量double salary = 1000.50; // 浮点型变量char grade = 'A'; // 字符型变量boolean isStudent = true; // 布尔型变量System.out.println("Number: " + num);System.out.println("Salary: " + salary);System.out.println("Grade: " + grade);System.out.println("Is student: " + isStudent);}
}

2、引用数据类型变量:引用数据类型是指存储对象引用的变量,而不是对象本身。引用数据类型包括类、接口、数组等。

public class ReferenceExample {public static void main(String[] args) {String str = "Hello, Java!"; // 字符串对象引用int[] numbers = {1, 2, 3, 4, 5}; // 整型数组对象引用System.out.println("String: " + str);System.out.print("Numbers: ");for (int num : numbers) {System.out.print(num + " ");}}
}

②变量根据变量定义位置分类
两类:变量根据定义位置的不同分为全局变量(成员变量)和局部变量。

1、全局变量(也称为成员变量)是在类中声明的变量,其作用域为整个类。全局变量可以是实例变量(非静态变量)或类变量(静态变量)。

2、局部变量:在方法、构造函数或代码块内部声明的变量,其作用域仅限于声明它的方法、构造函数或代码块。局部变量在方法、构造函数或代码块执行时创建,执行结束时销毁。

public class Example {// 全局变量(实例变量)String globalVar = "This is a global variable";public void exampleMethod() {// 局部变量int localVar = 10;System.out.println("Local variable: " + localVar);System.out.println("Global variable: " + globalVar);}public static void main(String[] args) {Example obj = new Example();obj.exampleMethod();System.out.println(obj.globalVar);}
}

1.2)成员变量分类

两类:成员变量分为类变量和实例变量。

Java成员变量和类变量的区别:
实例变量(非静态变量):只能通过对象名调用(通过对象实例访问)。实例变量是属于类的每个对象实例的变量,存储在堆内存。 每个对象都有自己的一组实例变量副本,它们在对象创建时被初始化。实例变量可以。

public class Person {String name; // 实例变量int age; // 实例变量public static void main(String[] args) {Person person1 = new Person();person1.name = "Alice";person1.age = 25;Person person2 = new Person();person2.name = "Bob";person2.age = 30;}
}

类变量(静态变量):静态变量也称为类变量,可以直接通过类名调用。也可以通过对象名调用,这个变量属于类,存储在方法区栈中的静态区。静态变量只有一个副本,会被所有类的实例共享。可以直接通过类名访问静态变量,而不需要创建对象。

static int staticVar; // 静态变量,只会初始化一次

1.3)成员变量和局部变量的区别

①成员变量直接定义在类中,整个类可以使用。
②局部变量定义在方法块中,必须赋一个初始值,只有在方法中才可以使
③内存位置不一样。成员变量位于堆当中。局部变量位于栈当中。
④生命周期不同。成员变量随着对象创建而诞生,随着对象被回收消失。局部变量随着方法进栈诞生,随着方法出栈消失。

第二章、成员变量详解

2.1)成员变量作用域/权限修饰符

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

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

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

③空着不写:同类中,同包中

④private成员变量只能在类内部使用,要访问private成员变量必须通过类提供的公共方法来访问。
在这里插入图片描述

2.2)成员变量和成员属性的区别

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

②图中紫色P为类的属性,黄色f为成员变量。从图中可以看出age是成员变量,size和name为类的属性,不是类的成员变量。
在这里插入图片描述

2.3)成员变量初始化方式

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

class Ver_1
{//成员变量初始化时不赋值会有默认值private boolean flag;   // falseprivate int _int;       // 0private char _char;     //'0000'private float _float;   //Default value: 0.0private long _long;     //Default value: 0private 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;}
}

2.4)成员变量初始化顺序

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

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

③静态成员变量优先于非静态成员变量,静态初始化只在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)

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

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

相关文章

为什么 GraphQL 是构建微服务的更好选择

关于使用REST还是GraphQL来构建微服务哪个更好,一直存在争论。这两种技术都有其支持者和批评者,但当涉及微服务架构的特定需求时,GraphQL 成为明显的领先者。原因如下。 了解 RESTful 的关注点 虽然 REST 多年来一直是首选 API 风格&#x…

蓝桥杯 历届真题 时间显示【第十二届】【省赛】【C组】

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s #include<bits/stdc.h> #define int long long using namespace std; const int N 1e510; int n,m,t,d; int a[2][N],b[N]; //…

数据库关系模式三元及以上分解无损连接判断(表格法)

例题 1.首先构造初始表&#xff0c;如下表所示。 A B C D E ABC a1 a2 a3 b14 b15 CD b21 b22 a3 a4 b15 DE b31 b32 b33 a4 a5 2.遍历函数依赖&#xff0c;对AB→C&#xff0c;因各元组的第一、二列没有相同的分量&#xff0c;所以表不改变。 3.由C→D…

chabot项目介绍

项目介绍 整体的目录如下所示&#xff1a; 上述的项目结构中出了model是必须的外&#xff0c;其他的都可以根据训练的代码参数传入进行调整&#xff0c;有些不需要一定存在data train.pkl:对原始训练语料进行tokenize之后的文件,存储一个list对象&#xff0c;list的每条数据表…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

【java基础-高级篇十】、注解

自定义目录 一、什么是注解二、常见的注解示例三、自定义 annotation四、JDK 中的元注解五、利用反射获取注解信息六、jdk8之后注解的新特性1、可重复注解2、类型注解 一、什么是注解 加在包,类, 构造器, 方法, 成员变量, 参数, 局部变量声明上面的特殊标记就称为注解未来的开…

力扣2- 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

vmware和ubuntu的问题与解决

1.问题与对策 最近使用vmware安装ubuntu16和ubuntu20&#xff0c;遇到了挺多的问题&#xff0c;如下 ubuntu在用过多次后&#xff0c;重启后登录用户名后会出现花屏的现象。 解决方案如下 在键盘上同时按键&#xff1a;Ctrl Alt F4&#xff0c;进入命令行模式&#xff0c;…

基于深度学习的电动自行车头盔佩戴检测系统

文章目录 1. 文档说明2. 运行环境说明2.1 硬件配置2.2 软件配置2.3 程序依赖库 3. 基本环境配置3.1 软件安装3.1.1 集成开发环境安装与配置3.1.2 数据库安装与配置3.1.3 编程语言安装3.1.4 CUDA和cuDNN安装与配置3.1.5 机器学习库安装 3.2 依赖库安装 4. 运行程序资源下载地 1.…

Binder通信模型

Binder是Android最主要的进程间通信方式&#xff0c;下面简单认识一下它的通信模型&#xff0c;如下图所示 服务管理进程启动时会变成上下文管理者&#xff0c;在驱动层创建一个全局的binder_node对象binder_context_mgr_node记录进程信息&#xff0c;BpServiceManager中BpBind…

HarmonyOS实战开发-如何实现跨应用数据共享实例。

介绍 本示例实现了一个跨应用数据共享实例&#xff0c;分为联系人&#xff08;数据提供方&#xff09;和联系人助手&#xff08;数据使用方&#xff09;两部分&#xff1a;联系人支持联系人数据的增、删、改、查等功能&#xff1b;联系人助手支持同步联系人数据&#xff0c;当…

血细胞检测数据集 | 用于血细胞计数+检测的小规模数据集_已经整理成VOC格式_总共410张图

项目应用场景 面向血细胞检测计数数据集&#xff0c;已经整理成 VOC 格式&#xff0c;可以直接用于目标检测算法的训练&#xff0c;如 YOLO 等目标检测算法的训练。血细胞检测数据集图片质量好&#xff0c;可直接训练出一个血细胞检测模型&#xff0c;或者作为血细胞检测数据集…

AI智能分析盒子在工地的应用,提高工地管理效率和安全性

工地ai智能分析盒子是一种基于人工智能视觉分析技术的人工智能盒子&#xff0c;旨在提升工地作业区域的管理效率和保障作业人员的安全。通过最前沿的AI视觉算法、大数据&#xff0c;能够实时监控工地现场视频流画面&#xff0c;对施工工地人员的工作着装及日常作业行为进行规范…

1.C++编译过程

1.Linux 如何安装 C 编译环境 &#xff08;1&#xff09;安装 gcc 下载&#xff1a;sudo apt install gcc g 安装&#xff1a;gcc/g -v/--version其中 gcc 用于编译 C &#xff0c;g 用于编译 C 版本要 >4.8.5 这样才能使用 C11 的特性 &#xff08;2&#xff09; 使用…

【QT学习】4.对话框学习,浮动窗口,模态对话框,非模态对话框,消息框,文件对话框

1.浮动窗口 代码&#xff1a; //制作核心控件&#xff1a;文本编辑框QTextEdit* pTextEditnew QTextEdit;//制作浮动控件connect(pMenu1,&QMenu::triggered,[](QAction* pAction){qDebug()<<pAction->text()<<endl;if(pAction->text()"浮动控件&quo…

Vulnhub:DEVCONTAINER: 1

目录 信息收集 arp nmap nikto whatweb WEB 信息收集 dirmap 文件上传 提权 系统信息收集 横向提权 信息泄露 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:2f:dd…

YUM仓库和编译安装

目录 一.YUM仓库搭建 1.简介&#xff1a; 2.搭建思路&#xff1a; 3.实验&#xff1a;单机yum的创建 二.编译安装 1.简介 2.安装过程 3.实验&#xff1a;编译安装nginx 一.YUM仓库搭建 1.简介&#xff1a; yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红…

超级agent的端语言模型Octopus v2: On-device language model for super agent

大型语言模型&#xff08;LLMs&#xff09;在函数调用方面展现出卓越的应用潜力&#xff0c;特别是针对Android API的定制应用。与那些需要详尽描述潜在函数参数、有时甚至涉及数万个输入标记的检索增强生成&#xff08;RAG&#xff09;方法相比&#xff0c;Octopus-V2-2B在训练…

fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化

为了 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // following paper: /…

ZLMediaKit ubantu 下编译

1、获取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init二、依赖库 Debian系(包括ubuntu&#xff09;系统下安装依赖的方法&#xff1a; #除了…