JAVA语言中,啥是变量,如何定义一个变量?啥是常量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA语言中,啥是变量,如何定义一个变量?啥是常量?相关的知识,希望对你有一定的参考价值。
变量:
变量是程序运行过程中它的值是允许改变的量。
变量定义:定义必须严格按照标识符的命名规则,即0~9数字、字母、下滑线、$等组成,且首字母不能是数字、不能是java关键字。
变量格式为[访问修饰符][修饰符]数据类型 变量名[=初始值]。
eg:public static int a=0;
byte b=2;
常量:
常量是不可改变的量,一次赋值,永不改变 。
常量定义:常量需要有final修饰符修饰。常量声明时必须初始化。常量标识符必须大写,且多个单词时用下滑线连接。
注意:有时候常量也可以不用在声明时就初始化。
eg:做局部变量
public class Test
public static void main(String[] args)
final int Y;
Y=9;
做静态全局变量时,若声明时不服初值,必须在静态代码块中赋初值。
static final int Y;
static
Y=9;
做非静态全局变量时,若声明时不服初值,则必须在非静态代码块中赋值。
扩展资料:
使用变量时注意事项:
作用域:变量定义在那个大括号内,它就在这个大括号内有效。并且,在同一个大括号内不能同时定义同名的变量。
初始化值:没有初始化值得变量不能直接使用。 只要在使用前给值就行,不一定要在定义是给值。
定义变量的格式: a:数据类型 变量名 = 初始化值; b:数据类型 变量名;变量名 = 初始化值;c:在一行上建议只定义一个变量可以定义多个。
参考资料来源:百度百科-Java
变量:
变量的定义必须严格按照标识符的命名规则,即0~9数字、字母、下滑线、$等组成,且首字母不能是数字、不能是java关键字。
·首字母必须小写,当有多个单词组成时,后面的单词首字母要大写。
·变量名一般由名词组成。
·变量定义:[访问修饰符][修饰符]数据类型 变量名[=初始值]。
eg:public static int a=0;
byte b=2;
常量:
常量的定义也要严格按照标识符的定义规则。
·常量需要有final修饰符修饰。
·常量声明时必须初始化。
·常量的值是不可改变的量、一次赋值,永不改变。
·常量标识符必须大写,且多个单词时用下滑线连接。
注意:有时候常量也可以不用在声明时就初始化。
eg:做局部变量
public class Test
public static void main(String[] args)
final int Y;
Y=9;
做静态全局变量时,若声明时不服初值,必须在静态代码块中赋初值。
static final int Y;
static
Y=9;
做非静态全局变量时,若声明时不服初值,则必须在非静态代码块中赋值。
扩展资料:
1.常量:在程序执行的过程中其值不可以发生改变。
常量分为:字面值常量和自定义常量
这就是一个值,这个值本身,我们可以叫它常量。
整型常量:123
实型常量:3.14
字符型常量:’a’
逻辑常量:true、false
字符串常量:”helloworld”
另一个说法是;表示不可变的变量,这也叫做常量,在语法上讲,加上final关键字来修饰某个变量, 只要赋值后,就不能改变了,也就不能在对其进行赋值了,例如;
final int i=1;
那么这个i的值是不能再改变了的,只能是1,所以是不可变的变量。(i是一个int类型的变量,变量值本身是可以重新赋值被改变的,但是现在加上了final,它就是一个最终的了,所以是一个不可变的变量。)
2.变量:在程序执行的过程中,在某个范围内其值可以发生改变的量。
int a=10;
a=”briup”;
变量定义格式:数据类型 变量名=初始化值。
变量值是内存中的一块地址,初始化值代表的是在这个地址中的一小块区域。所以,使用变量名来访问这块区域,因此访问每一个变量名之前都应先声明该变量,然后在对其进行赋值。
3.变量和常量只有先声明后才能使用。
转换规则:从存储范围小的类型到存储范围大的类型。
具体规则为:byte→short(char)→int→long→float→double
也就是说 byte 类型的变量可以自动转换为 short 类型,示例代码:
byte b=10;
short sh=b;
这里在给sh赋值时,JVM首先将b的值转换成short类型然后再赋值给sh。
当然,在类型转换的时候也可以跳跃,就是byte也可以自动转换为int类型的。
强制类型转换
强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种
损失时才进行该类型的转换。
转换规则:从存储范围大的类型到存储范围小的类型。
具体规则为:double→float→long→int→short(char)→byte
语法格式为:(转换到的类型)需要转换的值
double d=3.14;
int i=(int) d;
注意问题:强制类型转换通常都会存储精度的损失,所以使用时需要谨慎。
浮点型默认为双精度double
整型默认为int
参考技术B 变量就是你的类中的用来暂时存储数据的东西定义方式为: 修饰符+变量类型+变量名= new 变量类型();
如:private String a = new String();
或直接赋值 private String a = "abc";
但是a的值在你不断赋值的过程中是可以变化的。
常量就是值不会发生变化的量,和变量是相对的,
比如一个常量a
private final String a = "abc";
那么这个a只是不会改变的,这就是常量本回答被提问者采纳 参考技术C 变量和常量都具有名和值,不同的是变量在程序的运行过程中会被动态的分配内存地址。而常量只是在编译器给其赋值,没有分配地址,执行程序时,只是把对应的名换成值。
参考:啥是变量范围,哪些变量可以从哪里访问,啥是“未定义变量”错误?
【中文标题】参考:啥是变量范围,哪些变量可以从哪里访问,啥是“未定义变量”错误?【英文标题】:Reference: What is variable scope, which variables are accessible from where and what are "undefined variable" errors?参考:什么是变量范围,哪些变量可以从哪里访问,什么是“未定义变量”错误? 【发布时间】:2022-01-21 07:58:29 【问题描述】:注意:这是一个在 PHP 中处理变量范围的参考问题。请关闭符合此模式的许多问题中的任何一个作为此问题的副本。
什么是 PHP 中的“变量范围”?一个 .php 文件中的变量可以在另一个文件中访问吗?为什么有时会出现“未定义变量”错误?
【问题讨论】:
【参考方案1】:我不会发布这个问题的完整答案,因为现有的答案和PHP manual 很好地解释了其中的大部分内容。
但遗漏了一个主题是superglobals,包括常用的$_POST
、$_GET
、$_SESSION
等。这些变量是数组,在任何范围内始终可用,无需@ 987654328@声明。
例如,此函数将打印出运行 PHP 脚本的用户名。该变量可用于函数没有任何问题。
<?php
function test()
echo $_ENV["user"];
“全局变量不好”的一般规则在 PHP 中通常被修改为“全局变量不好但超全局变量没问题”,只要不滥用它们。 (所有这些变量都是可写的,所以如果你真的很糟糕,它们可以用来避免依赖注入。)
不保证这些变量存在;管理员可以使用php.ini
中的variables_order
directive 禁用部分或全部,但这不是常见的行为。
当前超全局变量列表:
$GLOBALS
- 当前脚本中的所有全局变量
$_SERVER
- 关于服务器和执行环境的信息
$_GET
- 在 URL 的查询字符串中传递的值,与用于请求的 HTTP 方法无关
$_POST
- 使用 application/x-www-form-urlencoded
或 multipart/form-data
MIME 类型在 HTTP POST 请求中传递的值
$_FILES
- 以multipart/form-data
MIME 类型在 HTTP POST 请求中传递的文件
$_COOKIE
- 当前请求传递的 Cookies
$_SESSION
- PHP 内部存储的会话变量
$_REQUEST
- 通常是 $_GET
和 $_POST
的组合,但有时是 $_COOKIES
。内容由php.ini
中的request_order
directive决定。
$_ENV
- 当前脚本的环境变量
【讨论】:
【参考方案2】:什么是“可变范围”?
变量的“范围”或“可访问它们的位置”是有限的。仅仅因为您在应用程序中somewhere 写过一次$foo = 'bar';
并不意味着您可以在应用程序内的其他地方everywhere 引用$foo
。变量$foo
具有一定的范围,在该范围内它是有效的,只有同一范围内的代码才能访问该变量。
PHP 中的作用域是如何定义的?
很简单:PHP 有函数范围。这是 PHP 中唯一存在的范围分隔符。函数内的变量仅在该函数内可用。函数外的变量可以在函数外的任何地方使用,但不能在任何函数内使用。这意味着 PHP 中有一个特殊的范围:global 范围。在任何函数之外声明的任何变量都在这个全局范围内。
示例:
<?php
$foo = 'bar';
function myFunc()
$baz = 42;
$foo
在 global 范围内,$baz
在 myFunc
内的 local 范围内。只有myFunc
中的代码才能访问$baz
。只有代码外部 myFunc
可以访问$foo
。双方都无法访问对方:
<?php
$foo = 'bar';
function myFunc()
$baz = 42;
echo $foo; // doesn't work
echo $baz; // works
echo $foo; // works
echo $baz; // doesn't work
范围和包含的文件
文件边界不分开范围:
a.php
<?php
$foo = 'bar';
b.php
<?php
include 'a.php';
echo $foo; // works!
适用于include
d 代码的规则与适用于任何其他代码的规则相同:只有function
s 单独的范围。出于范围的目的,您可能会考虑包含复制和粘贴代码之类的文件:
c.php
<?php
function myFunc()
include 'a.php';
echo $foo; // works
myFunc();
echo $foo; // doesn't work!
在上面的例子中,a.php
包含在 myFunc
中,a.php
中的任何变量都只有局部函数范围。仅仅因为它们看起来在 a.php
的全局范围内并不一定意味着它们是,它实际上取决于包含/执行代码的上下文。
函数和类中的函数呢?
每一个新的function
声明都会引入一个新的作用域,就这么简单。
(匿名)函数内的函数
function foo()
$foo = 'bar';
$bar = function ()
// no access to $foo
$baz = 'baz';
;
// no access to $baz
类
$foo = 'foo';
class Bar
public function baz()
// no access to $foo
$baz = 'baz';
// no access to $baz
范围有什么用?
处理范围问题可能看起来很烦人,但是有限的变量范围对于编写复杂的应用程序至关重要!如果您声明的每个变量都可以从您的应用程序中的其他任何地方获得,那么您将无所适从在你的变量上,没有真正的方法来跟踪什么改变了什么。您可以为变量命名的合理名称只有这么多,您可能希望在不止一个地方使用变量“$name
”。如果您的应用程序中只能有这个唯一的变量名一次,您将不得不采用非常复杂的命名方案来确保您的变量是唯一的,并且您不会从错误的代码中更改错误的变量。
观察:
function foo()
echo $bar;
如果没有作用域,上面的函数会做什么? $bar
来自哪里?它有什么状态?它甚至初始化了吗?每次都要检查吗?这是不可维护的。这让我们...
跨越范围界限
正确方法:传入传出变量
function foo($bar)
echo $bar;
return 42;
变量$bar
明确地作为函数参数进入这个范围。只要看看这个函数,就很清楚它使用的值来自哪里。然后它显式地返回一个值。调用者有信心知道函数将使用哪些变量以及它的返回值来自哪里:
$baz = 'baz';
$blarg = foo($baz);
将变量的作用域扩展到匿名函数
$foo = 'bar';
$baz = function () use ($foo)
echo $foo;
;
$baz();
匿名函数在其周围范围内显式包含$foo
。请注意,这与 global 范围不同。
错误的方式:global
如前所述,全局作用域有些特殊,函数可以显式地从中导入变量:
$foo = 'bar';
function baz()
global $foo;
echo $foo;
$foo = 'baz';
该函数使用和修改全局变量$foo
。 不要这样做! (除非你真的真的真的很清楚自己在做什么,即使那样:不要这样做!)
这个函数的调用者看到的都是这样的:
baz(); // outputs "bar"
unset($foo);
baz(); // no output, WTF?!
baz(); // outputs "baz", WTF?!?!!
没有迹象表明这个函数有任何副作用,但确实有。这很容易变成一团乱麻,因为一些函数不断修改并要求一些全局状态。您希望函数是无状态的,只作用于它们的输入并返回定义的输出,不管你调用它们多少次。
您应该尽可能避免以任何方式使用全局范围;当然,您不应该将变量从全局范围“拉”到本地范围中。
【讨论】:
你刚才说global
的错误方式,所以请告诉我们什么时候应该使用global
?请解释一下(有点)什么是static
..?
@stack global
没有“正确”的方式。总是错的。传递函数参数是正确的。 static
在手册中有很好的解释,与范围没有太大关系。简而言之,它可以被认为是一个“作用域全局变量”。我在这里 kunststube.net/static 扩展了它的用法。
我的简单想法是,如果一个 php 变量足够重要,值得拥有全局状态,那么它应该在数据库中有一列。也许这是一种矫枉过正,但它是一种适合我平庸的编程智慧的万无一失的方法
@Arthur 那里有很多东西要解压……ಠ_ಠ 这绝对不是我认可的方法。
@Teemu 不,因为这是通过可配置名称显式传递。不过,它可能导致奇怪的副作用,并且仅在特定情况下才有意义,例如 preg_match
,在这种情况下,您有一个“主要”和“次要”返回值。【参考方案3】:
虽然在函数范围内定义的变量不能从外部访问,但这并不意味着在该函数完成后您不能使用它们的值。 PHP 有一个众所周知的 static
关键字,它在面向对象的 PHP 中广泛用于定义静态方法和属性,但请记住,static
也可以在函数内部用于定义静态变量。
什么是“静态变量”?
静态变量不同于函数作用域中定义的普通变量,因为它在程序执行离开这个作用域时不会丢失值。让我们考虑以下使用静态变量的示例:
function countSheep($num)
static $counter = 0;
$counter += $num;
echo "$counter sheep jumped over fence";
countSheep(1);
countSheep(2);
countSheep(3);
结果:
1 sheep jumped over fence
3 sheep jumped over fence
6 sheep jumped over fence
如果我们在没有static
的情况下定义$counter
,那么每次回显的值将与传递给函数的$num
参数相同。使用static
可以构建这个简单的计数器,而无需额外的解决方法。
静态变量用例
-
在随后的函数调用之间存储值。
在没有办法(或没有
目的)将它们作为参数传递。
缓存通常最好检索一次的值。为了
例如,读取服务器上不可变文件的结果。
技巧
静态变量只存在于局部函数范围内。它不可能是 在定义它的函数之外访问。所以你可以 确保它将保持其值不变,直到下一次调用 那个函数。
静态变量只能定义为标量或标量 表达式(自 PHP 5.6 起)。不可避免地为其分配其他值 至少在撰写本文时会导致失败。 不过,您可以在代码的下一行执行此操作:
function countSheep($num)
static $counter = 0;
$counter += sqrt($num);//imagine we need to take root of our sheep each time
echo "$counter sheep jumped over fence";
结果:
2 sheep jumped over fence
5 sheep jumped over fence
9 sheep jumped over fence
静态函数在对象的方法之间有点“共享” 同班。看下面的例子就很容易理解了:
class SomeClass
public function foo()
static $x = 0;
echo ++$x;
$object1 = new SomeClass;
$object2 = new SomeClass;
$object1->foo(); // 1
$object2->foo(); // 2 oops, $object2 uses the same static $x as $object1
$object1->foo(); // 3 now $object1 increments $x
$object2->foo(); // 4 and now his twin brother
这仅适用于同一类的对象。如果对象来自不同的类(甚至相互扩展),静态变量的行为将符合预期。
静态变量是在函数调用之间保持值的唯一方法吗?
在函数调用之间保持值的另一种方法是使用闭包。闭包是在 PHP 5.3 中引入的。简而言之,它们允许您将对函数范围内的某些变量集的访问限制为另一个匿名函数,这将是访问它们的唯一方法。处于闭包中的变量可能会(或多或少成功地)模仿结构化编程中的“类常量”(如果它们在闭包中通过值传递)或“私有属性”(如果通过引用传递)等 OOP 概念。
后者实际上允许使用闭包而不是静态变量。使用什么始终由开发人员决定,但应该提到的是,静态变量在使用递归时绝对有用,值得开发人员注意。
【讨论】:
以上是关于JAVA语言中,啥是变量,如何定义一个变量?啥是常量?的主要内容,如果未能解决你的问题,请参考以下文章
java中啥是堆和栈,如何应用,最好举个例子,并详细地说明一下,谢谢了
参考:啥是变量范围,哪些变量可以从哪里访问,啥是“未定义变量”错误?