Java编程基础知识入门:变量与数据类型

时间:2020-12-01 20:03:30

(一)数据类型初阶

1.概述

Java定义了基本数据类型、引用数据类型和自定义类型。

本主题将介绍Java的八种基本数据类型和引用数据类型中的String类型。

Java编程基础知识入门:变量与数据类型

计算机存储数据分为以下三个空间:寄存器、栈空间、堆空间,其中寄存器Java语言不能直接控制和处理。Java虚拟机为每一个运行在内存中的Java程序分配相应的

栈空间和堆空间。

2.栈空间

特点:1)栈空间存取数据的效率高;2)栈中的数据按“先进后出”的方式管理;3)栈空间存储空间较小,不能存放大量的数据。4.JVM将基本类型的数据存放在栈空间。


3.堆空间

特点:1)堆空间存取数据的效率最低;2)数据存放的位置随机分配;3)堆空间存储数据的空间大,能存放大容量的数据,包括数组、字符串、对象、集合。

(二)变量的定义和变量使用的原因

1.什么是变量

变量就是可变的量;常量就是不可变的量;字面量:Java的变量和常量中存放的具体的数据。

2.为什么使用变量

计算机的高级语言普遍使用变量来管理内存中存储的数据。

变量管理基本类型的数据如下图:

Java编程基础知识入门:变量与数据类型

变量管理引用类型的数据如下图:

Java编程基础知识入门:变量与数据类型

(三)变量的命名、定义和初始化

1.变量的命名

1)首字母是英文字母、$或下划线,由字母、数字、下划线组成;

2)变量的命名遵循见名知义的原则;

3)Java变量名建议不用中文(不利于不同平台不同操作系统的移植);

4)变量名首字母建议不用大写字母;

5)用驼峰命名法命名多个单词组成的变量名。例如:sumScore;

6)变量名不要使用Java关键字。

2.变量的定义

每个变量必须属于一种数据类型。

类型 变量名1,变量名2,……,变量n;

3.变量的初始化

(四)用变量简化计算

Java编程基础知识入门:变量与数据类型

Java编程基础知识入门:变量与数据类型

(五)变量的作用域

1.Java用一对大括号作为语句块的范围,称为作用域;

2.作用域的变量不能重复定义;

3.离开作用域,变量所分配的内存空间将被JVM回收。

(六)基本数据类型的包装类

1.概述

Java为基本数据类型提供了对应的类,这些类称作包装类,如下表:

Java编程基础知识入门:变量与数据类型

2.为什么使用包装类

包装类中封装了一些很实用的方法和常量。例如:Byte.MIN_VALUE是Byte类中的一个常量,存放了byte类型数据的最小值。

包装类在集合中用来定义集合元素的类型。

3.包装类中的常用方法和常量

Interger.MIN_VALUE:int类型的最小值

Interger.MAX_VALUE:int类型的最大值

int Integer.parseInt(String sInterger); 将字符串类型的整数装换为int类型的数据。

String Interger.toBinaryString(int value);将十进制数转换为二进制,返回结果String类型。

String Interger.toHexString(int value);将十进制数转换为十六进制,返回结果String类型。

(七)二进制补码

概述:计算机内部以二进制形式存储数据。Java程序中输入的十进制数据会被自动转换为二进制,Java内部也以二进制进行数值运算,但返回的结果是十进制。

1.补码规则

计算机系统中,数值一律用二进制补码来存储。

二进制最高位是符号位,0表示整数,1表示负数。

正数的值是其本身,负数的值是最高位不变,其他位逐位取反,再加1。例,二进制1101代表-3。

两数相加,若最高位有进位,则进位被舍弃。例如,4位二进制补码中,5-3的结果是2。

2.为什么使用补码

可以将符号位和其它位统一处理;

最高位不再表示数值,而是作为符号位,正好将数值折半,即一半是0至正数,一半是负数;

减法也可按加法处理。

3.补码运算的特征

计算机中正数和负数的关系是取反加1;

补码运算是封闭的,运算结果保留在补码范围之内,超范围就溢出;

4位二进制补码最多能表示2^4(16)个数,数的范围是-8到7;

8位二进制补码最多能表示2^8(256)个数,数的范围是-128到127;

16位二进制补码最多能表示2^16(65536)个数,数的范围是-32768到32767;

32位二进制补码最多能表示2^32个数,数的范围是-2^31到2^31-1。

4.补码运算的原理

正数+负数=模。模:某种类型数据的总数。

负数=模-正数,结果正好是正数逐位取反加1。

(八)整数类型

1.Java有四种整数类型:byte、short、int、long。

2.Java默认整数计算的结果是int类型。

3.整数的字面量是int类型。

4.若字面量超过int类型的最大值,则字面量是long类型,那么后面要用L(或l)表示该值是long类型。

示例,将字面量30亿赋值给一个long类型的变量:long longValue = 3000000000L。

5.java底层byte和short按照32位(int类型)计算。

(九)浮点类型

1.概述

浮点类型用于表示小数的数据类型;

原理:也就是二进制科学计数法;

有float和double两种类型;

默认浮点类型计算结果是double类型,字面量也是double类型;

若要给float类型的变量赋字面量的值,则要在字面量后面加F(或f)。

2.浮点类型的科学计数法

十进制浮点数科学计数法:219345=2.19345*(10^5) 尾数:2.19345,指数:5,基数:10。

二进制浮点数科学计数法:10111=1.0111*(2^100)

3.float类型

float类型共32位,1位符号位,指数8位,尾数23位。

float的精度是23位,即能精确表达23位的数,超过就被截取了。

小数是以尾数长度来表示精确度的,比如pi=3.1415的精度是4位。

float存储数据的范围大于int类型,但精度比int要小,int精度是31位。

4.double类型

double类型共64位,1位符号位,11位指数,52位尾数。

double范围远远大于long,但double精度不如long(long存储数据的位数是63位)。

5.浮点运算的特点

浮点运算就是实数运算,由于计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。

(十)字符类型

1.概述

char类型的字面量可以是一个英文字母、字符或一个汉字,用单引号包括。

Java底层使用一个16位的整数来处理字符类型,该数值是一个字符的unicode编码值。

2.unicode编码

是全球范围内的编码方法。

英文部分与ASCII码兼容(ASCII表示范围0~128),同时英文字符和数字是连续编码的。

Java在处理char类型的数据时,底层是按unicode码来处理的。

3.计算机硬件系统只能用0和1表示数,我们人为做了规定,某个数还可以表示一个字符,例如,65代表字符A。

(十一)转义符

"\",通过转义字符,可表示一些特殊的字符。

‘\n’  '\t'  '\\'  '\''  '\"'

'\u4e2d'表示unicode编码对应的字符(汉字:中)。

(十二)布尔类型

blloean类型用来表示肯定或否定两种可能。

常用在分支语句、循环语句中。

true,false

(十三)小类型向大类型转换

小类型向大类型转换会自动完成,不需要程序员编写代码,有JVM负责,自动类型转换也叫“隐式类型转换”

自动转换的规则:符号位自动扩展,负数补1,正数补0。

byte -> short  -> int -> long -> float -> double

int和char类型数据在某些情况下可以自动相互转换。

整数到浮点数转换会损失精确度。

小类型向大类型转换一般情况下是安全的。

当小类型的精度高于大类型时要注意精度丢失的隐患。

int类型转换为float类型可能丢失精度。(int类型数据超过float类型尾数23位时)

long类型转换为double类型可能丢失精度。(long类型数据超过double类型尾数52位时)

(十四)大类型向小类型转换

即强制类型转换,简称强转。

强制类型转换时,要注意边界数风险问题。

大类型转换为小类型时,源数据的数据位变为目标数据的符号位。

大类型的数据超过了小类型的位数。

(十五)int类型与char类型的转换

Java对char类型的数据在底层是按int类型处理的。

int类型与char类型在赋值时自动转换。char c = 65; int i = ‘B’;

字符类型的数据可进行数值计算。

(十六)通过args数组获取数据

通过main方法的args数组可以从控制台获取一组字符串数据。

运行程序时,run--run configurations--arguments中添加数据。

(十七)通过Scanner从控制台获取数据

Scanner类用于扫描从控制台输入的数据,可以接收字符串和基本数据类型的数据。

Scanner类位于java.util.Scanner包中。

Scanner类的常用方法:

String next():接收控制台输入的一个字符串,以空格或回车作为一次输入的结束,不可以接收空格。

String nextLine():接收控制台输入的一个字符串,以回车作为一次输入的结束,可以接收空格。

int nextInt():接收控制台输入的一个int类型的数据。

double nextDouble():接收控制台输入的一个double类型的数据。

boolean nextBoolean():接收控制台输入的一个boolean类型的数据。

输入char类型的数据:

Scanner类没有提供直接输入char类型的方法,可以通过charAt()方法从next()或nextLine()获取输入的字符。

char String.charAt(int index):从字符串中获取指定下标的字符,下标从0开始。例,“abc”.charAt(0)结果是a。

next().charAt(0):从控制台输入的字符串中获取第一个字符。

实现步骤:

1)创建Scanner类的一个对象。

Scanner scanner=new Scanner(System.in);

2)通过scanner调用next等方法,接收控制台输入的数据。

System.out.println("姓名:");

String name=scanner.next();

(十八)变量的自增、自减、自乘、自除

字符串类型变量的自增:String space=“”;      space=space+" "; 简写 space+=“ ”;

(十九)交换两个变量的值

两个变量值互换是基本的算法,在排序等算法中应用。

1)int c=a; a=b;b=c;

2)不借助第三个变量,仅在两个变量之间交换值。 a=a+b; b=a-b; a=a-b;

(二十)Java的错误类型

编译期语法错误、运行期异常错误和运行期逻辑错误。

1)编译期语法错误:可借助Eclipse的帮助方便地定位错误,并进行修改。

2)运行期异常:系统会提示错误的类型和出错的位置。

3)逻辑错误:程序可以编译运行,但程序执行的结果不是预期的效果。

(二十一)Debug调试

调试是查找、解决软件中逻辑错误代码(成为bug:软件臭虫)的重要手段,是软件开发中必不可少的环节。

调试也是学习、研究其他人编写的代码的一个很好的手段。

Eclipse提供了强大的代码调试功能-Debug,通过Debug视图能快速定位代码中的逻辑错误,提供软件开发效率。

断点是在源代码可执行部分的指定行设置一个标志,在调试运行方式下,程序运行到该断点标志处会自动暂停,等待下一步操作。

通过设置断点可以快速执行断点之前的代码,然后在断点处暂停,这时可以换单个命令运行的方式来运行程序,查找程序中的逻辑错误。

断点设置的位置应是程序员怀疑错误代码的附近位置,即对出错位置的定性分析,是一个大概的位置。