`
jgnan
  • 浏览: 87503 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

每天简单JAVA教学:变量

阅读更多
很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。

今天有点偷懒,简单地给大家介绍一下变量的定义。

什么是变量,简单来说就是一个地址指针,而且这个指针的内容应该是可变的。而变量的作用就是给我们在写程序的时候临时存储要处理的数据。

在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程序设计基础:变量与常量.pptx

    掌握Java的变量和常量 标识符是用来给类、变量、方法、参数等命名的。 Java标识符 public class ComputeArea { double radius, area; void add(int a,int b){ int c = a + b; } Java标识符由数字,字母、下划线及...

    java环境变量一键设置

    (1)新建-&gt;变量名:JAVA_HOME变量值:D:\Java\jdk1.6.0_12(这只是我的JDK安装路径) (2)编辑-&gt;变量名:Path在变量值的最前面加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin (3)新建-&gt;变量名:CLASSPATH变量值:.;%JAVA_...

    java环境变量配置 JDK环境变量

    JAVA_HOME:C:\Program ... 5.JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:\java\jdk1.5.0_08,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依*此变量);

    变量的基本使用:变量的意义 变量的构成要素 Java中变量的数据类型、变量的使用(示例代码)

    这是近期在博客中记录的文章:【2023,学点儿新Java-30】变量的基本使用:变量的意义 | 变量的构成要素 | Java中变量的数据类型、变量的使用 | 附:Java中变量的作用域 | 数据类型、变量名和变量值哪个最重要?...

    Java程序设计基础:环境变量配置.pptx

    指向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线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的...

    JAVA读取环境变量

    JAVA读取环境变量 在windows、linux中都可以运行,可指定任何环境变量

    Java多线程编程总结

    Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程...

    Java程序设计基础:变量的作用域.pptx

    变量的作用域 目录 课程导入 理解变量作用域的概念 理解局部变量与全局变量的区别及作用域 能区分局部变量与全局变量,并读懂程序 变量的作用域(scope of a variable) 就指变量在程序中可以被引用的范围。 变量的...

    java jdk安装 环境变量.txt

    变量名: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

    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配置环境变量.txt

    java配置环境变量java配置环境变量java配置环境变量java配置环境变量

    Java环境变量设置.txt

    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

    71.069.JAVA基础教程_Java基本语法-复习3:变量的运算规则(71).rar

    Java 成员变量和局部变量

    Java 面向对象中的两类 变量 : 成员变量和局部变量

Global site tag (gtag.js) - Google Analytics