- 浏览: 87503 次
- 性别:
- 来自: 广州
最新评论
很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。
今天有点偷懒,简单地给大家介绍一下变量的定义。
什么是变量,简单来说就是一个地址指针,而且这个指针的内容应该是可变的。而变量的作用就是给我们在写程序的时候临时存储要处理的数据。
在java里面,变量的定义如下:
[包路径.]类型名 变量名 [= 值];
一个真实的变量命名例子如下:
如果用人类的语言来描述上面的代码,可以解释为新创建一个java.util.Date对象地址块,存储到一个today的指针里面,并且today地址段里面保存的内容只能是java.util.Date的数据。
如果我们想省掉包路径,就只能够在java的文件头,package语句后面,class语句外面写以下一句:
例如上例:
凡是引用非本包路径(跟当前class所在的package不相同)的类时,都需要使用import引用或者要声明类的包名。就好像我们去拜访别人家的时候需要先知道他的住址一样。但是,在java里面,只要是来自java.lang的所有类都不需要列出包名就可以直接引用,它是默认被引入到所有类里面的。
谈到变量,就很自然会关心到它的作用域。根据作用域,我们可以分为局部变量(variable)和字段(field)。局部变量指在代码段里或者方法里面被临时创建出来的中间变量,这些变量通常在跳出代码段或者方法体之后就会被GC回收,除非这个变量还在被其它对象引用中。这部分内容我们在说弱引用的时候会涉及到。
好了,来看看field和variable的区别:
在上面的代码中,会有两个错误,第一个是在aMethod()里面的String aField = "test" 另外一个是System.out.println(var2);
第一个错误,是因为变量不能和字段重名。因为jre很难知道同一个类里面相同名字的两个指针,哪个是来自于类本身的字段,哪个是方法的变量。另外,同一个地址段的变量名也不能相同。比如这样写也是不对的:
这样就会报错。
另一个错误,就是后面的System.out.println(var2)。因为程序出了for循环之后,var2的声明就被gc了解了,我们无法再找回它的地址指针,即使它可能仍然存在于内存中!
为什么要了解变量的作用范围呢?这跟赋值有关。
首先,说说怎么为变量赋值,很简单,和定义变量的时候有点类似:
唯一的不同就是没了变量名前的指针类型定义,对吧?
由于字段是一个类的全局变量,所以它可以保持夸方法的值,例如:
上面就是我们著名的JavaBean字段写法,一个字段,配有一个getter方法和setter方法。通过这两个方法,外部可以存储一些特定的数据到一个实例里面,并且可以随时调用会最后存储的数据。而且不同实例由于其内存段的独立也可以保证同一个字段的值不会被交叉引用到,从而发生一些多线程的问题。
field字段作为全局变量,可以在整个类地址中共享,而且大家可以看到其定义需要多一个modifier,可以指示除了实例本身,还有谁可以对其进行修改。例如上面的例子,我们可以改造成
但是这样太危险,所以一般情况下我们都不建议大家把字段定义为public的,只建议定义为private或者protected的。
同样,变量的定于,无论是field还是variable,都允许使用final,而static只允许在field定义的时候使用。而当我们把field同时定义为static和final的时候我们就会叫它做常量,它的命名规则必须是使用全大写,并且单词之间用下划线区别。
上例里面,第一个是一个常量的定义方式。第二个例子是一个常见的对方法参数变量定义为final的用法,这样可以防止方法中途因为不小心而把敏感的输入参数给修改了。在上例中,username的赋值会出错,原因是两个方法参数不允许修改,地址已经给锁住了。
今天内容到此结束,因为有点仓促可能写得不太好,我稍后再修改一下吧。。。
明天我们要说this和super这两个指针内建指针。
今天有点偷懒,简单地给大家介绍一下变量的定义。
什么是变量,简单来说就是一个地址指针,而且这个指针的内容应该是可变的。而变量的作用就是给我们在写程序的时候临时存储要处理的数据。
在java里面,变量的定义如下:
[包路径.]类型名 变量名 [= 值];
一个真实的变量命名例子如下:
java.util.Date today = new java.util.Date();
如果用人类的语言来描述上面的代码,可以解释为新创建一个java.util.Date对象地址块,存储到一个today的指针里面,并且today地址段里面保存的内容只能是java.util.Date的数据。
如果我们想省掉包路径,就只能够在java的文件头,package语句后面,class语句外面写以下一句:
import 包路径.[类|*];
例如上例:
package ...; import java.util.Date; ... Date today = new Date();
凡是引用非本包路径(跟当前class所在的package不相同)的类时,都需要使用import引用或者要声明类的包名。就好像我们去拜访别人家的时候需要先知道他的住址一样。但是,在java里面,只要是来自java.lang的所有类都不需要列出包名就可以直接引用,它是默认被引入到所有类里面的。
谈到变量,就很自然会关心到它的作用域。根据作用域,我们可以分为局部变量(variable)和字段(field)。局部变量指在代码段里或者方法里面被临时创建出来的中间变量,这些变量通常在跳出代码段或者方法体之后就会被GC回收,除非这个变量还在被其它对象引用中。这部分内容我们在说弱引用的时候会涉及到。
好了,来看看field和variable的区别:
package vardemo; public class VarDemo { //这是一个field public String aField; static{ //这是这个静态代码段的临时变量 String var = "I'm a var in static segment!"; } //一段走出这个代码段,上面的var变量就会不可用,但是aField仍然可用 public void aMethod() { String var = "I'm another var for this method!"; String aField = "test"; for(int i=0;i<10;i++) { String var2 = "tmp var in for loop"; } System.out.println(var); System.out.println(var2); } }
在上面的代码中,会有两个错误,第一个是在aMethod()里面的String aField = "test" 另外一个是System.out.println(var2);
第一个错误,是因为变量不能和字段重名。因为jre很难知道同一个类里面相同名字的两个指针,哪个是来自于类本身的字段,哪个是方法的变量。另外,同一个地址段的变量名也不能相同。比如这样写也是不对的:
public void aMethod() { String var = "test"; String var = "test"; }
这样就会报错。
另一个错误,就是后面的System.out.println(var2)。因为程序出了for循环之后,var2的声明就被gc了解了,我们无法再找回它的地址指针,即使它可能仍然存在于内存中!
为什么要了解变量的作用范围呢?这跟赋值有关。
首先,说说怎么为变量赋值,很简单,和定义变量的时候有点类似:
变量名 = 值;
唯一的不同就是没了变量名前的指针类型定义,对吧?
由于字段是一个类的全局变量,所以它可以保持夸方法的值,例如:
public class Person { private String name; public void setName(String aName) { name = aName; } public String getName() { return name; } public static void main(String[] args){ Person p = new Person(); p.setName("JJ"); System.out.println(p.getName()); } }
上面就是我们著名的JavaBean字段写法,一个字段,配有一个getter方法和setter方法。通过这两个方法,外部可以存储一些特定的数据到一个实例里面,并且可以随时调用会最后存储的数据。而且不同实例由于其内存段的独立也可以保证同一个字段的值不会被交叉引用到,从而发生一些多线程的问题。
field字段作为全局变量,可以在整个类地址中共享,而且大家可以看到其定义需要多一个modifier,可以指示除了实例本身,还有谁可以对其进行修改。例如上面的例子,我们可以改造成
public class Person { public String name; public static void main(String[] args){ Person p = new Person(); p.name="JJ"; System.out.println(p.name); } }
但是这样太危险,所以一般情况下我们都不建议大家把字段定义为public的,只建议定义为private或者protected的。
同样,变量的定于,无论是field还是variable,都允许使用final,而static只允许在field定义的时候使用。而当我们把field同时定义为static和final的时候我们就会叫它做常量,它的命名规则必须是使用全大写,并且单词之间用下划线区别。
private static final String A_CONSTANT = "I'm a constant and I can never be changed". public login(final String username,final String password) { username = "I'm trying to make it dirty"; .... }
上例里面,第一个是一个常量的定义方式。第二个例子是一个常见的对方法参数变量定义为final的用法,这样可以防止方法中途因为不小心而把敏感的输入参数给修改了。在上例中,username的赋值会出错,原因是两个方法参数不允许修改,地址已经给锁住了。
今天内容到此结束,因为有点仓促可能写得不太好,我稍后再修改一下吧。。。
明天我们要说this和super这两个指针内建指针。
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8617如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2134今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1866最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1510今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1561最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7581关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2248昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2230布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1061今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1436自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2059现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1542因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 3974昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2568今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9514昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1246继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1548上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1509以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
掌握Java的变量和常量 标识符是用来给类、变量、方法、参数等命名的。 Java标识符 public class ComputeArea { double radius, area; void add(int a,int b){ int c = a + b; } Java标识符由数字,字母、下划线及...
(1)新建->变量名:JAVA_HOME变量值:D:\Java\jdk1.6.0_12(这只是我的JDK安装路径) (2)编辑->变量名:Path在变量值的最前面加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin (3)新建->变量名:CLASSPATH变量值:.;%JAVA_...
JAVA_HOME:C:\Program ... 5.JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:\java\jdk1.5.0_08,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);
这是近期在博客中记录的文章:【2023,学点儿新Java-30】变量的基本使用:变量的意义 | 变量的构成要素 | Java中变量的数据类型、变量的使用 | 附:Java中变量的作用域 | 数据类型、变量名和变量值哪个最重要?...
指向JDK安装后的根目录,如“ C:\Program files\Java\jdk1.8.0_20”,Eclipse、NetBeans等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 Path 环境变量 指向Java命令程序所在目录,设置Path后,操作系统...
大数据必学Java基础(十一):变量和常量
java 常量与变量 java 常量与变量
Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的...
JAVA读取环境变量 在windows、linux中都可以运行,可指定任何环境变量
Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程...
变量的作用域 目录 课程导入 理解变量作用域的概念 理解局部变量与全局变量的区别及作用域 能区分局部变量与全局变量,并读懂程序 变量的作用域(scope of a variable) 就指变量在程序中可以被引用的范围。 变量的...
变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.5.0_17(该目录为JDK安装的目录) 2.2,编辑CLASSPATH,如果没有该变量则新建, 变量名:CLASSPATH 变量值:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib...
java8_winxp:解压后,直接修改环境变量4、配置环境变量: (1)配置JAVA_HOME: 变量名: JAVA_HOME 变量值: D:\DevTools\JDK\jdk1.8.0_152 (2)配置CLASSPATH: 变量名: CLASSPATH ...
Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的...
java配置环境变量java配置环境变量java配置环境变量java配置环境变量
Java环境变量设置,.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\bin %JAVA_HOME%\jre\bin
71.069.JAVA基础教程_Java基本语法-复习3:变量的运算规则(71).rar
Java 面向对象中的两类 变量 : 成员变量和局部变量