Java进阶:Java变量类型之间的相互转换
发布时间:2025-05-21 14:25:22 发布人:远客网络
一、Java进阶:Java变量类型之间的相互转换
1、我们知道 Java的数据类型分为三大类即布尔型字符型和数值型而其中数值型又分为整型和浮点型相对于数据类型 Java的变量类型为布尔型boolean字符型char整型byte short int long浮点型float double其中四种整型变量和两种浮点型变量分别对应于不同的精度和范围此外我们还经常用到两种类变量即String和Date对于这些变量类型之间的相互转换在我们编程中经常要用到在我们今天的这篇文章中我们将来看看如何实现这些转换
2、一整型实型字符型变量中的相互转换
3、在Java中整型实型字符型被视为同一类数据这些类型由低级到高级分别为(byte short char)??int??long??float??double低级变量可以直接转换为高级变量例如下面的语句可以在Java中直接通过
4、而将高级变量转换为低级变量时情况会复杂一些你可以使用强制类型转换即你必须采用下面这种语句格式
5、可以想象这种转换肯定可能会导致溢出或精度的下降因此我们并不推荐使用这种转换
6、在我们讨论其它变量类型之间的相互转换时我们需要了解一下Java的包装类所谓包装类就是可以直接将简单类型的变量表示为一个类在执行变量类型的相互转换时我们会大量使用这些包装类 Java共有六个包装类分别是Boolean Character Integer Long Float和 Double从字面上我们就可以看出它们分别对应于 boolean char int long float和double而String和Date本身就是类所以也就不存在什么包装类的概念了
7、三简单类型变量和包装类之间的相互转换
8、简单类型的变量转换为相应的包装类可以利用包装类的构造函数即
9、 Boolean(boolean value) Character(char value) Integer(int value) Long(long value) Float(float value) Double(double value)
10、而在各个包装类中总有形为××Value()的方法来得到其对应的简单类型数据利用这种方法也可以实现不同数值型变量间的转换例如对于一个双精度实型类 intValue()可以得到其对应的整型变量而doubleValue()可以得到其对应的双精度实型变量
11、四 String类和其它数据类型的相互转换
12、对于上面的这些包装类除了Character以外都有可以直接使用字符串参数的构造函数这也就使得我们将String类转换为这些数据类型变得相当之简单即
13、 Boolean(String s) Integer(String s) Long(String s) Float(String s) Double(String s)
14、而将String类转换为Date类也可以使用这样的构造函数 Date(String s)
15、现在我们还剩下一个字符型变量事实上String类可以理解为一个char型数组因此我们可以在String类中找到这样的方法来实现这种转换 charAt(int index)可以得到String类中某一位置上的字符 toCharArray()更可以将整个String类转换成一个char的数组
16、对于所有的包装类都存在一个名为toString()的方法可以将其转换成对应的String类而对于整型类和长整型类还可以使用 toBinaryString(int i) toHexString(int i) toOctalString(int i)分别以二进制十六进制和八进制的形式进行到String类的转换
17、五将字符型直接做为数值转换为其它数据类型
18、将字符型变量转换为数值型变量实际上有两种对应关系在我们在第一部分所说的那种转换中实际上是将其转换成对应的ASCII码但是我们有时还需要另一种转换关系例如就是指的数值而不是其ASCII码对于这种转换我们可以使用Character的getNumericValue(char ch)方法
19、六 Date类与其它数据类型的相互转换
20、整型和Date类之间并不存在直接的对应关系只是你可以使用int型为分别表示年月日时分秒这样就在两者之间建立了一个对应关系在作这种转换时你可以使用Date类构造函数的三种形式
21、 Date(int year int month int date)以int型表示年月日Date(int year int month int date int hrs int min)以int型表示年月日时分Date(int year int month int date int hrs int min int sec)以int型表示年月日时分秒
22、在长整型和Date类之间有一个很有趣的对应关系就是将一个时间表示为距离格林尼治标准时间年月日时分秒的毫秒数对于这种对应关系 Date类也有其相应的构造函数 Date(long date)
23、获取Date类中的年月日时分秒以及星期你可以使用Date类的getYear() getMonth() getDate() getHours() getMinutes() getSeconds() getDay()方法你也可以将其理解为将Date类转换成int
24、而Date类的getTime()方法可以得到我们前面所说的一个时间对应的长整型数与包装类一样 Date类也有一个toString()方法可以将其转换为String类
二、Java学习必经的七个阶段
1、Java基础超级重要,学可java基础语法,确实很乏味,又没有项目成就感。我当时就走马观花地看完了相关语法,就迫不及待地去学习J2EE部分,那种能快速地基干框架,造成系统来了。但是很快由干基础底子不好,在遇到一些问题,我根本想不出来这是为什么会出现这个问题?如果基础扎实的话,立马能从原理上看出问题所在。
2、书籍推荐:无所不会,无所不能的李刚编著的《疯狂Java讲义》。
3、很多非科班培训机构出来的同学,在应用开发方面有所能力,但在计算机基础方面非常薄弱。计算机基础课程是哪些?数据结构与算法、操作系统、计算网络、计算机组成原理、编译原理、LiuX。这几大课程可以说是计算机科班的核心课程,几平是现在一切应用层面开发的基础构成。书籍推荐:本阶段推荐看这本书,也就叫《深入理解java虚拟机》。
4、搞javaWeb的连个页面都不会调,后台页面组件不会使用,真的会很尴尬。不要觉得自己不是前端工程师,不用写页面,这部分就不需要学习了。对干这部分的学可,不需要熟练,但需要常握!主要的学习内容是:HTML、CSS、JavaScript、JQuery、Bootstrap。
5、第四阶段:数据库相关页面已经能做了,那么页面渲染的数据是从哪儿来的?数据库!
6、这里主要学习MySql,Oracle看实际开发中需要再进行学习。又在想java是怎么连接数据库,这里就要学可JDBC7。
7、这部分核心内容也是javaWeb的基础。现在框架当行,实际开发中几平都是基干框架进行开发的。但是这部分的内容是框架的原理所在,要熟练掌握。学完这部分,就可以做动态网站了。主要内容为:Http、Tomcat、Servlet、JSP、Ajax、cookie与session学完之后,尝试动手,不依赖框架进行实战项目开发。
8、当下,Java后端框架众多,集合使用为主。目前较为受欢迎的两大框架集合:SSH、SSM。SSH=Spring+Struts+Hibernateo SSM=Spring+SpringMVC+MyBatis.我目前在学习使用的SSM框架,Maven作为构建工具,似平这套技术栈越来越受欢迎。
9、看实际情况来学习。框架就是工具,如果前面基础扎实了,对框架的学可上手就很快了。正比如练武之人,内功十年,招式一年。可见基础之重要。这部分没有什么多说的,主要在练习,环境配置是最痛苦的了。一定要自己亲手去实现几个Dome,才能深刻理解框架设计的思想。
10、设计模式:记住这是在你实战编程两年以上,攒够了10万行代码之后才去下功夫学习高阶知识。要不你看有关设计模式任何书籍,都像看玄学一样。没有足够的代码量,你也体会不到这些老前辈总结下来的设计模式有何巧妙之处。
11、但新人深刻了解单例模式,单例模式简单,在面试和实际开发中最为常见。一分钟学会单例模式,再也忘不了如何用一个简单的比喻,让完全不懂编程的女生瞬间明白Java中的单例模式是什么,以及项目开发中在哪里用?重构:一本武林秘籍《重构改善既有代码的设计》。
三、Java进阶:Java通过JNI与Delphi交互
1、前一段时间我用java开发一个安装程序适用于tomcat mysql构建的web环境在开发的过程中遇到与写注册表注册系统服务等问题用java本身很难解决于是我想到用JNI C与delphi两者开发JNI我是从delphi转到java上来的我选择了delphi
2、用delphi开发JNI首先从//delphi jedi下载JNI pas把它加入到工程中就可以开发JNI了
3、 library myDllusesJNI windows ComObj ActiveX ShlObj SysUtils Registry;//取得桌面目录function getDesktopPath():String;varReg:TRegistry;DesktopPath:String;beginReg:=TRegistry Create;tryReg RootKey:=HKEY_CURRENT_USER;Reg OpenKey( Sofare\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders False);if Reg ValueExists( Desktop) then DesktopPath:=Reg ReadString( Desktop);Result:= DesktopPath;finallyReg Free;end;end;//创建桌面快捷方式procedure CreateDesktopLink(ProgramPath ProgramArg LinkName Descr IconPath: String);varAnObj: IUnknown;ShellLink: IShellLink;AFile: IPersistFile;FileName: WideString;LinkPath:String;beginLinkPath:=getDesktopPath()+ \+linkName;if UpperCase(ExtractFileExt(LinkPath))<> LNK then//检查扩展名是否正确beginraise Exception Create(快捷方式的扩展名必须是 lnk!);end;tryOleInitialize(nil);//初始化OLE库在使用OLE函数前必须调用初始化AnObj:= CreateComObject(CLSID_ShellLink);//根据给定的ClassID生成一个对象此处是快捷方式ShellLink:= AnObj as IShellLink;//强制转换为快捷方式接口AFile:= AnObj as IPersistFile;//强制转换为文件接口//设置快捷方式属性此处只设置了几个常用的属性ShellLink SetPath(PChar(ProgramPath));//快捷方式的目标文件一般为可执行文件ShellLink SetArguments(PChar(ProgramArg));//目标文件参数ShellLink SetWorkingDirectory(PChar(ExtractFilePath(ProgramPath)));//目标文件的工作目录ShellLink SetDescription(PChar(Descr));//对目标文件的描述ShellLink SetIconLocation(PChar(IconPath));FileName:= LinkPath;//把文件名转换为WideString类型AFile Save(PWChar(FileName) False);//保存快捷方式finallyOleUninitialize;//关闭OLE库此函数必须与OleInitialize成对调用end;end;//创建桌面快捷方式在JNI中调用的就是这个方法//这个过程的命名很有讲究它以 Java开头用下划线将 Java类的包名类名和方法名连起来这个命名方法不能有误否则 Java类将无法将 nativ方法与它对应起来同时在 Win平台上此过程的调用方式只能声明为 stdcall procedure Java__wpd_JavaWindows_createDesktopLink(PEnv: PJNIEnv; Obj: JObject;ProgramPath ProgramArg LinkName Descr iconPath:JString);stdcall;varJVM:TJNIEnv;PPath:String;PArg:String;LName:String;Description:String;IPath:String;beginJVM:= TJNIEnv Create(PEnv);PPath:=JVM UnicodeJStringToString(ProgramPath);PArg:=JVM UnicodeJStringToString(ProgramArg);LName:=JVM UnicodeJStringToString(LinkName);Description:=JVM UnicodeJStringToString(Descr);IPath:=JVM UnicodeJStringToString(IconPath);CreateDesktopLink(PPath PArg LName Description IPath);JVM Free;end;//向java发送一个信息function Java__wpd_JavaWindows_sendMessage(PEnv: PJNIEnv; Obj: JObject):JObject;stdcall;varJVM:TJNIEnv;msg:JObject;m:String;beginJVM:= TJNIEnv Create(PEnv);//*********如果发送的信息中包含中文字符则要先要经过UTF Encode转码否则在java中取得时会是乱码m:=UTF Encode(中国人);msg:=JVM StringToJString(PChar(m));result:= msg;end;{$R* res}exportsJava__wpd_JavaWindows_createDesktopLink Java__wpd_JavaWindows_sendMessage;end
4、把上面的编译生成myDll dll文件放到java能够找到的地方