zoukankan      html  css  js  c++  java
  • Java数据类型

    一、首先大概了解一下关于数据的内容或要点。

      1、程序在执行的过程中,需要对数据进行运算,也需要储存数据。这些数据可以是由使用者输入,也可以是从文件中取得的,也可以是从网络中获取的。在程序运行的过程中,这些数据通过变量储存在内存中,以便程序随时使用。

      2、若需要找到储存在内存中的数据,就需要将数据指定给变量,并命名,通过变量名(储存数据的内存空间)来找到相关数据。

      3、一个变量代表一个内存空间,数据就储存在这个空间中,然而由于数据在储存时需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来储存,因此,对不同的数据用不同的数据类型来区分。

      4、基本数据类型的数据所占的内存空间是固定的,在内存储存的是数值的本身,而引用数据类型存放的是指向该数据指向的地址,往往是由多种基本数据类型组成的,对引用数据类型的数据应用为对象的引用,所以也被称为复合数据类型。

    二、Java的数据类型可以基本地分为8种基本数据类型和引用数据类型。

      1、下面的表格是Java数据类型的总结:

    数据类型 关键字 占用字节数 默认数值 取值范围 封装类
    逻辑型 boolean 1 false true;false Boolean
    字节型 byte 1 0 -27~27-1 Byte
    短整型 short 2 0 -215~215-1 Short
    整型 int 4 0 -231~231-1 Integer
    长整型 long 8 0L -263~263-1 Long
    单精度浮点型 float 4 0.0f

    负数范围:-3.4028235E+38~-1.4E-45

    正数范围:1.4E-45~3.4028235E+38

    Float

    双精度浮点型 double 8 0.0d

    负数范围:-1.7976931348623157E+380~-4.9E-324

    正数范围:4.9E-324~1.7976931348623157E+308

    Double

    字符型 char 2 'u0000'

    'u0000'~'uffff'

    Character

        所以:boolean、byte<short、char<int、float<double、long

      2、一个整型数隐含为整型(int)型,当要将一个整数强制表示为长整型时,需要在数值的后面加上L,所以若声明long型变量的值超过int型的取值范围时,如果数的后面不加上 “l”或者“L”,系统会认为是int型而出错。而一个浮点数隐含为double型,若在一个浮点数后加上“f”,或者“F”,将其强制转成float类型,所以声明的时候,需要在数值的后面加上“f”。“F”,否则会默认是double类型而系统会出错。

      3、boolean类型的只有true or false ,不能转成数值类型。一般用于逻辑型的控制语句中,如if,for,while语句中。

      4、char字符型,储存的单个字符。Java语言中字符采用的是Unicode字符集编码,在内存中栈两个字节,可以储存Unicode字符集中,每一个字符,包括汉字。注意的是在char类型声明的是单个字符,所以必须使用单引号括起来,若要取Unicode字符集的值时就必须强换转int类型,如(int)‘a’,其值介于0-65535之间,相反若要取某一值对应在Unicode集中的字符时就必须将整型强转成字符型,

        如int c=20300; char s =(char)c。

      5、引用类型(对象类型):最常用的特殊String(字符串),类,接口,数组等。在之后的数组、字符串和面向对象会详细介绍。

    三、讨论一下java中数据类型存储的位置(这里是引用其他大神的来理解理解,总结的还是不错的)

          基本数据类型存储位置,取决于基本类型在哪声明:
               1.基本数据类型在方法中声明时,其变量名和值都是存储在java栈中的;
                     在方法中声明基本类型数据:
                          例: int  a = 10
                           ①  在栈中声明一个变量名为a的引用;
                           ②  在栈中查找是否有字面值为10的地址,如果没有就开辟一个存放字面值是10的地址;
                           ③  将变量名为a的引用指向字面值为10的地址;
     
               2.基本数据类型在类中声明时则是存储在堆内存中的;
                           ①  在类中声明的基本数据类型,在类加载时会存储到方法区中;
                           ②  在java堆中从生成代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口;
                           ③  static 关键字修饰的数据是属于类本身的,存储在方法区中;
                           ④  final 关键词修饰的数据表示引用不变的,存储在常量池中;
     
               3.基本数据类型的包装类:
                         ①  Integer i = 10; 同 i = 10 的声明过程。
                         ②  Integer i = new Integer(10);   数据10 是存储在堆中的;
      
      引用数据类型一定输存储在堆中的吗?
              1. 特殊的String类
                         例 : String str = “abc”;
                         ①  在栈中声明一个变量名为str的引用;
                         ②  在常量池中查找是否有“abc”的字符串对象,如果没有就在常量池中创建存储一个值为“abc”的字符串对象;
                         ③  将str的引用指向字符串对象“abc”;
                         ④ 当 再次声明 String str1 = "abc",常量池中已经有“abc”对象,所以str1直接指向abc的地址;
                         ⑤ str = str1,引用数据类型比较,比较的是应用的地址;
                  注: String str = “abc” 没有创建或创建一个对象
              2.其他引用类型
                        Stirng str = new String("abc");
                         ① 在栈中声明一个变量名为str的引用;
                         ② 在堆中创建存储一个字符串对象“abc”;
                         ③ 检查常量池中是否有字符串对象“abc”,如果没有就在常量池中创建存储一个值为“abc”的字符串对象;
                         ④ 将堆中字符串对象“abc”与常量池中字符串对象“abc”联系起来,可以用intern方法返回常量池中的对象的引用;
                         ④ 将str的引用指向堆中 字符串对象“abc”;
             注: String str = new String ("abc")创建一个或两个对象;
    四、数据类型转换
       1、数值型之间的转换主要分成两大类:隐含类型转换(缺省类型转换)和强制类型转换。
          隐含类型转换:简单点说就是将所占字节数比较小(简称短型)的数转换成字节数比较大(简称长型)的数。它是编译系统自动完成的,不需要程序来说明。
              byte<short<char<int<long<float<double
          强制类型转换:刚好相反是将长类型的数转换成短类型的数,而且需要特别的说明否则会出现编译错误。
              格式:(欲转换的数据类型)变量名 double a; int b = (int)a;
         总结:这里考点主要是两数相除后输出的结果是怎样,有没有小数点后的数等,等问题。将其中一个或两个都转换等,按照上面的原则细心分析就不会有错了。
       2、字符串与数值之间的转化:
          (1)、字符串转换成数值类型数据
            就是对应的封装类中都提供了该方法(包括Boolean)的。
            如:String num="123";
                Integer.parseInt(num);
                Byte.parseByte(num);
          (2)、数值型数据转换成字符串
            这里特别的简单就是用“+”和一个“”号便能实现
            如:int num = 123;
              String myNum = ""+num;
         总结:其他的也类似这样的,其实没记住具体方法不要紧,主要记得可以进行转换,可以通过查资料来使用。
    五、常量声明
        常量声明的形式与变量的声明形式基本一样,只需用关键字final标识,通常final写在最前面,如final float PI=3.14f,final int MAX = 100;
         建议常用标识符全部使用大写字母表示。并且它主要有两个好处就是:一是增加可读性,从常量名可知常量的含义;二是增强可维护性,程序中多处使用常量时,当要对它进行修改时,只需在声    明一处进     行修改就行。
    六、标识符、关键字、常用转义字符
      1、一些不常见的关键字:instanceof、volatile、assert、package、enum、transient、continue、native、synchronize、import,多记记,笔试可能会考的,其他关键字一样的中必须一眼就知道是关键字不能用来命名变量(不是做标识符)。
      2、Java中的标识符需要满足一下的条件:
        (1)、标识符可以由字母、数字和下划线(_)、美元符号($)等组成。
        (2)、标识符必须以字母、下划线或美元符号开头,不能以数字开头。
        尽量命名标识符时不要随便,要有意义,增强程序代码的可读性。而且Java中是区别字母的大小的,还有就是命名时应该遵守相应的命名规则,变量名一般小写,需要单词组合的话就是骆驼命名法
        如:firstName lastName等,package(包名)一般全是用小写,并以cn/com这些来开头,如 cn.jl.service等,还有类名,接口名就首字母大写Test.class,方法名也是骆驼命名法。
      
     
                
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    课后作业
    动手动脑
    原码,补码,反码
    CodingSouls团队项目冲刺-个人概况(7)
    《人月神话》阅读笔记03
    数据库学习
    家庭小账本——数据库的编写与测试
    家庭小账本——适配器的编写与测试
    UI高级组件
    UI高级组件
  • 原文地址:https://www.cnblogs.com/liangxiaojin/p/7425831.html
Copyright © 2011-2022 走看看