Java中的数据类型

  1. 程序的基本功能是处理数据,程序使用变量来表示数据,在程序中需要先定义变量,才能够使用,定义变量是指设定变量的数据类型和变量的名字;

  2. 基本数据类型

     boolean          1(8位)                   true,false                       false

     byte                1(8位)                   -128~127                         0

     short               2(16位)                  -215 ~215 -1                      0

     int                   4(32位)                  -231 ~231 -1                      0

     long                8(64位)                  -263 ~263 -1                      0

     char                2(16位)                  0~216 -1                         '/u0000'

     float                4(32位)

     double            8(64位)

 

  内存中以二进制的形式存放数据,这个二进制以8位为一个单位,每8位构成一个字节(byte)

  (1)boolean类型

       a.boolean类型的变量只能够取true或者false,在JVM中,会使用int或者byte表示boolean,但是这对Java源程序是屏蔽的,在Java源程序中,boolean类型的变量值只能够取true或者false;

   (2)整数类型byte, short, int, long

          a 都是整数类型,都是有符号的整数 

          b 在Java语言中,如果数学表达式都是整数,则表达式的返回值只可能是int类型或者long类型,如果把返回值赋给byte类型的变量,就必须进行强制类型的转换(类型转换的目的是截断数据,保存数据的后若干位,使它满足结果类型的需要,因为long的内存位数要比int多,因此保存时不需要截断数据就可以保存)

          c 在给整数类型变量赋值时,如果该整数值在类型的取值范围内,就可以把它直接赋给这种类型的变量,如果不在,则需要进行强制类型转换

    (3)char类型

           java中使用Unicode对字符进行编码,由于计算机中只能够保存二进制的数据类型,因此需要为各个字符进行编码,常用的是ASCII码,这种编码使用一个字节的7位,一共能够表示128个字符

  3. 引用类型

      3.1 引用类型可以分为类引用类型(引用类或者子类的实例),接口引用类型(引用实现接口的类的实例)和数组引用类型(数组是Java中真正的对象)

      3.2 如果一个引用变量不引用任何对象,可以给它赋值为null

  4. 基本类型 vs 引用类型

      (1)基本类型代表简单的数据类型,引用类型引用的实例能表示任意一种复杂的数据结构(引用变量字段在执行Java程序时要进行常量池解析,具体就是有直接引用代替符号引用)

      (2)基本类型仅表示数据类型,引用类型所引用的实例除了表示复杂数据结构类型外,还能够包括操纵这种数据类型的行为

      (3)对于基本类型的变量,JVM会为其分配数据类型实际占用的内存空间,对于引用类型变量,它仅仅是一个指向堆区中某个实例的指针。

  5. new 方法

      (1)当一个引用类型的变量被定义之后,如果没有进行初始化,则它不指向任何对象,即默认值为null;

      (2)使用new方法创建对象的过程

                a 为对象分配内存空间,将对象的实例变量 自动初始化为其变量类型的默认值;

                b 如果实例变量在定义时显示初始化,则把初始化值赋给实例变量;

                c.调用构造方法

                d.返回对象的引用

  6.变量的作用域

        a. 变量的作用域指它的存在范围,只有在这个范围中,程序代码才能够访问它;

        b. 变量的作用域决定变量的生命周期,变量的生命周期指从一个变量被创建并分配内存空间开始,到这个变量被销毁并清除它所占用的内存空间的过程,当一个变量被定义时,它的作用域就确定了。

        c.根据作用域得不同,可以将变量分为以下几种类型:

            c.1 成员变量:在类中声明,作用域是整个类(在哪里声明,作用域是哪里)

            c.2 局部变量:在一个方法内部或者在方法的代码块内部生命,如果在方法中声明,则它的作用域是整个方法,如果在代码块中声明,它的作用域是这个代码块;

            c.3 方法参数:方法或者构造器的参数,它的作用域是整个方法或者构造器;

            c.4 异常处理参数: 传递给异常处理代码块,即catch(Exception e)语句中的异常参数e,它的作用域是紧跟catch(Exception e)语句后的代码块

  7.分析各种变量:成员变量  局部变量

            7.1 成员变量有两种,一种是被static修饰的变量,称为类变量或者静态变量,另一种没有static修饰,称为实例变量。

                  a.静态变量在内存中只有一个 ,只有当某个类被程序首次主动调用时,才会对该类型进行初始化,在初始化之前首先进行加载和连接操作,在连接的准备阶段给类变量分配内存,并赋予默认的初始值,在初始化阶段,对静态变量进行初始化(静态变量有两种初始化方式,一是在定义时直接进行初始化,二是在静态代码块中进行初始化)(静态变量仅初始化一次),类变量创建后,一直保存在内存运行时数据区的方法区中,保存在类型信息中,被该类型的所有实例所共享,静态变量可以通过类名访问,静态变量的生命周期取决于类的生命周期,当加载类的时候,静态变量被创建并分配内存(变量生命周期开始),当卸载类时,静态变量被销毁,并释放所占的内存(这时变量的生命周期结束)

                  b.类的每一个实例都有自己的实例变量,因此可以有多个实例变量,每创建一个实例,JVM就创建实例变量并分配内存,实例变量的生命周期也就开始了,当销毁对象实例时(内存被GC回收,对象的实例变量也就结束了它的生命周期)

                  c.不能够通过类名访问类的实例变量,因为类的每个实例变量都属于类的某个具体的实例,用类名访问实例变量不知道具体是访问那个实例的实例变量;

          静态变量的生命周期取决于类型何时被加载以及卸载,实例变量的生命周期取决于实例何时被创建以及销毁

             7.2 局部变量

  局部变量的生命周期取决于所属的方法何时被调用以及结束调用;

   当JVM中的某个线程调用一个方法时,会为这个方法中的局部变量分配内存(在堆区的Java栈中),当JVM执行结束一个方法时(或者是方法执行完毕,或者是出现某些异常),该方法的生命周期结束,方法的局部变量的生命周期也随之结束

  不允许在相同的作用域中使用相同名字的变量,但是在不同的作用域中,变量的名字可以相同,比如,如果局部变量和某个实例变量重名,在局部方法中,局部变量会覆盖实例变量,如果让实例变量可见,应该使用this关键字进行调用

 

  8.参数传递

        如果方法的参数是一个简单类型,则直接传递参数的值,如果方法的参数是一个引用类型(类类型或者接口类型)或者数组类型,则传入方法中的是对象的引用,也就是对象的地址(是一个值)

        需要注意的一点是,调用方法的局部变量如果作为被调用方法的参数使用,它们也不是一回事,调用方法的局部变量和被调用方法的参数保存在不同的内存空间中,前者保存在调用方法的栈帧的局部变量区中,后者保存在被调用方法的局部变量区中,它们的值可以相同,如果传入的是引用类型的变量,参数和变量保存相同的地址,这样,如果在被调用方法中修改地址中的对象的数据,实际对象就会发生改变(因为这是对内存的永久性的操作),即使被调用的方法的生命周期结束,调用方法的局部变量所引用的对象的值还是会跟着变。

  9.变量的初始化

   (1)对于成员变量(无论是静态的类变量还是实例变量)可以是先定义,再使用,因为JVM在为这些变量分配内存时,会首先根据类型为这些变量赋予默认值;

   (2)对于局部变量,必须是先定义,再初始化,才能够使用,因为JVM在栈帧中为局部变量分配内存空间时,并不会为局部变量赋予默认值。

 

  10.直接数的复制

    Java中共有7种直接数:int  long  float  double  String  char boolean

  (1)基本类型不能付给引用类型,这里String是引用类型,因此String类型和char类型之间不能够相互赋值

  (2)boolean类型的直接数只能够赋给boolean类型的变量,同样,boolean类型的变量值接受boolean类型的直接数

   (3)把Int类型的直接数赋给byte,short或者char类型的变量是,如果直接数在这些变量的取值范围内,则可以直接赋值,如果不在变量类型的取值范围内(变量的类型说明了变量的取值范围以及在变量上能够进行的操作),必须进行强制类型转换

  (4)将float和double类型的直接数赋给整形变量时,必须进行强制类型转换,而把整数型直接数赋给float和double型变量时,允许直接赋值

  (5)float直接数允许直接赋给double类型的变量,而

    在总结一次

     Java中直接数的类型:int  long  float  double  char  String  boolean

 

     java中变量的类型 整数类型:byte short int long

                               字符类型:char

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值