Java基础语法学习(三、数据类型、常量和变量)

一、数据类型

1. 数据类型分类

Java是一种强类型语言,每个变量都必须声明其数据类型。 Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
在这里插入图片描述

2. 基本数据类型介绍

2.1 几种基本数据类型大小与范围

在这里插入图片描述
note: 单个boolean编译后用int类型代替,故占四个字节,boolean数组变异后用byte数组代替,故每个boolean占一个字节。

2.2 整数型

整型用于表示没有小数部分的数值,它允许是负数。整型的范围与运行Java代码的机器无关,这正是Java程序具有很强移植能力的原因之一。与此相反,C和C++程序需要针对不同的处理器选择最有效的整型。
四种进制的整型:

  • 十进制整数,如:99, -500, 0
  • 八进制整数,要求以 0 开头,如:015
  • 十六进制数,要求 0x 或 0X 开头,如:0x15
  • 二进制数,要求0b或0B开头,如:0b01110011

2.3 浮点型

带小数的数据在Java中称为浮点型。浮点型可分为float类型和double类型。
float与double:
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。浮点型常量默认类型也是double

Java浮点类型常量有两种表示形式:

  • 十进制数形式,例如:3.14 | 314.0 | 0.314
  • 科学记数法形式,如314e2 | 314E2 | 314E-2

note:
浮点数不能直接比较,需要使用java.math包下的bigdecimal进行浮点数比较。
eg.

 import java.math.BigDecimal;
public class DoubleOperation {
    public static void main(String[] args) {
        //使用精确的浮点运算,要使用BigDecimal类
        BigDecimal temp1=BigDecimal.valueOf(1.0);
        BigDecimal temp2=BigDecimal.valueOf(0.1);
        temp1=temp1.subtract(temp2);
        temp1=temp1.subtract(temp2);
        temp1=temp1.subtract(temp2);
        double temp3=1.0;
        double temp4=0.1;
        temp3=temp3-temp4-temp4-temp4;
        System.out.println(temp1);
        System.out.println(temp3);
    }
}

运行结果:
在这里插入图片描述

2.4 字符型

字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。
char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。
转义字符:
Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义。常用的转义字符及其含义和Unicode值如表下表:
在这里插入图片描述
note:

  • 字符常量单引号中必须有且仅有一个字符,' ','as'均会报错.
  • 转义字符算一个字符,'\u0061'
  • 汉字也算一个字符。

2.5 boolean类型

boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 boolean 类型用来判断逻辑条件,一般用于程序流程控制 。
note:

 if(flag==1)
if1//这样的语句在java中式错误的

note:
引用数据类型的大小统一为4个字节,记录的是其引用对象的地址。

3. 类型转换

3.1 自动类型转换

原则:
由容量小的自动转向容量大的。
如下图红色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
在这里插入图片描述
note:
可以将整型常量直接赋值给byte、 short、 char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
eg:

short  b = 12;  //合法
short  b = 1234567;//非法,1234567超出了short的表数范围

3.2 强制类型转换

语法格式:

(type)var

运算符“()”中的type表示将值var想要转换成的目标数据类型。
eg:

double x  = 3.14;
int nx = (int)x;   //值为3

3.3数据类型中的注意事项

操作比较大的数时,要留意是否溢出,尤其是整数操作时。
int money = 1000000000; //10亿
int years = 20;
//返回的total是负数,超过了int的范围
int total = money*years;
System.out.println("total="+total);
//返回的total仍然是负数。默认是int,因此结果会转成int值,再转成long。但是已经发生了数据丢失
long total1 = money*years; 
System.out.println("total1="+total1);
//返回的total2正确:先将一个因子变成long,整个表达式发生提升。全部用long来计算。
long total2 = money*((long)years); (!!)
System.out.println("total2="+total2);

示例输出如下:
在这里插入图片描述

二、 常量

在Java语言中,主要是利用关键字final来定义一个常量。 常量是一个固定值,一旦被初始化后不能再更改其值。

1. 常量声明格式

final  type  varName = value;

eg:

final double PI=3.14;

2. 注意事项

  • 常量可以是整数类型、小数类型、布尔类型、字符类型、字符串类型。
  • 常量的命名规范是由大写字母和下划线构成。

三、 变量

变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

1.变量的声明

type  varName [=value][,varName[=value]...];
 //数据类型  变量名  [=初始值] [,变量名  [=初始值]…];
 //中括号中为可选项,即可有可无。
 //第二个中括号表示可以一行申请多个同类型变量(不提倡)

eg:

double  salary;
long  earthPopulation;
int  age;

注意观察下图,不同数据类型的常量会在内存中分配不同的空间。
在这里插入图片描述

2.变量的分类

在这里插入图片描述

2.1 局部变量

方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。

2.2 成员变量

方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。

2.3 静态变量

使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 (注:随后深入讲解)如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。

2.4 三种变量举例

/**
 * 测试变量
 * 
 * @author maruijiego
 *
 */
public class TestVariable {
 
    int a;            //成员变量, 从属于对象; 成员变量会自动被初始化
    static  int  size;   //静态变量,从属于类
     
    public static void main(String[] args) {
 
        {
            int age;        //局部变量,从属于语句块;
            age = 18;
        }
         
        int salary = 3000;    //局部变量,从属于方法
 
        int gao = 13;
        System.out.println(gao);
 
        int i;
    //    int j = i + 5; // 编译出错,变量i还未被初始化
         
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值