【三】变量与数据类型

系列文章目录

【开篇】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:如果大家在观看的时候发现有拼写错误,代码错误以及内容混淆的地方,希望大家积极反馈,我及时进行更改,谢谢大家,邮箱:BaldTeenager@163.com

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,848评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,529评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,824评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,329评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,227评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,879评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,218评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,877评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,159评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,155评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,987评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,736评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,273评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,407评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,663评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,158评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,517评论 2 339

推荐阅读更多精彩内容