- 浏览: 88771 次
- 性别:
- 来自: 广州
最新评论
很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。
今天有点偷懒,简单地给大家介绍一下变量的定义。
什么是变量,简单来说就是一个地址指针,而且这个指针的内容应该是可变的。而变量的作用就是给我们在写程序的时候临时存储要处理的数据。
在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 8688如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2168今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1902最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1547今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1602最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7612关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2303昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2277布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1090今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1508自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2085现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1578因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4023昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2607今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9561昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1279继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1583上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1546以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
这本教程可能适合自学或作为教学辅助材料,通过每天系统地学习和实践,读者可以在短时间内对Java编程有一个全面的理解。然而,需要注意的是,真正的精通不仅仅在于时间的长短,更在于对知识的深入理解和不断的实践...
在本资源中,我们聚焦于刘意老师关于Java基础的系列教学,涵盖了从第九天到第十六天的源码学习材料。这些文件名分别代表了每天的课程内容,包括day13、day11、day12、day15、day16、day10、day09和day14,暗示了课程...
1. **系统性教学**:本书按照21天的时间规划进行组织,每天的学习内容都有明确的目标,有助于读者循序渐进地掌握Java知识。 2. **实践导向**:除了理论知识外,书中还提供了大量的实例和练习,让读者能够通过动手...
这些文件很可能代表了五天的学习内容,每天一个主题,通过SWF(Shockwave Flash)格式的文件,可能是视频教程或互动教学内容。 以下是这些文件可能涵盖的一些核心Java知识点: 1. **Day01**: 第一天通常会介绍Java...
首先,"达内JAVA课件PPT演示文稿(全)"是教学资源的重要组成部分,通常包含以下知识点: 1. **Java基础**:涵盖变量、数据类型、运算符、控制流程(如if语句、for循环、while循环)、数组等基础知识。 2. **面向...
这个压缩包很可能是为了辅助教学,让学习者能够通过实际的代码例子来理解和实践Java编程的基本概念和技术。 【描述】"1java初学者学习源代码.7z" 的描述简洁明了,直接指出了这是专为Java初学者设计的学习材料,以...
- 相比于C++和Java,Python的语法更简单,初学者能更快地编写出有意义的程序。 - Python的交互式特性使得学习过程更为直观,适合初学者理解编程概念。 3. **教程结构**: - **安装**:介绍如何在不同平台上安装...
- **Basic**: 简单易学,适合教学。 - **JavaScript**: 主要用于Web前端开发。 - **Python**: - **优点**: - 语法简洁,易于学习。 - 庞大的标准库和第三方库支持。 - 广泛应用于数据科学、Web开发等领域。 - *...
它旨在作为一个教学语言,帮助开发者理解编译器和解释器的工作原理。在Java环境中实现Lox,即我们所说的jlox,为学习语言解析、词法分析、语法分析和虚拟机执行提供了理想的实践平台。本文将深入探讨jlox的实现细节...
- **动态类型**: Python是一种动态类型语言,变量无需事先声明类型。 - **解释型**: Python代码在运行时被逐行解释执行,而不是预先编译成机器码。 - **面向对象**: Python支持面向对象编程(OOP),允许开发者创建...
2. **环境配置**:如安装和配置Java Development Kit (JDK),设置环境变量,搭建开发环境如Eclipse或IntelliJ IDEA,以及Tomcat服务器的安装和启动。 3. **动态网页技术**:JSP语法,EL(Expression Language)和...