Java基础学习第二天——基础数据类型介绍

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.02.21 lutianfei none


第二章 Java基础语法

  • 本章内容
    • 关键字
    • 标识符
    • 注释
    • 常量、进制和进制转换
    • 变量
    • 数据类型和类型转换
    • 运算符
    • 语句

(一)关键字

  • 关键字概述
    • 被Java语言赋予特定含义的单词
  • 关键字特点
    • 组成关键字的字母全部小写
  • 关键字注意事项
    • gotoconst作为保留字存在,目前并不使用(在JDK的新版本中可能提升为关键字)




(二)标识符

  • 标识符概述
    • 就是给类,接口,方法,变量等起名字时使用的字符序列
  • 组成规则
    • 英文大小写字母
    • 数字字符
    • $_
  • 注意事项
    • 不能以数字开头
    • 不能是Java中的关键字
    • 区分大小写

1、常见命名规则

  • 基本原则:见名知义
  • 常见命名
    • (其实就是文件夹,用于解决相同类名问题,全部小写)
      • 单级:miaolu,liuyi
      • 多级(用.隔开):cn.ali
    • 类或者接口每个字首字母大写,含有大小写。
      • 一个单词 : 首字母大写 eg:Times
      • 多个单词:每个单词首字母大写。 eg: StudentAge,ShowAllAge
    • 方法和变量
      • 一个单词 : 全部小写 eg:main,age
      • 多个单词:从第二个单词开始每个单词首字母大写。 eg: studentAge,showAllAge
    • 常量名基本数据类型的常量名使用全部大写字母,_字与字之间用下划线分隔。对象常量可大小混写。
      • 一个单词 : 字母大写 eg:TIME
      • 多个单词:字母大写,每个单词用_隔开。 eg: SIZE_TYPE

(三)注释

  • 注释概述
    • 用于解释说明程序的文字
  • Java中注释分类格式

    • 单行注释
      • 格式: //注释文字
    • 多行注释
      • 格式: /* 注释文字 */
    • 文档注释
      • 格式:/** 注释文字 */
      • 对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
  • eg:标准注释举例:

//标准注释

/*
 * 需求:准备写一个Java程序,把HelloWorld!!!这句话输出在控制台
 * 分析:
    * A:要写一个Java程序,必须定义类
    * B: 把数据能够输出,说明我们的程序时可以独立运行的,而 程序要独立运行,必须定义main方法
    * C: 把数据输出在控制台,必须使用输出语句

 * 实现:
    * A:java 语言提供了一个关键字:class用来定义类,后面跟的是类名
    * B: main方法的格式是固定的:
        * public static void main(String[] args){

        }
    * C:输出语句的格式是固定的:
        System.out.println("HelloWorld");
*/

//这是一个HelloWorld案例
class HelloWorld{
    /*
        为了程序能够独立运行,定义main方法
        main方法是程序的入口,被jvm自动调用
    */
    public static void main(String[] args){
        System.out.println("HelloWorld");
    }
}


(四)常量

  • 常量概述
    • 在程序执行的过程中其值不可以发生改变
  • Java中常量分类

    • 字面值常量
    • 自定义常量(面向对象部分讲)
  • 字面值常量分类

    • 字符串常量 用双引号括起来的内容
      • “Helloworld”
    • 整数常量 所有整数
      • 12,23
    • 小数常量 所有小数
      • 12.34,56.78
    • 字符常量 用单引号括起来的内容
      • ‘a’,’A’,’0’(必须只能是一个字符)
    • 布尔常量 较为特有,只有truefalse
    • 空常量 null(数组部分讲解)
  • 注对于数值默认按十进制处理。

    • 二进制:0b100
    • 八进制 :0100
    • 十进制: 100
    • 十六进制:0x100

原码、反码、补码

有符号数据表示法
  • 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的
  • 原码
    • 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
  • 反码
    • 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
  • 补码

    • 正数的补码与其原码相同;负数的补码是在其反码的末位加1
  • 有符号数据练习

    • 已知某数X的原码为10110100B,试求X的补码和反码。
    • 已知某数X的补码11101110B,试求其原码。(补码 ->原码 符号位除外直接取反加1)


(五)变量

  • 变量概述
    • 在程序执行的过程中,在某个范围内其值可以发生改变的量
    • 理解:如同数学中的未知数
  • 变量定义格式
    • 数据类型 变量名 = 初始化值;
    • 注意:格式是固定的,记住格式,以不变应万变

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间

数据类型 默认值 存储格式 数据范围
short 0 2个字节 -32,768到32767
int 0 4个字节 -2,147,483,648到2,147,483,647
byte 0 1个字节 -128到127
char /u0000 2个字节 Unicode的字符范围
long 0L或0l 8个字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807
float 0.0F或0.0f 4个字节 32位IEEEE 754单精度范围
double 0.0或0.0D(d) 8个字节 64位IEEE 754双精度范围
boolean false 1位 true(1)或false(0)


  • 注:

    • 整数默认:int
    • 小数默认:double
    • 长整形后缀用L或l标记。建议用L。
    • 单精度浮点数用F或f标记。建议用F。
  • 使用变量注意事项:

    • 作用域
      • 变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。
      • 相同的作用域中不能定义两个同名变量。
    • 初始化值
      • 没有初始化值不能直接使用。只要在使用之前给值就行,不一定在定义的时候立马给值。

数据类型的默认转换

  • 一般来说要求参与运算的数据类型必须一致。
  • boolean类型不能转换为其他的数据类型
  • 默认转换(小类型先转成大类型再参与运算)
    • byte,short,char—>int—>long—>float—>double
    • byte,short,char相互之间不转换,他们参与运算时首先转换为int类型

数据类型的强制转换

  • 目标类型 变量名=(目标类型)(被转换的数据);
    • eg:byte c = (byte)(a+b); //int a,byte b;

数据类型中几个小问题

  • 1、在定义Long或者Float类型变量时,要加LF
  • 2、byte,short在定义的时候,他们接收的其实是一个int类型的值,如果值超过范围就会报错
  • 3、对于byte类型 -128 对应2进制 10000000 这里1既是符号位又是数值位
  • 4、byte,short,char -> int -> long -> float -> double
    • long 8 byte ,float :4byte;为什么long会转为float?
      • 1、底层存储结构不同
      • 2、float表示的数据范围比long的范围要大
        • long: 2^63-1
        • float: 3.4*10^38 >2*10^38 > 2*8^38 = 2\2^3^38 = 2*2^114 > 2^63
  • 5、Java中的字符char可以存储一个中文汉字,因为java语言中的字符变量占用两个byte

  • 6、Java语言采用的是Unicode编码

面试题1

  • byte b1=3,b2=4;
    • b=b1+b2;
    • b=3+4;
  • 哪句是编译失败的呢?为什么呢?
    • 因为b1和b2是变量,因为变量相加首先考虑类型问题,最终把结果赋值时也会考虑类型问题,所以b1+b2后为保证不溢出,默认会转为int类型进行存储
    • 3和4都是常量,常量相加首先做加法,看结果是否超出byte类型的范围。如果没有可以正常赋值。

面试题2

  • byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
    • 这样写会报错,因为byte的范围是 -128 ~ +127, 130溢出了。
    • byte b = (byte)130;编译不会报错,输出结果为-126。
    • 分析过程:
      • A : 130转为2进制时:00000000 00000000 00000000 10000010(这是130的原码,反码,补码)
      • B : 截取操作,截取成byte : 10000010(这个结果是补码)
      • C :显示以原码形式呈现 转为原码(除符号位外取反+1)1111110

练习题1

  • 求byte b = (byte)300 控制台打印的结果;
    • 按照上面的分析过程 :
    • 300 -> 00000001_00101100->00101100->44

练习题2,写出下列程序结果

  • System.out.println(‘a’); 结果:a
  • System.out.println(‘a’+1);结果:97

  • System.out.println(“hello”+’a’+1);

  • System.out.println(‘a’+1+”hello”);
  • System.out.println(“5+5=”+5+5);
  • System.out.println(5+5+”=5+5”);

  • 注:
    1、字符串数据和其他数据做+,结果是字符串类型.但是要注意运算的顺序。

  • 答案:
    • helloa1
    • 98hello
    • 5+5=55
    • 10=5+5

补充float存储格式

float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
* 一个浮点数有2部分组成:底数m指数e

  • 底数部分 使用二进制数来表示此浮点数的实际值
  • 指数部分 占用8bit的二进制数,可表示数值范围为0-255

但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128

底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit

  • 科学计数法格式:

    • S_EEE EEEE E_MMM MMMM MMMM MMMM MMMM MMMM
      • S表示浮点数正负
      • E指数加上127后的值得二进制数据
      • M底数
  • 举例:17.625在内存中的存储

    • 首先要把17.625换算成二进制:10001.101
    • 在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位
    • 底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
    • 指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
      符号部分是整数,所以是0
      综上所述,17.625在内存中的存储格式是:
      01000001 10001101 00000000 00000000

你可能感兴趣的:(Java,27天Java基础)