java变量

  关于java语法基础,只是点挺多的,本来想以知识点的形式整理一下。结果发现但是java变量的知识点就很多,都写在一起太乱了。索引,这里就只做java变量的复习吧。

        java变量的类别和含义:java变量包含静态变量(static Variable)、成员变量()和局部(local Variable )变量三种。其实,也可以说两种,静态变量和成员变量都是全局变量(Global Variable),只是成员变量是动态的,还有就是,静态变量的生存周期是由类决定的,是在加载类文件时初始化的;而成员变量则是在类中没有用static修饰的变量,它的生存周期是由对象决定的,是在new 一个对象时初始化的。额,这里又牵涉到了类和对象两个问题,这个先放一放吧,我们先说局部变量。所谓的局部变量,就是定义在方法里的变量、方法的参数和代码块中的变量,它们的作用范围是用大括号{}来界定的。啧啧,前几天帮师妹调试程序,费了好大的劲儿才发现有一个变量时try方法里定义,结果在try方法外面调用时出现了异常,当时不太懂为什么。现在终于弄明白了。

  

  变量的数据类型通俗的说就是在内存中保存数据的形状,包含基本数据类型和引用数据类型。

  《java程序员面试宝典》有一个问题是:基本数据类型和引用数据类型的区别.我觉得答案应该是:二者新建的方式不同,我们知道JVM在启动时,会自动创建用来存储8种基本数据类型和String的静态对象池,当我们新建一个基本类型的变量时,JVM会先去相应数据类型的静态对象池中检查是否已经有这个对象,如果有,就直接取这个对象,否则就在对象池中新建一个对象,并返回应用,这种方法创建的对象的地址存放在栈中。引用数据类型一般用new方法来创建,这种方法创建的对象都是一个新的兑现,它们的地址会存放在堆(这里的堆栈是数据存储地址,不同于数据结构)中。但是String有些特殊,可以直接用双引号来新建一个对象,这种新建方式就类似于基本数据类型的新建,当然,也可以用new方法新建。 哎呀,怎么又有知识点要复习啦。看来,还得复习微机原理的只是才行。好吧,这里就先简单解释一下堆栈在JVM中的应用吧。JAVA中,JVM会把程序创建的对象放在堆空间中,堆(heap)是一个运行时的数据存储区,用它可以分配大小各异的空间。一般来说,运行时的数据存储区有堆(heap)和栈(stack)两种。栈中的尸体数据的分配和释放是由系统自动完成的,而堆中存放的数据都是程序显式分配的,内有自动垃圾回收机制的系统中必须由程序代码显式的释放这些实体。不过,JVM带有自动垃圾回收机制,所以不需要显式的释放数据实体。

  基本数据类型有8种:byte(1 Byte ) /short(2 Byte  )/int(4  Byte )/long(8 Byte)/float(4 Byte)/double(8 Byte)/boolean(true/false)/char(2 Byte)【1 Byte=8 Bit】

        int是最常用的整型类型,因此通常情况下,一个java整数常量默认的就是int类型。除此之外,两种情况需要特别之处:

             如果直接将一个较小的整数常量(在byte或short范围内)赋给一个byte或short变量时,系统会自动把这个整数变量当成byte或short来处理。

             如果使用一个巨大的整型常量(超出int类型的范围)时,java不会自动把这个整数常量转换成long类型来处理。如果希望系统把一个整型常量转换成long类型来      处 理,应在这个常量后面加l或L来处理。通常建议L,以避免l和1混淆。不过,当整型变量的值较小时,我们可以这个变量直接赋给一个long类型的变量,这是因为这个int类型的值会自动转型到long类型。下面一段代码可以验证这两点:

                      //下面的代码是正确的,系统自动把56当成byte类型的

                       byte a=50;

                     //下面的代码是错误的,数据超出int类型,系统不会自动当成long类型

                       long b=999999999999;

                     //下面的代码是正确的,数据超出int类型时后面加L,强制使用long类型。

                      long c=9999999999999L;

     

  布尔型只有true和false两个数值,String类型的“true”和“false”不能直接转换成布尔型,但是如果使用一个boolean类型的值和字符串进行连接运算,可以转换成String类型。如:String str=true+"";

   java基本类型中除了boolean以外的7种之间可以相互转换,有自动类型转换和强制类型转换。

    当把一个表数范围较小的数值或变量转换成另一个表数范围较大的变量时,系统可以进行自动类型转换。如图:

 

     

   不仅如此,当把任何基本类型的值和字符串进行连接运算时,基本类型的值都将自动转换成字符串类型。所以,我们在sql语句时用字符串连接的方式就可以方便很多。

   如果希望把上图中右边的类型转换成左边的类型,就要使用强制类型转换。格式是(targetType)value,()是强制转换符号,value是值,targetType是目标类型。不过,这样很容易造成信息丢失。就像把一个大瓶子里的水倒到一个小瓶子里,如果大瓶子里的水很多的话,就会引起溢出,从而造成数据丢失。

          通常情况下,String不能转换成基本类型,但通过相应的包装类可以实现这种转化。java为8中基本数据类型都提供了包装类,这些包装类都提供了paraseXxx(String str)的静态方法用于将字符串转化成基本数据类型。  之前看到一个问题:int和Integer的区别。这就涉及到了基本数据类型和包装类啦。显然,Integer是int的包装类,把基本数据类型转换成包装类实例(引用数据类型)是通过包装类的构造器来实现的。如:

              int a=5;

               Integer b=new Integer(a);

              这里也有一个问题需要注意:如果传入的字符串不能成功转换成相对应的基本类型变量,就会引发java.lang.mberFormatExcepton异常。

             String类也提供了多个重载的valueOf()实现基本类型转换成String类型。当然,还有一个更简单的转换方式就是字符转连接。

  引用数据类型就是除开基本数据类型以外的数据类型,它主要是用来指向某个对象的。包括字符串、数组、自定义的类、接口、非基本数据类型的数据类型等,噢,差点忘了还有一个特殊的引用数据类型null。但是null又是String类型的默认值。

               对于String类型,我们要特别注意null和空字符串的区别: null分配了内存空间,可以调用String的方法,比如toString()和.euqals()等,但是""(空字符串)没有分配内存空间,不能调用String方法,否则会出现java.lang.NullPointerException异常。所以,在运用String的方法是我们要尽量避免对空字符串调用。

            很重要的一点:char类型常量用单引号括起来,String常量要用双引号括起来。

               另外,值得指出的是:java语言中的单引号、双引号和反斜线都有特殊的用处。如果一个字符串中包含了这些特殊字符,就要使用转义符的表示形式。例如,我们希望在java程序中表示一个绝对路径:“d:\codes”,但是这种写法得不到我们期望的结果,因为java会把反斜线当成转义符,索引我们应该写成“d:\\codes”。

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值