Java程序设计开发实战_第1页
Java程序设计开发实战_第2页
Java程序设计开发实战_第3页
Java程序设计开发实战_第4页
Java程序设计开发实战_第5页
已阅读5页,还剩661页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java程序设计开发实战第1章:走进Java的世界Java简介Java是SUN(全称为:StanfordUniversityNetwork,1982年成立)公司开发出来的一套编程语言,主设计者是JamesGosling。其最早来源于一个叫Green的嵌入式程序项目,目的是为家用电子消费产品开发一个分布式代码系统,这样就可以通过网络对家用电器进行控制。Java简介在GREEN项目最开始的时候,SUN的工程师原本打算使用C++进行项目的开发,但是考虑到C++语言开发的复杂性,所以基于C++开发出了一套自己的独立平台“OAK”(被称为Java语言的前身,是一种用于网络精巧的安全语言)。SUN公司曾以此投标一个交互式电视项目,但结果被SGI打败。于是当时的Oak几乎无家可归,恰巧这时MarcAndreessen开发的Mosaic和Netscape项目启发了Oak项目组成员,SUN的工程师们开发出了HotJava浏览器,触发了Java进军Internet。但是后来由于互联网低潮所带来的影响,SUN公司并没有得到很好的发展,于是在2009年04月20日被甲骨文公司(Oracle)以74亿美金的交易价格收购。Java技术开发分支Java是一门综合性的编程语言,从最初设计时就综合考虑了嵌入式系统以及企业平台的开发支持,所以在实际的Java开发过程中,其主要有三种开发方向,分别为:JAVASE(最早称为“J2SE”)、JAVAEE(最早称为“J2EE”)、JAVAME(最早称为“J2ME”)Java标准开发(JavaPlatform,StandardEdition、JAVASE):包含构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程,当用户安装了JDK(Java开发工具包)之后就自动支持此类开发支持;Java嵌入式开发(JavaPlatform,MicroEdition、JAVAME):包含JAVASE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒,现在已经被Android开发所代替;Java企业开发(JavaPlatform,EnterpriseEdition、JAVAEE):包含JAVASE中的所有类,并且还包含用于开发企业级应用的类。比如:EJB、Servlet、JSP、XML、事务控制,也是现在大型系统和互联网项目开发的主要平台。Java语言特点-1简洁有效Java语言是一种相当简洁的“面向对象”程序设计语言。Java语言省略了C++语言中所有的难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类等。它更加严谨、简洁,所以足够简单。可移植性Java语言最大的特点在于“一次编写、处处运行”,Java语言的执行基于JVM(JavaVirtualMachine、Java虚拟机)运行,在其源代码编译之后将形成字节码文件,而后不同的操作系统上只需要植入与系统匹配的JVM就可以直接利用JVM的“指令集”解释程序运行,这样降低了程序开发的复杂度,也提高了开发效率。面向对象“面向对象”是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展的一个重大的里程碑。Java是一门面向对象的编程语言,并且有着更加良好的程序结构定义。垃圾回收垃圾指的是无用的内存回收,Java提供有垃圾回收机制(GarbageCollection、GC),利用GC机制使得开发者在编写程序时只需要考虑自身程序的合理性,而不用去关注GC问题,极大的简化了开发难度,而后在Java11版本中又引入了著名的ZGC技术,使得垃圾回收的速度进一步提升。引用传递避免了复杂的指针问题,而使用更加简单的引用来代替指针:指针虽然是一种高效的内存处理模式,但是其需要较强的逻辑分析,而Java在设计的时候充分的考虑到了这一点,所以开发者直接利用引用就可以简化指针的处理,而引用也是在所有初学过程之中最为难以理解的部分。Java语言特点-2适合分布式计算Java设计的初衷是为了更好的解决网络通讯问题,所以Java语言非常适合于分布式计算程序的开发,在Java中不仅提供有简洁的Socket开发支持,同时也适合于公共网关接口(CommonGatewayInterface、CGI)程序的开发。同时在Java中提供有NIO、AIO的支持,使得网络通讯性能得到了强大的改善。健壮性Java设计的初衷是为了更好的解决网络通讯问题,所以Java语言非常适合于分布式计算程序的开发,在Java中不仅提供有简洁的Socket开发支持,同时也适合于公共网关接口(CommonGatewayInterface、CGI)程序的开发。同时在Java中提供有NIO、AIO的支持,使得网络通讯性能得到了强大的改善。多线程编程支持线程是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。Java在多线程处理方面性能超群,同时随着Java语言的不断完善,也提供有JUC的多线程开发框架方便开发者实现多线程的复杂开发。较高的安全性Java程序的执行依赖于JVM上解释字节码程序文件,而JVM拥有较高的安全性,同时随着版本的不断更新,面对于最新的安全隐患也可以及时进行修补。函数式编程除了支持面向对象编程技术之外,在Java中也有着良好的函数式编程支持(Lambda表达式支持),利用函数式编程可以更简洁的实现程序代码编写。模块化支持Java9版本开始提供的最重要功能,毫无疑问就是模块化(Module),代码名字叫做Jigsaw(拉锯),可以将庞大冗余的Java锯成一个个的Module,方便开发和部署。基于虚拟机的软件开发模型现代的编程语言来讲实际上已经不仅仅是一个基本程序功能的实现,更多的时候都需要去考虑完善的程序可移植性设计,这样编写出来的程序才会有更好的通用性,在编程语言发展的历史中最早提出并实现可移植性概念的就是Java语言。而可移植性概念的提出实际上就是一种新的开发模式的提出,在传统的软件开发过程之中都需要大量的依赖于平台支持(操作系统就属于一种平台),利用已有的平台来进行硬件设备的操作,而可移植性的本质在于不直接使用平台,而是在平台上植入虚拟机(VirtualMachine),所有的程序开发面向虚拟机编程,这样就解决了平台的依赖问题Java程序的运行机制计算机高级语言类型主要有编译型和解释型两种,虽然Java语言是基于虚拟机技术的编程开发,但是其依然遵循着高级语言的设计要求,所以在Java语言程序设计中就必须对源程序进行编译处理和解释执行两个步骤才可以正确运行程序JVM执行原理Java语言在执行的时候必须对源代码进行编译,而编译后将产生一种字节码文件(“*.class”文件),这是一种“中间”文件类型,需要由特定的系统环境所执行,而这个系统环境就是Java虚拟机(JavaVirtualMachine、JVM)。在JVM中定义了一套完善的“指令集”,并且不同操作系统版本的JVM所拥有的“指令集”是相同的,这样程序员只需要针对于JVM的指令集进行开发,而由JVM去匹配不同的操作系统,就解决了程序的可移植性问题登录Oracle官方站点JDK是Oracle提供给开发者的一套Java开发工具包,开发者可以利用JDK进行源代码的编译,也可以进行字节码的解释执行,开发者可以直接通过Oracle的官方站点()进行JDK工具获取。进入到官方站点之后可以直接在页面顶部的搜索栏中搜索要下载的资源,本次输入的搜索关键字为“java”获取Oracle-JDK的下载路径如果是一位初学者,直接通过Oracle官方站点搜索并下载JDK可能有一定的难度,所以笔者建议可以通过搜索引擎的形式(例如:百度)进行JDK的下载搜索。在搜索栏中输入“jdk13oracle”的关键字就可以找到快捷链接JDK下载根据搜索结果打开页面之后可以得到如图1-11所示的显示界面,由于本书编写时的最新JDK版本为13,所以会在下载链接的顶部给出“JavaSE13.x.x”的相关信息,选择“Download”就可以进入到相应的下载页面注意:平均每半年就会发布一个JDK的更新版本,下载时不要局限于具体版本,版本号大于本次的JDK都可以使用。JDK的重要版本【1995.05.23】JDK1.0的开发包发布,同时来讲在1996年的时候JDK正式提供下载,标志Java的诞生;【2014年】Java提供了JDK1.8版本,并且支持有Lambda表达式,可以使用函数式编程;【2017年】Java提供了JDK9版本,进一步提升了JDK1.8的稳定性;【2018年】Java提供了JDK11版本,提供了最新的ZGC技术,为“LTS”长期维护版;【2019年】Java提供了JDK13版本,增加了yield关键字与多行字符串定义支持;JDK安装用户下载完成JDK之后将获得一个Windows的程序安装包,如果要安装只需要双击运行即可。本次为了方便会将JDK的工具安装在“D:\Java”目录中JDK命令当JDK安装完成后可以直接打开JDK的安装目录的bin子目录(D:\Java\jdk-13.0.1\bin),在此目录中提供有两个核心命令:javac.exe(源代码编译)、java.exe(字节码解释执行)设置Windows属性在JDK安装完成后提供的“javac.exe”与“java.exe”这两个命令并不属于windows本身,如果要想在命令行工具中直接使用,就必须在windows的系统环境之中进行可执行程序的路径配置,具体操作步骤为:【计算机(此电脑)】→【属性】→【高级系统设置】JDK配置进入到“高级系统设置”进行环境配置,操作步骤:【高级】

【环境变量】

【系统变量】

【编辑Path环境属性】

【添加JDK的目录(D:\Java\jdk-13.0.1\bin)】范例:编写第一个Java程序publicclassHello{

//程序所在类(后期会有详细讲解) publicstaticvoidmain(String[]args){

//程序主方法 System.out.println("沐言科技:");

//屏幕输出信息 }}程序执行结果:沐言科技:【编译程序】在命令行方式下,进入到程序所在的目录,执行:javacHello.java,对程序进行编译,编译完成之后可以发现在目录之中多了一个Hello.class的文件,此文件就是最终要使用的字节码文件。【解释程序】程序编译之后,就可以输入javaHello,就可以在JVM上解释Java程序。类定义程序类:Java中的程序是以类为单位,所以所有的程序都必须在class定义范畴之内,类的定义有两种形式:class类名称{

程序代码}publicclass类名称{

程序代码}java编译后生成的*.class文件在开发中如果类的定义使用了publicclass声明,那么文件名称必须与类名称保持一致。如果说现在没有使用publicclass,而使用了class声明“classHelloYootk{}”。此时文件名称与类名称不相同,但是最终生成的*.class文件的名称将为HelloYootk.class范例:在一个源程序中定义多个类publicclassHello{

//程序所在类(后期会有详细讲解) publicstaticvoidmain(String[]args){

//程序主方法 System.out.println("沐言科技:");

//屏幕输出信息 }}classYootkA{}

//一个源程序中定义多个类classYootkB{}

//一个源程序中定义多个类针对于Java中两种类的定义形式可以得出以下的结论:publicclass定义要求文件名称与类名称保持一致,而在*.java文件之中只允许有一个publicclass定义;class定义的类文件名称可以与类名称不一致,但那是在编译之后每一个使用class声明的类都会生成一个*.class文件,也就是说一个java文件可以产生多个class文件。系统输出系统输出:如果要在屏幕上显示信息,则可以通过系统输出的形式完成,对于该操作有两种使用形式:“System.out.println(输出数据)”:数据输出之后追加一个换行;“System.out.print(输出数据)”:数据输出之后不追加换行,而是在当前所在行的末尾继续输出。publicclassHello{ //程序所在类(后期会有详细讲解) publicstaticvoidmain(String[]args){ //程序主方法 System.out.print("沐言科技:。"); //屏幕输出信息 System.out.print("沐言科技:。"); //屏幕输出信息 System.out.print("沐言科技:。"); //屏幕输出信息 }}程序执行结果:沐言科技:。沐言科技:。沐言科技:。CLASSPATH作用Java程序的执行依赖于JVM,当用户使用java命令去解释class字节码文件的时候实际上都会启动一个JVM进程,而在这个JVM进程之中需要有一个明确的类加载路径,而这个路径就是通过CLASSPATH环境属性指派的设置CLASSPATH在java中可以使用setclasspath命令指定java类的执行路径,这样就可以在不同的路径下来加载指定路径中的class文件进行执行。下面通过一个实验来了解classpath的作用,假设这里的Hello.class类位于d:\yootk目录中。SETCLASSPATH=d:\yootk在系统环境变量中添加新的环境属性SETCLASSPATH=.交互式编程环境从JDK1.9之后版本开始提供有一个方便的交互式工具:JShell,利用此工具可以方便的执行程序,并且不再需要编写主方法就可以执行程序,如果要想运行jshell工具,直接在命令行方式下输入“jshell”即可jshell命令执行执行命令1:100+200执行命令2:System.out.println("沐言科技:");定义jshell程序文件“yootk.txt”System.out.println("沐言科技:");System.out.println("沐言科技讲师:李兴华(人称“小李老师”)");MacOS系统支持的JDKJava属于一种跨平台的编程语言,这样一来就需要不同操作系统下的JDK的支持,如果要想在MacOS系统里面使用JDK就必须下载与之匹配的版本,本次主要基于JDK13的讲解,所以现在要下载的就是JDK13支持包,而针对于MacOS系统中提供有两种不同的JDK软件包,这两种软件包的区别如下:MacOS程序运行安装版(jdk-13_osx-x64_bin.dmg):提供了与Windows安装程序类似的安装包,可以直接打开并且会采用自动的形式安装,同时也会自动的进行环境属性的配置,如果系统中第一次安装JDK推荐使用此版本,这样可以降低配置难度MacOS解压缩安装版(jdk-13_osx-x64_bin.tar.gz):通过解压缩命令进行配置,需要根据MacOS系统的要求安装到指定的目录,同时需要开发者手工配置环境属性,本次的讲解将基于此类的程序包进行安装配置讲解。MacOS安装JDK安装路径:/Users/{你的用户名}/Desktop/jdk-13_osx-x64_bin.tar.gz进入目录:cd/Users/yootk/Desktop/解压缩:sudotarxzvf~/Desktop/jdk-13_osx-x64_bin.tar.gz-C/Library/Java/JavaVirtualMachines/创建源代码目录:mkdir-p~/workspace/source/java目录切换:cd~/workspace/source/java编写代码:viHello.javapublicclassHello{ publicstaticvoidmain(Stringargs[]){ System.out.println("沐言科技:"); }}JDK管理获取JDK:ls/Library/Java/JavaVirtualMachines/查看环境属性:/usr/libexec/java_home–V获取JDK1.8路径:/usr/libexec/java_home-v1.8查看JDK13路径:/usr/libexec/java_home-v13配置环境属性:打开配置文件:vi~/.bash_profile配置文件生效:source~/.bash_profile路径配置:exportJAVA_8_HOME=$(/usr/libexec/java_home-v1.8)exportJAVA_11_HOME=$(/usr/libexec/java_home-v11)exportJAVA_13_HOME=$(/usr/libexec/java_home-v13)命令配置:aliasjava8='exportJAVA_HOME=$JAVA_8_HOME'aliasjava11='exportJAVA_HOME=$JAVA_11_HOME'aliasjava13='exportJAVA_HOME=$JAVA_13_HOME'JENV配置组件安装:brewinstalljenv环境配置:vi~/.bash_profile修改PATH属性:PATH=$PATH:/usr/local/mysql/bin:$ERLANG_HOME/bin:$M2_HOME/bin:$HOME/.jenv/bin:定义jenv执行:eval"$(jenvinit-)"配置生效:source~/.bash_profileJDK注册:jenvadd/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/HomeJDK配置:jenvglobal11(直接使用JDK版本编号即可)JDK移除:jenvremoveoracle64-11手机扫码——随时关注我们我们将持续进行各类编程技术的课程直播,如果你想第一时间收到我们的课程直播信息,可以拿出手机,通过不同平台APP扫码关注。技术学习小程序打开微信添加“沐言优拓”小程序,里面有免费的各类编程资源,通过手机直接学习。李兴华Java程序设计开发实战第2章:程序基础概念Java程序注释任何一套程序代码里面实际上都会有大量的程序逻辑所组成,但是如果要想对一套代码进行长期的维护,就需要编写大量的注释,对一些程序的代码功能进行详细的解释,这样不仅便于开发者自己读懂程序,也方便后续的继任开发者读懂程序。在Java中所有的注释信息在编译时都不会进行编译处理,而Java程序中的支持的注释类型一共有三种:单行注释:“//注释内容”;多行注释:“/*…注释内容…*/”;文档注释:“/**…文档注释的特定语法标记进行注释的编…*/”。范例:在程序中通过注释描述程序功能/***【文档注释】该类的主要作用是在屏幕上输出信息*文档注释之中需要编写大量的配置语法,其中“@author”描述的是作者信息,一般通过开发工具生成*@author李兴华*/publicclassYootkDemo{

//【单行注释】定义程序主类 publicstaticvoidmain(String[]args){

//【单行注释】定义程序主方法 /*【多行注释】下面的代码要通过Java程序内部提供的输出语句在屏幕上输出信息 *输出信息的内容:“沐言科技:” **/ System.out.println("沐言科技:");

//【单行注释】信息输出 }}标识符在Java中标识符定义的核心原则如下:由字母、数字、_、$所组成,其中不能使用数字开头,不能使用Java中的保留字(或者被称为“关键字”)。对于标识符的使用,本书有如下建议:在编写的时候尽量不要去简单的使用数字,例如:i1、i2;命名尽量有意义,不要使用“a”、“b”这样的简单标识符。而使用“Student”、“Math”之类的单词进行定义,因为这类的标识符都可以通过名称直接获取其意义;Java中标识符是区分大小写的,例如:yootk、Yootk、YOOTK表示的三个不同的标识符;“$”符号有特殊意义,不要在开发中去直接使用(将在内部类中为读者讲解);正确的标识符No.正确的标识符结构分析1yootk_name由字母和下划线组成,符合标识符的定义要求2YootkDemo使用字母构成,由一个域名(“Yootk”)和一个单词所组成3teacherLee由两个不同的单词所组成,第一个单词的字母小写,第二个单词的首字母大写4num_110由字母、数字、下划线所组成,符合标识符的定义要求错误的标识符No.错误的标识符结构分析1110_No.1使用数字开头,并且使用了“.”作为标识符的组成2yootk#hello使用了非法的“#”符号作为了标识符3class使用了程序中的关键字(保留字),那么这种标识符也是错误的Java中的关键字类型Java关键字(保留字)访问控制privateprotectedpublic

类、方法、变量修饰符abstractclassextendsenumfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatilevoidtransient

程序控制breakcontinuecasedefaultdoelseforifinstanceofswitchwhile

操作返回returnyield

异常处理assertcatchtrythrowthrows

包相关importpackage

数据类型booleanbytechardoublefloatintlongshortvar

特殊标记nulltruefalse

操作引用superthis

保留关键字constgoto

Java数据类型划分Java数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)类(class)接口(interface)数组整数类型(byte、short、int、long)浮点类型(float、double)数据类型划分No.数据类型大小/位可表示的数据范围默认值1byte(字节)8-128~12702short(短整型)16-32768~3276703int(整型)32-2147483648~214748364704long(长整型)64-9223372036854775808~922337203685477580705float(单精度)32-3.4E38(-3.4

1038)~3.4E38(3.4

1038)0.06double(双精度)64-1.7E308(-1.7

10308)~1.7E308(1.7

10308)0.07char(字符)160('\u0000')~65,535('\uffff')'\u0000'8boolean(布尔)-true或falsefalse变量与常量变量和常量是在整个程序计算过程之中主要使用的两个数据的存储形式,其中所有给定的不能修改的内容将其称为常量,而所有可以修改的内容就将其称为变量范例:在程序中定义变量和常量publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 //在程序中定义的常量内容是无法进行修改的 System.out.println(10);

//【基本数据类型】整型常量 //在程序中定义的变量由于变量名称本身属于一个标识,那么就可以根据其类型任意修改内容 intage=16;

//【基本数据类型】定义整型变量 age=18;

//修改整型变量内容,必须设置整数,18为整数 System.out.println(age);

//输出变量内容 intcurrent=27;

//【基本数据类型】定义整型变量 age=current;

//通过一个变量的内容修改age变量内容 System.out.println(age);

//输出变量内容 }}程序执行结果:10(输出整数10,代码“System.out.println(10)”执行结果)18(输出age变量的内容,代码“System.out.println(age)”执行结果)27(输出age变量修改后的变量内容,代码“System.out.println(age)”执行结果)整型整型数据一共有4种类型,按照保存的范围由小到大分别为byte、short、int、long,在Java里面任何一个整型常量(例如,30、100这样的数字),其默认的类型都是int型。范例:定义int型变量并使用变量计算publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 //数据类型变量名称=常量、整数常量的默认类型为int intnumber=10;

//定义一个整型变量 //int变量=int变量数值+20常量(int类型) number=number+20;

//进行变量的加法计算 System.out.println(number);

//输出变量类型为int }}程序执行结果:30范例:观察超过int保存数据范围时的问题publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intmax=2147483647;

//获取int的最大值 intmin=-2147483648;

//获取int的最小值 //int型变量+int型常量=int型计算结果 System.out.println(max+1);

//-2147483648,最大值+1=最小值 System.out.println(max+2);

//-2147483647,最大值+2=次最小值 //int型变量-int型常量=int型计算结果 System.out.println(min-1);

//2147483647,最小值-1=最大值 }}程序执行结果:-2147483648(“max+1”语句执行结果)-2147483647(“max+2”语句执行结果)2147483647(“min-1”语句执行结果)结局数据溢出如果要想去解决这种溢出的问题,就只能够通过扩大数据范围的方式来实现,那么比int范围更大的是long数据类型。而要将int型的变量或常量变为long数据类型有如下两种形式:形式一:int型常量转换为long型常量,使用“数字L”、“数字l(小写的字母L)”完成;形式二:int型变量转换为long型变量,使用“(long)变量名称”。实际上可以用此类方式实现各种数据类型的转换,例如:如果将int型变量变为double型变量,可以使用“(double)变量名称”,即:通用转换格式“(目标数据类型)变量”。范例:通过long数据类型解决int的数据溢出问题publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 longmax=2147483647;

//获取int的最大值 longmin=-2147483648;

//获取int的最小值 //long型变量+int型常量=long型计算结果 System.out.println(max+1);

//【正确计算结果】2147483648 System.out.println(max+2);

//【正确计算结果】2147483649 //long型变量-int型常量=long型计算结果 System.out.println(min-1);

//【正确计算结果】-2147483649 }}程序执行结果:2147483648(“max+1”语句执行结果)2147483649(“max+1”语句执行结果)-2147483649(“max-1”语句执行结果)范例:数据类型强制转换publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 longnum=2147483649L;

//此数值已经超过了int范围 inttemp=(int)num;

//【数据溢出】long范围比int范围大,不能够直接转换 System.out.println(temp);

//内容输出 }}程序执行结果:-2147483647范例:定义byte变量在Java整型类型中还有一种byte数据类型,该数据类型主要描述字节类型,而每一位字节类型由8位二进制数据所组成,其能够描述的最大数据范围是:“-128~127”。publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 bytenum=20;

//定义byte型变量 System.out.println(num);

//输出byte型变量 }}程序执行结果:20浮点型浮点型数据描述的是小数,而在Java里面任意的一个小数常量其对应的类型为double,所以在以后描述小数的时范例:定义double型变量候都建议直接使用double来进行定义publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 //语法格式:double变量=常量(double类型) doublenum_a=99.89;

//定义double变量 intnum_b=199;

//定义int变量 //double变量(num_a)+double变量(num_b,int自动转为double)=double型结果 doubleresult=num_a+num_b;

//进行数学计算 System.out.println(result);

//输出结果:298.89 }}程序执行结果:298.89范例:定义float型变量Java中的浮点类型一共定义有两类,除了最为常用的double数据类型之外还可以使用float定义浮点型数据,但是float由于存在二进制操作的问题,所以会产生计算结果精度不准确的“错误”,由于Java中默认的浮点型常量类型为double,所以在Java里面如果要想定义float变量,就必须将浮点型常量进行强制的类型转换才可以正常进行。publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 floatnum_a=9.9F;

//将double常量强制转为float变量 floatnum_b=(float)0.3;

//将double常量强制转为float变量 System.out.println(num_a+num_b);

//数学计算 System.out.println(num_a/num_b);

//数学计算 }}程序执行结果:10.2(“System.out.println(num_a+num_b)”代码执行结果)32.999996(“System.out.println(num_a/num_b)”代码执行结果)strictfpstrictfp(strictfloatpoint、精确浮点)是一个并不会被经常使用到的关键字。使用它定义的程序结构(例如:类、接口、方法等)中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。也就是说如果希望浮点运算更加精确,并且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfppublicstrictfpclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 floatnum_a=9.9F;

//浮点型变量 floatnum_b=(float)0.3;

//浮点型变量 System.out.println(num_a/num_b);

//除法计算 }}程序执行结果:32.999996范例:整型除法计算精度的问题与解决方案在项目的开发之中整型和浮点型之间最大的区别在于就是小数点,也就是说所有的整型数据内容是不会保留小数位的,那么如果说现在计算的数据本身会产生小数位,则如果没有使用浮点型而使用整型,对应的小数位会全部丢弃。publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnum_a=9;

//定义整型变量 intnum_b=2;

//定义整型变量 System.out.println(num_a/num_b);

//整型除法计算,不保留小数位 System.out.println(num_a/(double)num_b);

//整型转为浮点型实现除法计算 }}程序执行结果:4(“System.out.println(num_a/num_b)”代码执行结果)4.5(“System.out.println(num_a/(double)num_b)”代码执行结果)字符在计算机的世界里,一切都是以编码的形式出现。Java使用的是十六进制的Unicode编码,此类编码可以保存任意的文字,所以在Java中进行字符处理时就可以避免由于位数长度不同所造成的乱码问题。如果要定义字符变量则可以使用char关键字进行定义。在UNICODE编码设计过程之中,考虑到与其它语言的结合问题(C/C++),那么在此编码里与ASCII编码的部分编码重叠,以下面内容的编码为例:大写字母范围:65('A')~90('Z');小写字母范围:97('a')~122('z')、大写字母和小写字母之间差了32;数字字符范围:48('0')~57('9')。范例:定义字符型变量并观察其编码转换publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 charc='a';

//字符需要使用单引号进行声明 System.out.println(c);

//输出字符变量 intnum=c;

//将字符直接转为int(不需要强制转换) System.out.println(num);

//观察字符编码 num=num-32;

//小写字母编码比大写字母编码多出32 System.out.println((char)num);

//整型强制转为字符型 }}程序执行结果:a(“System.out.println(c)”代码执行结果)97(“System.out.println(num)”代码执行结果)A(“System.out.println((char)num)”代码执行结果)范例:设置中文字符由于UNICODE编码可以保存任何的问题,所以在定义char类型时也可以将内容设置为中文。在UNICODE编码中每一位中文也都有各自的编码,所以在中文语言环境下当前的程序是没有任何问题的,但是需要注意的是,此时只允许保存一位中文。publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 charc='沐'; //一个字符变量 intnum=c; //可以获得字符的编码 System.out.println(num); //输出编码值 }}程序执行结果:27792(中文编码)布尔型布尔型是一种描述处理结果的逻辑内容,对于计算机的世界来讲除了真就是假,没有中间的过渡环节,布尔在Java编程语言里面使用boolean关键字来进行定义,而布尔的取值只有两个内容:true、false(这两个在Java中都属于有特殊含义的关键字)。乔治•布尔乔治•布尔(GeorgeBoole,1815.11.2~1864),1815年11月2日生于英格兰的林肯。19世纪最重要的数学家之一,出版了《逻辑的数学分析》,这是它对符号逻辑诸多贡献中的第一次。1854年他出版了《思维规律的研究》,这是他最著名的著作。在这本书中布尔介绍了现在以他的名字命名的布尔代数。1864年,布尔死于肺炎,肺炎是他在暴风雨天气中尽管已经湿淋淋的了仍坚持上课引起的。由于其在符号逻辑运算中的特殊贡献,很多计算机语言中将逻辑运算称为布尔运算,将其结果称为布尔值。范例:使用boolean数据类型publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 booleanflag=true;

//定义一个布尔型的变量 if(flag){

//如果判断条件成立 System.out.println("沐言科技:");

//信息输出 } }}程序执行结果:沐言科技:String字符串字符串(String)是一种特殊的结构类型,利用字符串可以实现多个字符内容的定义,在Java中需要通过“"”定义字符串常量,虽然字符串属于引用数据类型,但是其却可以像基本数据类型那样进行操作。范例:定义字符串变量publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 //以下两行程序等价于:“System.out.println("沐言科技:")”输出语句 Stringmessage="沐言科技:";

//字符串一定要使用“"”定义 System.out.println(message);

//输出字符串对象内容 }}程序执行结果:沐言科技:范例:字符串连接publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 Stringmessage="沐言科技:";

//定义了一个字符串变量(对象) //字符串的连接形式有两种,第一种使用常规的语法编写 message=message+"";

//进行字符串的连接 //第二种字符串连接使用简写符号完成 message+="——技术讲师:小李老师";

//字符串连接 System.out.println(message);

//输出字符串对象 }}程序执行结果:沐言科技:——技术讲师:小李老师范例:字符串连接其它数据类型publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 Stringprompt="数据输出:";

//公共要使用的字符串 System.out.println(prompt+1);

//连接整型 System.out.println(prompt+1.1);

//连接浮点型 System.out.println(prompt+'Y');

//连接字符型 System.out.println(prompt+true);

//连接布尔型 }}程序执行结果:数据输出:1(“System.out.println(prompt+1)”代码执行结果)数据输出:1.1(“System.out.println(prompt+1.1)”代码执行结果)数据输出:Y(“System.out.println(prompt+'Y')”代码执行结果)数据输出:true(“System.out.println(prompt+true)”代码执行结果)转义字符在进行字符串定义的时候本身如果包含有一些特殊的内容肯定是无法直接定义的,所以在这样的情况下要想描述一些特殊标记的符号就要使用转义字符,常见的转义字符为:双引号("、“\"”)、单引号('、“\'”)、换行符(“\n”)、制表符(“\t”)、\(“\\”)。范例:定义转义字符publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 Stringmessage="沐言科技:\"\"\n" +"沐言科技讲师:李兴华老师\t江湖人称:\'小李老师\'";

//使用转义字符 System.out.println(message);

//输出字符串变量 }}程序执行结果:沐言科技:""沐言科技讲师:李兴华老师

江湖人称:'小李老师'var关键字Java本身属于一门静态编程语言,在进行各个变量定义的时候就必须明确的声明变量的类型以及变量的具体内容,但是随着当今时代编程语言技术的发展,供了推断式变量的定义已经被广泛的使用,所以从JDK1.10版本开始之后,Java提供了一个新的var关键字,利用此关键字可以实现变量的定义,而对于变量的数据类型则会根据所赋予的内容动态定义。范例:利用var关键字推断变量类型publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 varnum_a=10.2;

//将自动推断num_a类型为double varnum_b=3;

//将自动推断num_b类型为int System.out.println(num_a-num_b);

//数学计算 }}程序执行结果:7.199999999999999范例:在引用类型中使用var推断publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 varmessage="沐言科技:";

//引用数据类型 System.out.println(message);

//数据输出 }}程序执行结果:沐言科技:运算符Java中的语句有很多种形式,表达式就是其中的一种形式。表达式由操作数与运算符组成:操作数可以是常量、变量或方法,而运算符就是数学中的运算符号“+”“-”“*”“/”“%”等。以表达式“z+10”为例,z与10都是操作数,而“+”就是运算符Java运算符No.运算符类型范例结果描述1=赋值运算符intx=10;x的内容为10为变量x赋值为数字常量102?:三目运算符intx=10>5?10:5x的内容为10将两个数字中较大的值赋予x3+算术运算符intx=20+10;x=30加法计算4–算术运算符intx=20-10;x=10减法计算5*算术运算符intx=20*10;x=200乘法计算6/算术运算符intx=20/10;x=2除法计算7%算术运算符intx=10%3;x=1取模(取余数)计算8>

关系运算符booleanx=20>10;x=true大于9<

关系运算符booleanx=20<10;x=false小于10>=关系运算符booleanx=20>=20;x=true大于等于11<=关系运算符booleanx=20<=20;x=true小于等于12==关系运算符booleanx=20==20;x=true等于13!=关系运算符booleanx=20!=20;x=false不等于14++自增运算符intx=10;inty=x++*2;x=11y=20“++”放在变量x之后,表示先使用x计算,之后x的内容再自增intx=10;inty=++x*2;x=11y=22“++”放在变量x之前,表示先将x的内容自增,再进行计算15--自减运算符intx=10;inty=x--*2;x=9y=20“--”放在变量x之后,表示先使用x计算,之后x的内容再自减intx=10;inty=--x*2;x=9y=18“--”放在变量x之前,表示先将x的内容自减,再进行计算16&逻辑运算符booleanx=false&true;x=falseAND,与,全为true结果为true17&&逻辑运算符booleanx=false&&true;x=false短路与,全为true结果为true18|逻辑运算符booleanx=false|true;x=trueOR,或,有一个为true结果为true19||逻辑运算符booleanx=false||true;x=true短路或,有一个为true结果为true20!逻辑运算符booleanx=!false;x=trueNOT,否,true变false,false变true21()括号运算符intx=10*(1+2);x=30使用()改变运算的优先级22&位运算符intx=19&20;x=16按位与23|位运算符intx=19|20;x=23按位或24^位运算符intx=19^20;x=7异或(相同为0,不同为1)25~位运算符intx=~19;x=-20取反26<<

位运算符intx=19<<2;x=76左移位27>>

位运算符intx=19>>2;x=4右移位28>>>

位运算符intx=19>>>2;x=4无符号右移位29+=简洁运算符a+=b-a+b的值存放到a中(a=a+b)30-=简洁运算符a-=b-a-b的值存放到a中(a=a-b)31*=简洁运算符a*=b-a*b的值存放到a中(a=a*b)32/=简洁运算符a/=b-a/b的值存放到a中(a=a/b)33%=简洁运算符a%=b-a%b的值存放到a中(a=a%b)Java运算符优先级优先级运算符类型结合性1()括号运算符由左至右1[]方括号运算符由左至右2!、+(正号)、-(负号)一元运算符由右至左2~位逻辑运算符由右至左2++、--递增与递减运算符由右至左3*、/、%算术运算符由左至右4+、-算术运算符由左至右5<<、>>位左移、右移运算符由左至右6>、>=、<、<=关系运算符由左至右7==、!=关系运算符由左至右8&(位运算符AND)位逻辑运算符由左至右9^(位运算符号XOR)位逻辑运算符由左至右10|(位运算符号OR)位逻辑运算符由左至右11&&逻辑运算符由左至右12||逻辑运算符由左至右13?:三目运算符由右至左14=赋值运算符由右至左数学运算符No.算术运算符描述1+加法2–减法3*乘法4/除法5%取模(取余数)publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intresult=89*(29+100)*2;

//四则运算,利用括号修改优先级 System.out.println(result);

//输出运算结果 }}程序执行结果:22962范例:模运算publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnumber=3;

//定义变量 intresult=number%2;

//求模 System.out.println("运算结果:"+result);

//输出计算结果 }}程序执行结果:运算结果:1简化赋值运算符No.运算符范例用法说明描述1+=a+=ba+b的值存放到a中a=a+b2-=a-=ba-b的值存放到a中a=a-b3*=a*=ba*b的值存放到a中a=a*b4/=a/=ba/b的值存放到a中a=a/b5%=a%=ba%b的值存放到a中a=a%bpublicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnumber=3;

//定义变量 //传统做法(number=number+2;)是先计算再赋值,要通过两步完成。 number+=2;

//用number的变量加上常量2,再赋值回number变量 System.out.println("运算结果:"+number);

//输出计算结果 }}程序执行结果:运算结果:5自增与自减运算符计算机拥有完善的操作逻辑,所以在数据计算的过程之中就有可能需要进行累加或累减处理操作,传统的做法使用的是“变量+1”或“变量-1”的语法操作,而为了简化这样的操作(同时也为了提升操作性能),所以在Java中提供有自增(数字+1)与自减的(数字-1)的操作运算符No.自增与自减运算符描述1++自增,变量值加1,放在变量前表示先自增后运算,放在变量后表示先计算后自增2--自减,变量值减1,放在变量表示先自减后运算,放在变量后表示先计算后自减publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnumA=10;

//定义整型变量 intnumB=100;

//定义整型变量 System.out.println("原始的numA变量内容:"+numA+"、原始numB变量内容:"+numB); numA++;//实现了自增运算(本质上为“num+=1”,但是性能要更高) numB--;//实现了自减运算(本质上为“num-=1”,但是性能要更高) System.out.println("自增后的numA变量内容:"+numA+"、自减后的numB变量内容:"+numB); }}程序执行结果:原始的numA变量内容:10、原始numB变量内容:100自增后的numA变量内容:11、自减后的numB变量内容:99自增与自减执行位置操作类型操作形式描述自增运算变量++计算后再自增。先使用变量的内容进行计算,当计算完成之后再进行变量的累加处理++变量先自增再计算。先执行自增运算,自增运算完毕之后再使用自增后的变量内容参与运算。自减运算变量--计算后再自减。先使用当前变量进行计算,计算完成之后再对变量执行自减操作--变量先自减再计算。先对变量进行自减计算,计算完成之后再使用自减后的变量内容参与计算。publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnumA=10;

//整型变量 intnumB=5;

//整型变量 intresult=numA+++numB;

//先自增再进行计算 System.out.println("计算结果:"+result);

//输出执行结果 System.out.println("numA变量内容:"+numA+"、numB变量内容:"+numB); }}程序执行结果:计算结果:16numA变量内容:10、numB变量内容:6范例:自减混合运算处理publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intnumA=10;

//整型变量 intnumB=5;

//整型变量 intresult=numA+numB--;

//首先实现numA和numB变量内容的加法,而后再进行numB的自减 System.out.println("计算结果:"+result);

//输出执行结果 System.out.println("numA变量内容:"+numA+"、numB变量内容:"+numB); }}程序执行结果:计算结果:15numA变量内容:10、numB变量内容:4范例:使用关系运算符进行数据判断publicclassYootkDemo{

//沐言科技: publicstaticvoidmain(String[]args){

//程序主方法 intzsAge=10;

//第一个人的年龄 intlsAge=20;

//第二个人的年龄 booleanresultA=zsAge>lsAge;

//进行大小比较 System.out.println("整型变量关系判断:"+resultA);

//输出判断结果 doublesalaryA=1.1;

//第一个人的工资 doublesalaryB=-1000.0;

//第二个人的工资 booleanresultB=salaryA>salaryB;

//直接进行数字比较 System.out.println("浮点型变量关系判断:"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论