Java基本数据类型-阿里云开发者社区

开发者社区> 涂作权> 正文

Java基本数据类型

简介: Java基本数据类型总结 种类共有8种 byte 1Byte = 8bit -128 ~127 short 2Byte = 16bit -32768 ~ 32767 int 4Byte = 32bit -2147483648~+2147483647 long 8Byt
+关注继续查看

Java基本数据类型总结

种类共有8

byte

1Byte = 8bit

-128 ~127

short

2Byte = 16bit

-32768 ~ 32767

int

4Byte = 32bit

-2147483648~+2147483647

long

8Byte = 64bit

263次方 ~ 263次方-1

Float(单精度)

4Byte = 32bit

 

Double(双精度)

8Byte = 64bit

 

布尔类型boolean

 在jvm中为int,或short

true,or false 

char

 2Byte = 16bit

表示一个unicode的字符 

 

引用数据类型:接口,枚举,类,数组,注解

 

 

  内存中以二进制的形式存放数据,这个二进制以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

                               boolean类型

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java基本语法-----java数据类型的转换
Java基本语法-----java数据类型的转换
3434 0
Java 中基本类型和字符串之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2.
609 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8425 0
【C/C++】C/C++基本数据类型
标准C基本数据类型:int char long short float double void以及它们与signed、unsigned的组合。标准C++增加了bool型和wchar_t型,在32位操作系统上,它们的长度如下表: ...
706 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
12061 0
javascript判断数据类型
js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 object: 这个我也很难解释的说。
690 0
+关注
涂作权
java,架构,编程语言相关专家
1234
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载