网上罗列了很多关于变量的理解,良莠不齐,不知道哪些是对的,哪些是错的。所以笔者索性就这些博客和自己的理解写出这篇文章,如果有不对的地方,希望读者能够指正,感谢。
变量是我们经常用到的一种,我在刚学 Java 的时候,也经常被各种变量的概念折磨,当时并没有细抠,但是我在写一篇类似的文章中,想把变量作为一种小标题来简述一下,但是发现,变量这个概念还是比较繁琐的,本篇文章就来深入认识一下 Java 中这些变量的概念。
所以,到底有哪些变量的概念呢?距今为止,目前已知的变量主要有- 实例变量
下面我们就采用各个击破的方式来认识每个概念
实例变量又被称为Instance variables
。不使用 static
关键字定义,并且在任何方法、构造方法、块之外的变量都是实例变量
。实例变量都是基于特定实例的,实例变量不会在实例之间共享,也就是说,每一个对象的实例都有自己的一个实例变量。下面是实例变量的一个例子
class Fruits {
public String fruitName; // 具有公共访问权限的 fruitName;
private int fruitNum; // 具有私有访问权限的 fruitNum;
}
你可以使用下面这种方式进行实例变量的调用
public class Fruits {
public String fruitName;
private int fruitNum;
public static void main(String[] args) {
Fruits fruits = new Fruits();
fruits.fruitName = "strawberry";
fruits.fruitNum = 100;
}
}
那么我如何知道一个变量它是实例变量呢?下面是一些关于实例变量的定义规则- 实例变量可以使用四种访问修饰符进行修饰:public、protected、default、private
transient、final
关键字进行修饰abstract、synchronized、strictfp、native、static
关键字进行修饰实例变量带有默认值,也就是说,实例变量不用初始化就能使用。下面是常用实例变量的初始值
上面我们了解了实例变量的基本特征和如何区分实例变量,下面我们来讲一下实例变量的特点。- 实例变量的只能在类中声明,但是在方法、构造函数或任何块之外。
new
关键字进行创建对象时,实例变量同时也被创建,当垃圾回收器回收对象时,实例变量也会被销毁。修饰符
来修饰全局变量又被称为Global variables
。如果你有其他语言的编程经验,比如 C、C++ 的话,你会接触到全局变量这个概念,你可以使用下面代码来创建全局变量
#include<stdio.h>
// 全局变量
int A;
int B;
int Add()
{
return A + B;
}
但是在 Java 中,是不存在全局变量的。因为 Java 是一门面向对象的编程语言,所有的内容都是属于类的一部分。Java 这么做的原因是为了防止数据和类成员被其他程序的其他部分有意或者无意的修改。所以在 Java 中,使用 静态变量
来起到全局访问的目的。
静态变量又被称为Static variables
。静态变量的定义比较简单,静态变量是属于该类
的变量,它是由 static
关键字来修饰的。static 修饰的变量属于静态变量,它只能定义在类的内部、方法的外部。
类名.变量名
进行访问,并且不需要创建任何对象就能访问。public class Fruits {
public String fruitName;
private int fruitNum;
static String fruitType;
public static void main(String[] args) {
Fruits.fruitType = "apple"; // 类名.变量名
System.out.println(fruitType);
}
}
非静态方法
中使用静态变量类变量又被称为 Class variables
在 Java 中,类变量就是静态变量,它们都用 static
关键字进行修饰,所以,如果你再听到说静态变量的时候,它也就是类变量。
还有一种说法,说 Java 中只有类变量、实例变量和局部变量。这么分也没有问题,可能有人会问到,你把成员变量和常量放在哪了?别着急我们后面会说
先来说一下什么是局部变量
局部变量又称为 Local variables
。它指的是在方法中、构造器中或者块代码中定义的变量。局部变量的生命周期随方法、构造器、代码块的执行完毕而销毁。
不管上面的一些变量概念如何变换、局部变量都站如松,坐如钟,行如风,卧如弓,从容应对各种不同文章的比较。真是一个省事的变量。
那么这么好的东西我们可要仔细研究一下其特点是啥
什么?成员变量在 Java 中就是实例变量?这个结论对吗?
为了验证这个结论,我们求助于 stackoverflow
网站
我们搜索 java member variable and instance variable 就帮我们定位到了这个标题
大致意思是:什么是成员变量?成员变量和实例变量是否相同呢?我们下面有个回答
第一句就给出,实例变量和类变量都称为成员变量,然后给出了 JDK 官网手册对变量的定义。意思是在 Java 中,只有三种类型的变量
嗯。。。或许还不是很好解决我们的问题,我带着问题再次求助 JDK 官网手册,又看到了关于 Variables
的定义
意思是在 Java 中,只有下面几种类型的变量(别扯别的了,莫非你比官网还靠谱?)
实例变量(非静态属性)
:大致意思就是说
非静态属性也就被称为实例变量
,因为它们的值是相对于每个实例来说的。换句话说,对于每个对象来讲,实例变量的值都是唯一的;
类变量(静态属性)
:类变量就是使用 static 修饰符声明的字段,这就会告诉编译器:无论该类被实例化了多少次,该变量只存在一个副本。另外,可以添加关键字 final 来表示常量
。局部变量
:没有特殊的关键字将制定的变量声明为局部变量、确定其声明的完全取决于声明变量的位置。参数
:想一下我们平常用到最多的方法是什么方法?当然是 main
方法啊,main 方法是怎么定义的?public static void main(String[] args) {}
其中的 args 是不是就是 String 的数组的变量,我们也称其为参数
,所以参数也没有关键字进行声明,标识其为参数也只是取决于其声明位置。
所以
我写了一篇文章为了给你讲清楚,现在你应该知道 Java 中到底有哪些变量了吧。如果你用 static 来定义变量,只能是类变量、或者说静态变量、而且其定义位置只能在类中,方法或代码块外,变量的副本只有一个。如果你不用 static 来声明变量,那么就会有三种变量的叫法- 定义在构造方法、代码块、方法外
的变量被称为实例变量,实例变量的副本数量和实例的数量一样。
内
的变量被称为局部变量;中
的变量被称为参数。也就是下面代码所描述的这样
public class VariablesInJava {
int instanceVariable; // 实例变量
static String staticVariable; // 类变量
public void method() {
String localVariable = "localVariable"; // 局部变量
System.out.println(localVariable);
}
public static void main(String args[]) {} //参数
}
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。