Java达内教学初级教程1-2

sqyihua 贡献于2017-09-05

作者 lenovo  创建于2017-08-29 12:49:00   修改者lenovo  修改于2017-08-29 12:53:00字数12407

文档摘要:1.JDK及Eclipse目录结构操作 2.JDK的安装及配置 3.控制台版的JAVA HelloWorld 4.使用Eclipse开发Java应用程序
关键词:

Top JAVA Fundamental DAY01 1. JDK及Eclipse目录结构操作 2. JDK的安装及配置 3. 控制台版的JAVA HelloWorld 4. 使用Eclipse开发Java应用程序 1 JDK及Eclipse目录结构操作 1.1 问题 为熟练掌握 Linux 下的目录操作,本案例需要完成如下操作: · 在Linux系统下,浏览jdk的目录结构。 · 在Linux系统下,浏览eclipse的目录结构。 1.2 方案 完成此案例,需要用到一些常用的 Linux命令。这些命令如下所示: · pwd :显示当前工作路径。 · cd:改变当前工作目录。 · ls:浏览目录结构。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:浏览 JDK 的目录结构 首先,打开终端,效果如图-1所示。 图- 1 然后,使用pwd命令查看当前所在目录位置。效果如图-2所示: 图- 2 由图-2可以看出,当前所在的目录为/home/soft01,此目录为用户主目录。因为JDK目录在/opt目录下,因此,首先,需要使用cd命令进入opt目录,接着再次使用cd命令进入opt目录下的jdk目录。界面效果如图-3所示: 图- 3 进入 jdk 目录后,使用ls命令查看当前目录下的相关文件和目录,效果如图-4所示: 图- 4 图-4中,蓝色标识的为文件夹,黑色标识的为文件,绿色标识的为可执行文件,而红色标识的为压缩包。 步骤二:浏览 eclipse 的目录结构 eclipse也在opt目录下,而我们目前在/opt/jdk目录下。因此,首先需要进入/opt目录,然后才能进入opt下的eclipse目录。 首先,使用命令cd .. 返回到上一层目录,即/opt目录,效果如图-5所示: 图- 5 然后,使用cd命令进入eclipse目录,效果图-6所示: 图- 6 进入 eclipse 目录后,使用ls命令查看当前目录结构,效果如图-7所示: 图- 7 1.4 完整代码 本案例中的代码均为命令代码,因此,没有完整代码呈现。 2 JDK的安装及配置 2.1 问题 安装JDK,并配置环境变量。 2.2 方案 请根据老师上课的讲解和本文档的步骤,完成 Java 开发环境的构建。 2.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:下载并安装 JDK 学习Java语言要从Java SE平台开始。 Oracle官方提供了两种针对Java SE平台的产品——JRE和JDK,可以从官方网站免费下载(http://www.oracle.com/technetwork/java/index.html)。JRE(Java SE Runtime Environment)称之为Java SE运行时环境,提供了运行Java应用程序所必须的软件环境,包含有Java虚拟机(JVM)和丰富的类库(Libraries)。无论是开发Java应用还是仅仅运行一个已经开发好的Java应用都必须安装JRE。JDK( Java Development Kit)称为Java开发工具包,是JRE的超集,或者说JDK包含了JRE。JDK中除了包含有JRE的所有内容之外还提供了编写Java程序所必须的编译器和调试工具等。对于编写Java开发的人士一般需要下载JDK,目前的主流版本为JDK 6。 Java官方提供了针对不同操作系统平台的JDK版本,如Windows、Linux、Solaris等,在下载JDK时,可以根据自己的需要来选择,如图-8所示: 图- 8 以Windows版本的JDK为例,下载完成后需要进行安装。和安装其他Windows下的软件一样,根据安装界面的提示(如图-9所示)选择好安装目录,然后“下一步”、再“下一步”,直到完成整个安装过程。效果如图-9所示: 图- 9 需要注意的是,在图-9的JDK安装功能列表中,Java DB是可以选择不安装的,这是一个JDK自带的纯Java语言实现的关系型数据库,通常的Java开发时用不到它的。另外,对于Windows版的JDK安装程序,除了安装一个已经包含有JRE的JDK之外,还要再安装一个独立的JRE(所谓“公共的JRE”)并在注册表中对其进行注册,其目的是对于一些需要用到JRE的应用程序可以通过注册信息自动的找到JRE。 “公共JRE”是一个可选项,可以选择不安装,毕竟JDK中已经包含有了一个完整的JRE(只不过没有在注册表中注册);如果选择了该项,在安装完JDK之后,安装程序还要提示用户选择公共JRE的安装目录。 除了下载JDK之外,开发人员一般还要下载Java官方文档,这是学习和开发Java语言必备的资料。Java 官方文档的具体下载位置在http://www.oracle.com/technetwork/java/javase/downloads/index.html 页面,如图-10所示: 图- 10 文档下载解压后将以HTML格式呈现,使用浏览器打开文档首页(index.html),可以看到如图-11所示的“JDK全貌”,通过单击相关链接可以了解其细节。 图- 11 由图-11可以看出:JDK包含JRE和开发工具包(Tools & Tool APIs);而JRE包含有Java虚拟机(JVM)和各种类库(Libraries)。 步骤二:配置环境变量 JDK安装完成后,在JDK安装路径下可以看到如下内容: · bin目录:用于存放JDK工具命令,比如用于编译Java程序的javac命令、用于启动JVM运行Java程序的java命令、用于生成文档的javadoc命令和用于打包的jar命令等等; · jre目录:用于存放JDK所包含的JRE,其中包含有JVM和核心类库; · lib目录:用于存放JDK工具命令所对应的工具包(Tool APIs); · demo目录:用于存放一些示例程序; · src.zip文件:用于存放核心类库的Java源代码。 其中,bin中的javac命令和java命令是我们很快要用到的命令。如果想用到这些命令,需要让操作系统可以找到这些命令文件所在的路径。在Windows操作系统中,可以通过配置Path环境变量来实现。Path环境变量是一串用分号(;)分隔开的目录,在通过控制台运行一个命令时,Windows会依次在Path环境变量中的每一个目录中查找该命令,如果找到就可以执行,否则就会有如图-12所示的错误提示: 图- 12 在Windows系统中通过“控制面板”→“系统”→“高级系统设置”打开如图-13所示的对话框: 图- 13 单击图-13中的“环境变量”按钮,并在弹出的对话框中双击系统变量Path,并对其进行编辑。在Path变量值的末尾追加JDK开发工具路径(“JDK安装路径\bin”),假设JDK的安装路径为:“D:\Program Files\Java\ jdk1.6.0_24”则需追加的Path路径为:“;D:\Program Files\Java\jdk1.6.0_24\bin”。注意,路径之间需要用分号隔开。效果如图-14所示: 图- 14 环境变量设置完成后,通过“附件”→“命令提示符”(或者运行cmd命令)打开控制台,键入java或javac命令,看到输出正常的提示信息就表示环境变量配置成功了。效果如图-15所示: 图- 15 需要注意的是,如果在安装JDK时选择安装了公共JRE,则不需要配置Path环境变量也可以运行java命令,这是由于公共JRE路径写入了注册表的缘故。 2.4 完整代码 本案例均为实际操作,因此没有完整代码呈现。 3 控制台版的JAVA HelloWorld 3.1 问题 使用vi编写HelloWorld.java程序,运行后,在控制台输出“Hello World”。 3.2 方案 请根据老师上课的讲解和本文档的步骤,慢慢体会Java的魅力。 3.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:打开vi,进入编辑模式 首先,打开终端;然后,在终端内输入vi及文件名称HelloWorld.java后,就进入vi全屏幕编辑画面,终端界面如图-16所示。 图- 16 vi编辑界面如图-17所示。 图- 17 步骤二:编写创建类的代码 首先,在vi编辑界面上,输入命令i,使vi进入插入模式;然后,键入创建类的代码,界面如图-18所示。 图- 18 Java语言是纯粹的面向对象的语言,任何一段Java代码都需要从定义一个类开始。至于“类”的详细将在后续的课程内容中详解,这里可以暂做了解。public class 类名 { ... }  是定义类的语法,除了类名可以自己指定外,其他的public和class都是Java关键字(所谓Java关键字是指Java语言中预先定义的代表特定含义的字符),这里只要保证不要写错就可以了。 另外,在此需要注意,Java语言是严格大小写区分的,“H”和“h”是两个不同的字符,编写时需要注意。 步骤三:定义 main 方法 接着,在HelloWorld类中,定义Java应用程序的入口方法main,代码如图-19所示: 图- 19 这行代码的具体含义需要在后续课程内容中细述,这里只要记住两点:第一、如果一个类包含有这样一个方法,则该类就是一个可以被运行的类,而且该方法是程序的入口,也就是说程序从该方法的第一行代码开始逐行运行。第二、慢慢写,不要写错! 步骤四:输出信息到控制台 在 main 方法中,添加代码,以输出“Hello World”到控制台界面显示,代码如图-20所示。 图- 20 步骤五:保存代码,退出vi 首先,当前vi在插入模式下,按一下Esc键转到命令行模式;然后,按一下:冒号键进入最后一行模式;最后,输入命令wq,存盘并退出vi,回到终端界面,如图-21所示。 图- 21 此时,将HelloWorld.java文件保存在当前目录下,如图-22所示。 图- 22 步骤六:编译源文件 源文件编写完成后,需要进行编译,即转换为可以在JVM中运行的字节码文件。JDK工具中的javac命令(在JDK安装目录的bin子目录下)可以实现这样的工作。 在终端,接着键入如下命令: 1. javac HelloWorld.java 命令运行成功后会在当前目录下生成HelloWorld.class文件。当然,对于初学者,可能会出现各种各样的错误。需要根据错误提示信息耐心的修改(大多数错误可能是由于字符书写错误造成的,比如大小写的问题)。 步骤七:启动JVM,运行Java程序 编译成功之后,就可以使用java命令运行该字节码文件(更准确的说法是:启动JVM运行字节码文件)。 接着在终端,键入如下命令: 1. java HelloWorld 如果代码书写正确的,执行上述命令后,终端显示内容如图-23所示。 图- 23 从图-23中可以看出,程序的输出结果为“Hello World”。 3.4 完整代码 本案例的完整代码如下所示: 1. public class HelloWorld { 2.     public static void main(String[] args) { 3.         System.out.println("Hello World"); 4.     } 5. } 4 使用Eclipse开发Java应用程序 4.1 问题 在上一案例“控制台版的JAVAHello World”中,我们使用最简单的编辑工具,编写源代码,并通过调用JDK工具命令体验了Java程序的编译、运行的全过程。理论上,我们可以使用这样的方式编写任何Java程序,但在真实的企业项目中,这种原始的开发方式势必会带来大量繁琐、重复、易错的操作,会极大的降低工作效益;同时也不利于项目的整体管理。在真实的场景中,开发人员总是会借助一些强大的“集成开发环境”进行代码的编写、调试、测试、提交、重构等操作,例如:Eclipse。 本案例要求使用开发工具Eclipse编写HelloWorld.java程序。在Eclipse的控制台中,该程序的输出结果如图-24所示: 图- 24 4.2 方案 请根据老师上课的讲解和本文档的步骤,慢慢体会Eclipse工具开发Java程序的便利。 4.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:开启开发工具Eclipse eclipse启动后会弹出如下对话框,如图-25所示。 图- 25 弹出的对话框“Workspace Launcher”用于选择“工作区”(Workspace)。所谓“工作区”是指Eclipse用于存储工程的路径。Eclipse通过“工程”(Project)来组织资料。程序员编写的源文件、编译生成类文件等以特定的目录结构存储在工程文件夹中。 步骤二:创建Java工程 选择菜单操作“File ( New( Java Project”用于创建一个适合编写Java基本应用程序的工程。在弹出的对话框中填写工程的名称(Project Name)然后单击“Finish”按钮。如图-26所示: 图- 26 工程创建完成后,会在工作区目录(Eclipse启动时指定)生成一个与工程名称同名的文件夹。打开此文件夹,会看到如图-27所示的目录结构: 图- 27 其中:“src”文件夹用于存放用户编写的Java源文件;“bin”文件夹用于存放Eclipse自动编译生成的class文件。Eclipse具备自动编译的功能,当用户在编写Java源文件的同时,Eclipse会自动的调用系统的Java编译器编译该文件,并将编译好的class文件存放在bin目录中。另外,“.classpath”和“.project”两个文件以及“.settings”文件夹中的内容是Eclipse用来维护工程信息的,一般可以不去理会。 步骤三:创建名为HelloWorld的类 工程创建完成以后,可以通过菜单操作“File ( New ( Class”创建Java源文件。在弹出的对话框中,填写要创建的Java类的类名(Name)和包名(Package),如图-28所示。(关于包的含义将在后续课程中详述。) 图- 28 填写完类名(本例中为“HelloWorld”)和包名(本例中为“day01”)后,单击“Finish”按钮。Eclipse即创建了一个名为HelloWorld.java的源文件。 步骤四:定义类 在Eclipse编写HelloWorld程序,如图-29所示。 图- 29 程序编写完成,确认无编译错误后,可以使用菜单操作“Run ( Run As ( Java Application”来运行该程序。运行的结果会在代码下方的Console视图中显示。这里需要指出的是:这个操作在本质上与先前通过命令行方式运行Java程序并没有什么不同,可以理解为是Eclipse调用JDK的java命令,用更加友好的图形化界面方式实现运行Java程序的操作而已。 4.4 完整代码 本案例的完整代码如下所示: 1. package day01; 2. 3. public class HelloWorld {// 类体开始 4.     // main方法是Java程序的入口方法 5.     public static void main(String[] args) {// 方法体开始 6.         System.out.println("Hello World"); 7.     }// 方法体结束 8. }// 类体结束 Top JAVA Fundamental DAY02 1. 变量使用常用错误汇总 2. 整数类型(int、long)使用常见问题汇总 3. 浮点类型(float、double)使用常见问题汇总 4. 对char类型变量的各种赋值方式汇总 5. 类型转换常见问题汇总 1 变量使用常用错误汇总 1.1 问题 在我们使用变量的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,避免出错。即使出现错误也可以很快的找到问题所在。 1.2 方案 变量在使用的过程中,常见问题总结为如下几点: 1)使用未经声明的变量。 2)使用不符合Java标识符命名规则的变量。 3)使用未经初始化的变量。 4)变量的赋值与变量的类型不匹配 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:使用未经声明的变量 Java语言语法规定,变量使用之前必须声明,否则会有编译错误。大多数时候我们都记得这个规范,但是还是会出现变量未声明就使用的情况,请看如下代码: 1. public static void main(String[] args) { 2. a = 1; // 编译错误,变量没有声明 3. int score = 0; 4. scord = 100; // 编译错误 5. System.out.println(score); 6. } 编译上述代码,会发现在代码“a=1;”处和代码“scord=100;”处出现编译错误。出现编译错误的原因是变量a和变量scord没有被声明。变量的声明包含两点:变量的类型和变量的名称。a变量没有被声明的原因是没有变量的类型。scord变量没有被声明的原因也是因为没有变量类型,但是查看代码scord=100;的上下行的代码会发现声明了score变量,分析这三行代码,scord=100行出现编译错误的原因是变量没有被声明,没有声明的原因是变量score拼写成了scord。 步骤二:使用不符合Java标识符命名规则的变量 Java中的变量的命名必须符合Java标识符的规则: 1)可以以字母、数字、“_”和“$”符组成; 2)首字符不能以数字开头; 3)中文可以作为变量名,但不提倡使用; 4)Java大小写敏感,命名变量时需要注意; 5)不能使用Java保留字(一些Java语言规定好的,有特殊含义的字符),如:int、if、for、break等。 下面的代码体现了Java变量的命名规则: 1. int 123go = 100; // 编译错误,不能以数字开头。 2. int成绩 = 60;// 编译没错,但不建议使用。 3. int break= 200; // 编译错误,break是Java保留字。 4. int score = 80; 5. System.out.println(Score); 6. // 编译错误,Java大小写敏感,Score变量没有声明。 上述代码中,分别有如下错误: 1)变量“123go”不符合Java的命名规范,原因是变量名不能以数字开头; 2)变量“成绩“编译时是正确的,但是这种使用汉字进行命名的方式不建议使用; 3)变量”break“处会出现编译错误,原因是break是Java的保留字,不能作为变量名; 4)在输出变量”Score“处会出现编译错误,原因是变量名是大小写敏感的。int score=80;处声明的变量和下一行代码中输出的Score是两个变量,所以变量Score没有声明。Java语言语法规定,变量使用之前必须声明,否则会有编译错误。 另外,Java 变量名的定义应“见名知意”;同时,Java编程规范要求:变量的命名需采用“驼峰命名法”,即如果变量的名字由多个单词组成,除第一个单词外,其他单词的首字母大写,其余的字母小写,例如:salary、empNostudentName等。 步骤三:使用未经初始化的变量 Java语言规定变量在使用之前必须初始化,即必须给该变量赋予特定的值。请看下列代码: 1. public static void main(String[] args) { 2. int a, b = 10; 3. int c = a + b; // 编译错误,变量a没有初始化 4. System.out.println(c); 5. } 在上述代码中,代码行int c = a + b;处会出现编译错误,因为此行代码使用到了变量a,但是该变量却没有被初始化。 另外,有些语句结构(如if、for等)需要条件满足时才会执行;Java编译器不认为在这些语句块中的赋值语句可以实现初始化操作。查看如下代码: 1. int sum; 2. int a = 20; 3. int b = 10; 4. if(a>0) { 5. sum = 0; // 当a大于0的时候,该语句才会执行。 6. sum = a + b; 7. } 8. System.out.println(sum); // 编译错误,编译器认为sum没有初始化。 上述代码中,语句System.out.println(sum);处会出现编译错误,Java编译器不认为放在if语句块中的sum=0;可以实现初始化操作。 步骤四:变量的赋值与变量的类型不匹配 变量在声明时指定了类型,Java编译器会检测对该变量的操作是否与其类型匹配,如果对变量的赋值或者操作与其类型不匹配,会产生编译错误。 1. public static void main(String[] args) { 2. int salary; 3. salary = 15000.50; // 编译错误,整型变量不可以赋予浮点值(小数)。 4. } 上述代码中,变量salary声明时的类型为int,后续赋值为15000.50,而15000.50是浮点类型,因此导致编译错误。整数类型变量不可以赋予浮点类型的值。 1.4 完整代码 本案例是总结性的知识,没有完整的代码。 2 整数类型(int、long)使用常见问题汇总 2.1 问题 在我们使用整数类型的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,避免出错。即使出现错误也可以很快的找到问题所在。 2.2 方案 整数类型在使用的过程中,常见的问题有以下几点: 1)整数直接量超出了整数的范围。 2)关于整数的除法:两个整数相除,会舍弃小数的部分,结果也是整数。 3)整数运算的溢出:两个整数进行运算时,其结果可能会超过整数的范围而溢出。 4)表示long直接量,需要以 L 或 l 结尾。 2.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:整数直接量超出了整数的范围 int是最常用的整数类型。一个int类型的变量占用4个字节(32位),最大表示范围为:-2^31 ~ 2^31-1,即 -2147483648 ~2147483647。 整数直接量(literal),即直接写出的整数。整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误。请看如下代码: 1. int d = 10000000000; 以上代码中,10000000000不属于int类型的直接量,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。 步骤二:关于整数的除法 在Java中,两个整数相除,会舍弃小数的部分,结果也是整数。请看如下代码: 1. int c = 5/3; 2. System.out.println(c); // c的值为1 在上述代码中,运行后,c的值为1。说明两个整数相除,舍弃了小数部分,只保留了整数部分。 步骤三:整数运算的溢出 两个整数进行运算时,其结果可能会超过整数的范围而溢出,请看如下代码: 1. int a = 2147483647; 2. int b = -2147483648; 3. a = a + 1; 4. b = b - 1; 5. System.out.println("a=" + a); 6. System.out.println("b=" + b); 上述代码运行后的输出结果为: 1. a=-2147483648 2. b=2147483647 变量a最初的值为2147483647,是int类型的最大值,加1以后出现了溢出现象,a的值变成了int类型的最小值。而b变量最初赋的值为-2147483648,是int类型的最小值,减1以后出现了溢出现象,b的值变成了int类型的最大值。这显然不符合加法和减法的规则,所以,在今后使用的时候要注意类似的问题。 步骤四:表示long直接量,需要以 L 或 l 结尾 在表示整数时,如果int类型的范围不够,可以使用long型,一个long型的变量占用8个字节(64位),最大表示范围为:-2^63 ~ 2^63-1,即 -9223372036854775808 ~ 9223372036854775807。当一个直接量超过int类型的最大值时,那要用long类型来表示,如果要表示long直接量,需要以 L 或 l 结尾。请看下列代码: 1. long a = 10000000000; // 会有编译错误 2. long b = 10000000000L; 上述代码中,10000000000超过了int类型的最大值,把它直接赋值给long类型会出现编译错误。需要像变量b那样在10000000000后边加L。 2.4 完整代码 本案例是总结性的知识,没有完整的代码。 3 浮点类型(float、double)使用常见问题汇总 3.1 问题 在我们使用浮点类型的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,避免出错。即使出现错误也可以很快的找到问题所在。 3.2 方案 浮点类型在使用的过程中,常见的问题有以下几点: 1)浮点数的直接量为double类型。 2)浮点数存在舍入误差问题。 3.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:浮点数的直接量为double类型 浮点数,就是小数,包括: float和double。默认的浮点直接量为double型,如果需要表示float类型的直接量,需要加“f”或“F”后缀。请看如下代码: 1. float f1 = 3.14 ; 以上代码,会出现编译错误。3.14是double类型的直接量,如果表示float类型的直接量应该写成3.14f。 步骤二:浮点数存在舍入误差问题 由于浮点数内部用二进制的方式来表示十进制,会存在舍入误差。二进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样。对于一些要求精确运算的场合会导致代码的缺陷。请看如下代码: 1. double money = 3.0; 2. double price = 2.9; 3. System.out.println(money - price); 上述代码的输出结果为: 1. 0.10000000000000009 查看上述结果,并没有如我们想象的为0.1。如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal类来实现。关于这一点,将在后续的章节中介绍。 3.4 完整代码 本案例是总结性的知识,没有完整的代码。 4 对char类型变量的各种赋值方式汇总 4.1 问题 在我们使用char类型的过程中,会遇到一些问题,在此将这些问题进行汇总,使今后使用的过程中,不出错。即使出现错误也可以很快的找到问题所在。 4.2 方案 char类型在使用的过程中,常见的问题有以下几点: 1)字符类型存储中文。 2)char类型的值可以作为整数类型直接使用。 4.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:字符类型存储中文 char类型是否可以存储中文?答案是肯定的。字符类型事实上是一个16位无符号整数,这个值是对应字符的编码, Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位字符直接量。对于中文,可以采用诸如:‘中’的形式,也可以采用其对应的16进制的表示形式,例如:‘\u4e2d’。 步骤二:整数类型和char类型的关系 char类型的值可以直接作为整数类型的值来使用,字符类型事实上是一个16位无符号整数,即全部是正数,表示范围是0~65535。请看如下代码: 1.         char zhong='疯'; 2.         intzhongValue=zhong; 3.         System.out.println(zhongValue); 上述代码的输出结果为: 1. 30127 上述输出结果为0~65535范围的。 另外,如果把0~65535范围内的一个int整数赋给char类型变量,系统会自动把这个int类型整数当成char类型来处理。请看如下代码: 1. char c=97; 2. System.out.println(c); 上述代码的输出结果为a。这说明系统自动把整数类型97当成char类型来处理,处理的结果为a,即,97为字母a的unicode码。 4.4 完整代码 本案例是总结性的知识,没有完整的代码。 5 类型转换常见问题汇总 5.1 问题 在我们数据类型转换的过程中,会遇到一些问题,在此将这些问题进行汇总,使今后使用的过程中,不出错。即使出现错误也可以很快的找到问题所在。 5.2 方案 数据类型转换在使用的过程中,常见的问题有以下几点: 1)强制转换时的精度丧失和溢出。 2)数值运算时的自动转换。 3)byte、char、short转换为int的问题。 5.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:强制转换时的精度丧失和溢出 基本类型之间的相互转换,需要注意的是,强制转换时可能会造成精度的丧失和溢出,请看如下代码: 1. long l = 1024L * 1024 * 1024 * 4; 2. int j = (int) l; // 会产生溢出 3. System.out.println(j); // 结果为:0 上述代码输出的结果为0,是因为在将long类型变量l转换为int类型变量j的时候产生了溢出。 另外,请看如下精度丧失的例子: 1. double pi = 3.141592653589793; 2. float f = (float) pi; // 会造出精度的损失 3. System.out.println(f); // 结果为:3.1415927 上述代码的输出结果为3.1415927,值保留了7位小数,这是因为将double类型的变量pi转换为float类型的变量f时造成了精度的损失。 步骤二:数值运算时的自动转换 多种基本类型参与的表达式运算中,运算结果会自动的向较大的类型进行转化。请看如下示例: 1. long distance = 10000 * 365 * 24 * 60 * 60 * 299792458L; 上述代码中,有int类型数据和long类型数据,由于有long型的直接量299792458L参与,整个表达式的结果为long。 1. double change = 800 - 599.0; 上述代码中,由于有double型的直接量599.0参与,整个表达式的结果为 double。 1. double persent1 = 80 / 100; 上述代码中,结果为0.0。右边都是int型数据,语法运算后的结果也为int类型,结果为0,再赋值给double型,将0转化为 0.0。请对比下面的代码: 1. double persent2 = 80.0 / 100; 上述代码中,结果为0.8,右边表达式有double型直接量参与,运算结果为double型。 步骤三:byte、char、short转换为int的问题 byte、char、short 三种类型实际存储的数据都是整数,在实际使用中遵循如下规则: 1)int直接量可以直接赋值给byte、char和short,只要不超过其表示范围。 2)byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算。请看如下示例代码: 1.         byte b1=28; 2.         byte b2=20; 3.         byte b3=b1+b2; 上述代码在第三行会出现编译错误,原因是b1+b2的结果为int类型。改变上述代码如下: 1.         byte b1=28; 2.         byte b2=20; 3.         int b3=b1+b2; 查看上述代码,会发现不会再出现编译错误。char类型、short类型和byte类型是相似的。 5.4 完整代码 本案例是总结性的知识,没有完整的代码。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档