您的位置:首页 > 编程语言 > Java开发

JAVA环境变量以及变量初始化的问题

2014-03-27 22:22 417 查看



安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下,jdk和jre安装在同一文件夹会出错)

在myeclipse 当中已经自行安装了内置的jdk和jre,而Eclipse当中没有。

1)在系统变量里新建JAVA_HOME变量,变量值为:C:\Program
Files\Java\jdk1.6.0_14(根据自己的安装路径填写)
2)新建classpath变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
3)在path变量(已存在不用新建)添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(注意变量值之间用“;”隔开)

只知道第三个环境变量的作用是可以在任何地方运行javac

javahome就是java的家,你电脑里jdk包可能会换地方存放,如果你换了路径,就需要修改path,这样会很麻烦,因为path里面还有很多其他的路径。所以设置一个javahome,以后你不管怎么修改jdk存放路径,把javahome改成你的路径就行了

classpath,就是class文件的路径,当你编译一个源文件,会生成一个.class文件,如果设置了classpath,当你执行java时,它就会去classpath路径里面找你要执行的class文件,如果没有设置,它就只能执行当前文件夹下的class文件。在前面加上.;这样它就会先在当前目录找.class文件,如果没有,再去classpath路径下找


转自:http://blog.163.com/shuzhen_an/blog/static/119399304200962334211324/

类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值。 

 默认值如下:

             Boolean      false

             Char           '\u0000'(null)

             byte            (byte)0

             short           (short)0

             int               0

             long            0L

             float            0.0f

             double        0.0d
2. 局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化。

      但是需要声明的是:对于只负责接收一个表达式的值的局部变量可以不初始化,参与运算和直接输出等其它情况的局部变量需要初始化。

通过下面这个测试可以看到JVM对哪些数据初始化,哪写数据不初始化:

public class TestStatic {

 static int x; //类的成员变量,JVM负责初始化
 static int method()

 {

    int y=0;  //此处必须自己初始化,它不属于类成员变量,是个method的局部变量,JVM不负责初始化

    return y;

 }

 public static void main(String[] args) {

     TestStatic as=new TestStatic();

     int z=0;  //此处必须自己初始化,它不属于类成员变量,是个主函数里的局部变量,JVM不负责初始化

     int aa=3; //此处aa参与了运算,所以必须初始化

     aa=aa+2;

     int a=1,b=2,max; //max只是负责接收表达式的值,不需要初始化

     max=a>b?2:1; 

     System.out.println(max); //1
     System.out.println(aa); //5
     System.out.println("z="+z); //z=0
     System.out.println("x="+as.x); //x=0  

    System.out.println("y="+as.method()); //y=0
 }



总结为一句话便是:
 类里定义的数据成员称为属性,属性可不赋初值,若不赋初值则JAVA会按上表为其添加默认值;方法里定义的数据成员称为变量,变量在参与运算或者打印输出等使用之前必须赋初值。

本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。

1. 类的属性,或者叫值域

2. 方法里的局部变量

3. 方法的参数

对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。

int类型变量默认初始值为0
float类型变量默认初始值为0.0f

double类型变量默认初始值为0.0
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
long类型变量默认初始值为0

所有对象引用类型变量默认初始值为null
,即不指向任何对象。

注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。初始化的数组如datetype[] a = new datetype[10];无论是局部变量还是全局变量,都初始化为各种类型的默认值了。

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!

其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: