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;   // 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;
  }
}

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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络通信流程

建立完tcp请求再发起http请求 开启系统代理之后,以clash verge为例 127.0.0.1:7897,假设hci.baidu.com的IP为153.37.235.50 发起对hci.baidu.com的HTTP请求,由于开启了系统代理不进行DNS解析,浏览器调用socket()获得一个socket&a…

GlusterFS(GFS)分布式文件系统

一、GlusterFS的概述: GlusterFS 是一个开源的分布式文件系统。 只在扩展存储容器,提高性能 并且通过多个互联网络的存储节点的进行几余,以确保数据的可用性和一致性 由存储服务器、客户端以及NFS/Samba 存储网关(可选&#xff0c…

软考中级之软件设计师---知识点汇总总结

软考中级之软件设计师---知识点汇总总结 软考介绍资格设置证书样本 计算机组成原理操作系统1. 进程的三态模型2. 磁盘调度算法 计算机网络1. 网络的分类2. 各层的互连设备3. 网络模型,协议簇4. 传输层协议TCP、UDP4.1 TCP (Transmission Control Protocol,传输控制协…

零代码与低代码开发平台

1、什么是低代码开发平台?什么是零代码开发平台? 零代码开发平台: 指的是不需要写代码就能够快速开发出业务应用/系统的平台。我们在工作中使用的业务应用,主要提供数据收集、数据处理、数据流转和展示等功能。零代码开发平台能够…

【超重磅牛市信号】减半倒计时12天!首波抛售潮接近尾声,大暴涨将如期而至!

3月,美国CPI环比出现小幅反弹由3.1%升至3.2%,美国制造业指数PMI反弹至50.3%呈现进入扩张期的态势,日本结束长达8年的负利率时代首次加息。这导致美国4月降息概率大幅下降,5月降息概率也跌至50%以下。 尽管如此,全球金融…

C#操作MySQL从入门到精通(8)——对查询数据进行高级过滤

前言 我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,同时又要家乡地址是安徽的,类似这种操作专栏第7篇的C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤简单过滤方法就无法…

STL优先队列比较器

有两个比较器&#xff0c;在std里面&#xff0c;一个是greater&#xff0c;一个是less&#xff0c;他们都有一个可以指定的模板类型。 #include <bits/stdc.h> using namespace std; struct node {bool operator ()(const string& a, const string& b){return a…

蓝桥杯刷题-特殊年份

特殊年份 代码&#xff1a; def f(x)->bool:s list(x)if s[0]s[2] and int(s[1])1int(s[3]):return Trueelse:return False cnt 0 for _ in range(5):if f(input()):cnt1 print(cnt)

PC端音乐神器-解锁全网限制

打软件后就能发现&#xff0c;软件不需要我们登录&#xff0c;就可以使用,下载地址&#xff1a;PC端音乐神器.zip

什么是sso?

SSO&#xff08;Single Sign-On&#xff09;&#xff0c;即单点登录&#xff0c;是一种安全协议&#xff0c;它允许用户在多个应用程序之间使用同一组登录凭据进行身份验证。这意味着用户只需要登录一次&#xff0c;就可以访问多个需要身份验证的应用程序。 SSO的工作原理如下…

[C++][算法基础]合并集合(并查集)

一共有 n 个数&#xff0c;编号是 1∼n&#xff0c;最开始每个数各自在一个集合中。 现在要进行 m 个操作&#xff0c;操作共有两种&#xff1a; M a b&#xff0c;将编号为 a 和 b 的两个数所在的集合合并&#xff0c;如果两个数已经在同一个集合中&#xff0c;则忽略这个操…

【JavaEE】_Spring MVC项目获取Header

目录 1. 使用Servlet原生方法获取Header 2. 使用Spring注解获取Header 1. 使用Servlet原生方法获取Header .java文件内容如下&#xff1a; package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*; impor…

【C++进阶】用哈希实现unordered_set和unordered_map的模拟

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 前言&#xff1a; 之前我…

网络安全 | 什么是区块链?

关注WX&#xff1a;CodingTechWork 概述 定义 区块链是一个共享的、不可篡改的账本&#xff0c;旨在促进业务网络中的交易记录和资产跟踪流程。资产可以是有形的&#xff08;如房屋、汽车、现金、土地&#xff09;&#xff0c;也可以是无形的&#xff08;如知识产权、专利、…

leetcode代码记录(最长连续递增序列

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定…

极市平台 | 综述:一文详解50多种多模态图像融合方法

本文来源公众号“极市平台”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;综述&#xff1a;一文详解50多种多模态图像融合方法 0 极市导读 本工作总结了50篇论文中Lidar和camera的多模态融合的一些概念方法。笔者结合原文以及自…

变电站设计综合应用软件-光纤回路设计解决方案

产品概述 智能变电站光纤回路设计软件——让您的光纤设计之旅变得轻松而高效! 光纤回路设计作为智能变电站的关键环节,对电网的稳定运行起着至关重要的作用。为了让您的光纤设计之路更加顺畅,我们隆重推出了这款智能变电站光纤回路设计软件。这款软件以其简单易用的…

SpringBoot学习笔记-S2

1. SpringBoot中的常见注解 RequestBody&#xff1a;使SpringMVC框架可自动读取请求体里面的JSON格式的数据&#xff0c;转换成map类型的集合对象RestController&#xff1a;开发RESTful API 时使用&#xff0c;等价于ResponseBody Controller。RestController和Controller的…

10分钟上手:MySQL8的Json格式字段使用总结干货

一、关于效率和适用范围 尽管官方承诺Json格式字段采用了空间换时间的策略&#xff0c;比Text类型来存储Json有大幅度的效率提升。但是Json格式的处理过程仍然效率不及传统关系表&#xff0c;所以什么时候用Json格式字段尤为重要。 只有我们确定系统已经能精确定位到某一行&am…

红外疼痛医学分会成立大会暨首届学术交流会即将盛大开幕

2024年4月7日&#xff0c;中国中医药研究促进会官网发布“关于召开红外疼痛医学分会成立大会暨首届学术交流会的第三轮通知”通知&#xff0c;大会开幕在即&#xff0c;这充分显示了官方对此次活动的高度重视。 本次大会将于 2024年4月19日至21日在重庆海兰云天海琴酒店隆重举行…