【三】变量与数据类型

系列文章目录

【开篇】Java语言介绍及环境搭建

【一】第一个java程序详解

【二】java程序的组成

前言

本节我们将具体学习java中的变量以及数据类型,学习如何在java中定义一个变量,并使用变量存储数据。

变量

变量:可以改变的量。

程序在运行过程中会产生数据,比如:编写计算器程序时,需要存储用户所需要计算的数据。变量便是用来存储这些数据的,其中存储的数据可以改变,看作数学中的未知数。

变量的定义:

  • 1、声明并赋值:
    数据类型 变量名 = 变量值;

      int a = 100;
      double d = 100.01;
      char c = 'A';
      boolean b = true;
    
  • 2、先声明后赋值(如果后需要同时定义多个变量,变量名之间以“,”隔开)

    数据类型  变量名1,变量名2;
    变量名 = 变量值;
    
    int a,b;
    a = 100;
    b = 50;
    
  • 3、只定义,不赋值(赋值操作可能在其他地方操作)
    数据类型 变量名;

    int a;
    

变量类型:

  • 类变量:独立于方法之外的变量,用 static 修饰
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 局部变量:类的方法中的变量。

在一个类中,可以分为属性和方法,除了局部变量之外的变量都称为属性。

public class Student{
    static int i = 10; //独立与方法外,static修饰,类变量,类属性
    
    double d = 10.3; //独立于方法外,没有static修饰,实例变量,类属性
    
    /*
        这是一个方法:由修饰符 返回值 方法名(){}组成。
    */
    public void method(){
        boolean b = true; //变量在方法内,局部变量。
    }
}

类变量

暂时不讲解,可以看作是添加了static修饰符的特殊实例变量。

实例变量

  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁。

  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。

  • 在同一个类中可以直接调用属性和方法(static修饰的除外),在其他类中需要通过“对象.属性”或“对象.方法()”的方式调用。

  • 实例变量可以增加修饰符,“public”,“private”等。

public class Test{ 
    int i;//定义一个实例变量i
    
    public void print(){
      System.out.println("i:" + i);//在同一个类中可以直接调用
   }
}

class TestPrint{
   public static void main(String[] args){
      Test test = new Test();//创建一个对象的实例
      test.i = 100;//对Test对象中的变量i赋值,如果不赋值的话该,i=0;
      test.print();//调用Test对象中的方法
   } 
}

局部变量

  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
  • 局部变量不可以增加修饰符
  • 局部变量没默认值,必须赋值才可以使用。

下面的例子将会报错,因为局部变量没有赋值,无法进行i+20运算。

public class Test{ 
    public void variable(){
      int i;//定义一个变量。
      i = i +20;//报错,因为i没有值,无法进行i+20.
   }
}

下面这个例子调用两个Test类中的方法,由于局部变量的作用范围是在方法中,所以每个方法中的i都是独立的。

运行步骤:

1、创建test对象

2、调用test.var1(),创建一个局部变量i并赋值10,随后调用System.out.println打印,var1()运行完毕,局部变量i被销毁。

3、调用test.var2(),创建一个局部变量i并赋值20,随后调用System.out.println打印,var2()运行完毕,局部变量i被销毁。

public class Test{ 
    public void var1(){
      int i = 10;//定义一个变量。
      System.out.println("i:" + i);
   }
    
    public void var2(){
      int i = 20;//定义一个局部变量。
      System.out.println("i:" + i);
   }
}

class TestPrint{
   public static void main(String[] args){
      Test test = new Test();//创建一个对象的实例
      test.var1();//调用Test对象中的方法
      test.var2();//调用Test对象中的方法
   } 
}

数据类型

java是一种强类型语言,在定义一个数据时需要声明该数据时什么类型。

分类

  • 基础数据类型
    • 整数:100,1,2,500
    • 浮点数(小数):0.1,100.2023,30.33
    • 字符(Unicode编码):'a','b','x'
    • 布尔类型(表示真假):ture,false
  • 引用类型(对象类型)

字节和取值范围计算

一个基础数据类型需要知道他所占的字节数以及取值范围。

字节

一个字节占8位二进制数,在计算机中所有的数据都是以0、1存储的。在基础数据类型中,类型所占的字节数是固定的。

字节:如下图,一个字节占八个二进制数,每个二进制数可以存储“0”,“1”两个数据,所以一个字节可以存储2^8个数据。

[图片上传失败...(image-410d89-1605059315410)]

进制介绍

  • 二进制数:满二进一,存储“0”,“1”。
  • 八进制:满八进一,存储"0","1","2","3","4","5","6","7"。
  • 十进制:满十进一,存储"0","1","2","3","4","5","6","7","8","9"。
  • 十六进制:满十六进一,存储"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"。

取值范围的计算

“byte”数据类型正好占一个字节,最大存储的数据是2^8 个,但是java中最高位需要用来表示正负(符号位),以及需要00000000表示数据0,所以byte的一个取值范围为:-2^7 ~ 2^7-1,也就是-128~127,其他整数数据类型也可以这么计算,浮点数类型在此不作研究。

精度丢失:byte的取值范围是-128~127,如果你用byte存储一个128的数据,

基本数据类型

整型

类型 所占字节 取值范围
byte 1字节 -128~127
short 2字节 -32768~32767
int 4字节 -2147483648~2147183647
long 8字节 -9223372036854775808~9223372036854775807
  • long类型数据可以添加后缀"L"或“l”;

  • 十六进制数据使用前缀“0x”或“0X”,java7以后二进制前缀“0b”或“0B”。

  • 还可以在数字加下划线方便阅读,如1_000_000表示一百万,java编译器会去除这些下划线。

  • 整数类型在不加任何后缀或者指定类型情况下,默认是int类型。

如:

int i = 0x01;//十六进制表示,相当与十进制的1
int j = 0b000000001;//二进制表示,相当与十进制的1,0可以不写,可以写成int j = 0b1;
-----------------------------------------------------------------------------
byte i = 25;
byte k = i+1;
报错:ncompatible types. Required: byte Found: int
   
正确的写法是
byte i = 25;
byte k = (byte) (i+1);
因为i+1时没有指定类型,默认是int类型,将int类型的数据转换为byte时,可能会有精度丢失的问题,所以这里会报错。

注:java没有任何无符号形式的整数类型。

精度丢失

如例二中:byte k = i+1;报错了

因为将int类型的(i+1)赋值给了byte类型,int占4个字节,但是byte占一个字节,在转换的时候如果值大于byte的最大取值,那么就会出现数据溢出,丢失了多出来的部分,这就是精度丢失。

精度丢失一般出现在大类型的数据转换为小类型的数据,详情看下图。

在这里插入图片描述

浮点型(小数)

类型 所占字节
float 4字节
double 8字节

关于浮点型数据的取值范围,本章暂不讨论,如感兴趣,可自行查找。

  • float后缀“f”或“F”,
  • double后缀“D”或“d”。
  • 如果没有指定类型或不加后缀的情况下,浮点数默认是double类型。

char类型

类型 所占字节
float 2字节

char类型用于表示Unicode编码的字符,

  • 最小值是 \u0000(即为0);
  • 最大值是 \uffff(即为65,535);

char类型的数据需要用单引号括起来,如'A',在Unicode中编码为65,所以char x='a';可以写成char x=65;。其他char类型数据可以查询Unicode表。

'a'与"a"的区别

'a'是表示char类型的数据,而"a"表示的是String类型的数据。

boolean(布尔类型)

布尔类型有两个值:false与ture,用来表示真假的,java中boolean类型并没有明确给定所占字节,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使用其他数据类型来表示,如有兴趣,自行研究。

注:在其他语言中,boolean类型可以和0,1转换,但是在java中是不可以的。

如:if(x = 0)

这个在c++中可以编译运行,但是在java中是不能通过编译的 x = 0并不能转换为布尔值。

对象类型(类类型)

对象类型将不再本章讲解,在什么是面对对象章节将会对该类型进行讲解。

总结

通过本节我们学会了如何定义变量,以及在定义变量时改如何确定变量的数据数据类型,下一章节我们将学习常量和运算符,学习常量与运算符之后我们便可以编写一个计算器程序。

散会!!!


ps:如果大家在观看的时候发现有拼写错误,代码错误以及内容混淆的地方,希望大家积极反馈,我及时进行更改,谢谢大家,邮箱:[email protected]

你可能感兴趣的:(【三】变量与数据类型)