系列文章目录
【开篇】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]