java SE学习Day2:在Linux(CentOS 7)上安装jdk,细说java数据类型转换

来源:互联网 发布:夏易seo 编辑:程序博客网 时间:2024/05/22 06:29

想借这次重学java的机会,顺便熟悉熟悉linux的操作,就在虚拟机上装了CentOS,CentOS 7自带Openjdk1.7和1.8的版本,但是在运行javac编译时却告诉我“javac:command not found”,WTF???(黑人问号)事先上网查过openjdk和sun/oraclejdk有什么不同,看了很多博客文章和问题回答,结论就是:对于现在的我,他俩哪儿不一样哪儿一样,跟我毛关系没有,我要做的就是找个能用的,那么就把这个配置过程简单的记录一下,修改教程也是借鉴了一个博客的方法,但我结合了我自己的实际安装情况改进了一些步骤。

整个过程大致分为三个系列的步骤操作:
Step 1,删除已有的openjdk
Step 2,安装oraclejdk
Step 3,配置环境变量

Step 1,删除已有的openjdk

1,打开终端,使用java -version命令查看当前系统中的openjdk版本信息,可以看到当前系统中使用的是openjdk
2,使用rpm -qa | grep java命令查询有关“java”的所有包,会发现除了关于openjdk的几个包以外,还有其他的包,比如python的java工具包,我们只删除带有openjdk字段的包即可,所以可以把这个命令修改一下匹配条件,改为rpm -qa | grep openjdk,这样匹配到的就都是需要删除的东西
3,使用rpm -e --nodeps [上一步grep openjdk查询到的包名称]命令,删除包,例如rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64

Step 2,安装oraclejdk

1,打开CentOS自带的Firefox浏览器(因为默认下载文件到~/Downloads,不想到时候换浏览器改路径麻烦,所以就用这个浏览器直接下),打开jdk下载页http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,目前最新的是8u111和8u112,我选择8u111,首先要选择“Accept License Agreement”,然后选择jdk-8u111-linux-x64.rpm,下载,在Firefox的弹出窗口中选择save file或“保存文件”
我选的是jdk-8u111-linux-x64.rpm,根据实际情况酌情
2,下载完成,使用cd /usr/命令来到usr目录下,我们要把jdk安装到这里,在我实际操作时,我事先在usr目录下使用mkdir新建了一个目录作为jdk的目录,但是安装完毕后我发现并无这个必要,他会自动生成一个名为java的目录,所以不用事先自己新建目录
3,使用rpm -ivh ~/Downloads/jdk-8u111-linux-x64.rpm命令开始安装,注意路径,因为我们下载的.rpm文件是存在~/Downloads下面的

Step 3,配置环境变量

1,使用vim /etc/profile打开配置文件,按i键进入输入模式,在文件尾添加如下字段(如图),然后ESC键,使用:wq命令或按下Shift+ZZ保存并退出(连按两下z键),注意JAVA_HOME路径以自己为准,若当时自定义路径则按自身情况修改(注意CLASSPATH等号右边有一个” . “,并且三个jar包路径用“:”分隔):

    export JAVA_HOME=/usr/java/jdk1.8.0_111    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar    export PATH=$PATH:$JAVA_HOME/bin

这里写图片描述
2,配置完成,使用source /etc/profile命令使配置生效,确认配置是否生效,可使用echo $JAVA_HOME回显命令查看
3,使用java -version查看当前版本信息,你就得到你梦寐以求的jdk了!

java中的基本数据类型转换(注意是基本数据类型,后面还会学其他的类型转换)

首先来列个表格,复习一下前一节和计算机导论里面的知识

基本类型名称所属类型存储长度(字节)有无符号位表示十进制数的范围默认值int整型4有2312311(约21亿)0short整型2有2152151(32768)0byte整型1有27271(128)0long整型8有2632631(19位数)0Lfloat浮点型4有±3.40282347E+38F(有效位数6~7位)0.0fdouble浮点型8有±1.79769313486231570E+38F(有效位数15位)0.0char字符型2\UTF-16(65535)\u0000(NULL)boolean布尔型1/8(也就是1 bit)\true、falsefalse

注意事项:
①整型:十六进制需加上前缀0x,八进制使用前缀0(但不推荐使用八进制,容易造成混淆),从java 7开始,支持二进制,前缀是0b;long型变量声明时,需在值后加后缀L。
②浮点型:当浮点型运算溢出时,会返回“正无穷大”或“负无穷大”两种值,当进行0除以0或开负数平方根时,会返回“NaN”值,表示运算无意义;浮点型不适用于金融计算(即禁止出现舍入误差的运算),因为浮点数无法精确表示一个数的1/10;
③字符型:可使用\uxxxx(x表示任意十六进制数字字母),来获得Unicode字符,同时还有转义序列,如:\b表示“退格”等,如今强烈建议用抽象数据类型来代替char型来表示字符数据。
④布尔型:java与C或C++不同的地方在于,0值和1值不能代替false和true来表示逻辑真假

关于数据转换:

类型按级别由低到高排序:(short,byte,char)—>int—>long—>float—>double;boolean型不得与其他任何类型进行转换,若要使用boolean的值,可使用条件表达式:boolean b = true;b ? 1:0;来获取值
数值类型间的合法转换(取《java核心技术 卷1》中图3-1):
这里写图片描述
实箭头表示转换后无信息丢失,虚箭头表示有信息丢失
实际二元计算中,按如下规则进行计算:
STEP1:若两个操作数中有一个是double,则另一个操作数转换成double
STEP2:否则,若两个操作数中有一个是float,则另一个操作数转换成float
STEP3:否则,若两个操作数中有一个是long,则另一个操作数转换成long
STEP4:若以上情况都不满足,则都转换为int,再做计算

强制类型转换:高类型向低类型转换
语法格式:在值前加上(),()内填入你想转换的目标类型
强制转换发生溢出的例子:

public class TestConvert {    public static void main (String[] args){        byte b1 = 65;        byte b2 = 78;        byte bover = (byte)(b1+b2);//计算结果溢出        System.out.println(bover);        double d = 1.14e100;        float f = (float)d;        System.out.println(f);//高类型向低类型强制转换,发生溢出        int i = 123456789;        float f2 = (float)i;        System.out.println(f2);//信息丢失,精度降低    }}

运行结果:

-113Infinity1.23456792E8

若要对浮点数进行舍入运算,则需要调用Math.round()方法,但仍需要强制转换成int型,因为此方法返回值为long型数值。

参考资料:
《马士兵java入门到精通》视频
《java 核心技术 卷一》

0 0