1、第一天 JAVA SE 核心知识3.1、Java 简介(了解)Java 是一门编程语言, Java 发展到今天,已经成为了一个真正意义上的语言标准,如果学习过(C、C+、Java)可以发现语法结构是很类似的,但是 Java 的标准指的是一种作为应用层封装的标准,使用 Java 可以调用一些底层的操作,例如,今天的 Android 开发,就是利用了 Java 调用了 Linux 内核操作形成的。在 2003 年的时候,Java 成功的应用在了一枚美国的火箭上。2001 年的时候有一份报道:在美国,从事于 C+的开发人员的年薪是$6.5,而从事 Java 开发的人员的年薪是$7W,7 * 9 =¥
2、63W(梦想。),第一次在国内的报道上看到 Java 是 1998 年的时候。如果要想追溯 Java 的发展,那么首先需要从 1991 年的 GREEN 项目开始说起,这个项目当时是在 email 特别盛行的时候提出来的,指的是使用 email 去控制各个家电产品的运行(物联网),最早 SUN 的工程师打算使用 C+进行项目的开发,但是后来考虑到 C+的复杂性,所以使用 C+开发出了一个新的平台( Java 使用的是 C+开发的,但是比 C+更加的简单) OAK(橡树)平台。不过遗憾的是,在与 NetScape 的 SGL 竞标的时候不幸落败(等待淘汰)。不过后来 SUN 的工程师们开始向网景
3、公司学习浏览器技术,推出了 HotJava 浏览器(HotJava 程序设计,王克宏),从而向浏览器技术开始发展,于是在 1995 年的时候正式的将 OAK 更名为 Java(咖啡),但是 Java 的历史发展,可以归纳为如下的几个阶段: 第一阶段(完善期):JDK 1.0 JDK 1.2; 第二阶段(平稳期):JDK 1.3 JDK 1.4; 第三阶段(发展期):JDK 1.5 JDK 1.7;在 1995 年的时候推出了 JDK 1.0、在 1998 年的时候推出了 JDK 1.2(更名为 Java 2)、2005 年的时候推出了 JDK 1.5。对于 Java 的制造公司 SUN(中文翻
4、译为:太阳公司,斯坦伏大学网络),是一家主要从事于硬件生产的公司,其中 SUN 最为著名的就是它的小型机(成功的应用案例:应用在 Amazon 书店上),而最悲催的是 SUN 的确是 Java 的缔造者,但是真正用它赚到钱的是 IBM(Websphere Studio)。而且 SUN 公司在 2000 年之后的互联网风暴之中就再也没有缓过劲来,于是在 2009 年的时候被 IBM 提议收购,不过没有谈成,马上 Oracle 跟进,最终被 Oracle 以 69 亿美金收购。面试题:请你谈一谈,Oracle 收购 SUN 公司有什么用?No. 对比 Oracle Microsoft1 操作系统
5、UNIX Windows2 数据库 Oracle 大型数据库 SQL Server 中小型数据库3 中间件 OAS、收购了 BEA 得到 WebLogic IIS4 编程语言 PLSQL、收购 SUN 得到 Java .NET而一旦 Oracle 收购了 SUN 公司之后,市场上的编程语言的格局,变为三家公司:Microsoft、Oracle、Adobe(FLEX,Flash 编程),不过这几年 Adobe 也比较悲惨,被 Microsoft、Oracle、Apple,一起抵制Flash。那么从 Java 的开发地位而言,也分为以下的几个方面: J2SE(2005 年之后更名为 JAVA SE
6、):指的是进行桌面单机程序的开发; J2EE(2005 年之后更名为 JAVA EE):指的是企业平台开发; J2ME(2005 年之后更名为 JAVA ME):进行嵌入式开发。JAVA EE:只要是进行大型的企业项目开发,像银行、电信等服务都会使用此架构;JAVA ME:Nokia 盛行的时候,Java 的手机游戏推广的比较好,但是 Java ME 并没有得到很好的发展,而是后来被Android 所取代了,而到 Android 时代,可以说是真正的将 Java 最早的嵌入式开发的设想给做出来的,并且有了大量的游戏和软件出现。而 Android 的出现,正式的标志着移动互联网时代的开启。但是对
7、于 Android 开发而言,国内现在可以做手机的人有,但是可以做整体的人很少。Java 语言的本身的特点如下:1、 Java 语言足够简单,相对于其他的任何语言而言,是很容易学的(入门简单);2、 Java 避免了 C/C+之中复杂的指针关系,而使用了更为简单的引用方式来进行内存传递;3、 Java 是为数不多的支持多线程开发的编程语言;4、 Java 提供了自动的垃圾收集机制,可以定期释放出无用的垃圾空间;5、 Java 语言的安全性较高;6、 Java 最大的特点是具备可移植性,即:同一个程序在不同的操作系统上都可以运行。如果从编程语言的角度而言,应该分为两种: 编译型:如果学习过 C
8、的同学应该知道,编译之后会形成出一个*.exe 的文件; 解释型:像 ASP 语言那样,直接将代码放到服务器上进行解释。但是 Java 本身却属于两种类型的集合,观察图形:通过如上的图形可以发现,任何一个*.java 程序首先必须经过编译,编译之后会形成一个*.class 的文件(字节码文件),而后在电脑上执行的不是*.java,而是编译之后的 *.class 文件(这个文件可以理解为“加密”的文件),但是解释程序的电脑并不是一台真正意义上的电脑,而是一台由软件和硬件模拟出来的电脑 Java 虚拟机。Java 虚拟机的最大作用是起到平台的支持上,通过如上的图形可以发现,所有要解释的程序在 JV
9、M 上执行,但是由不同版本的 JVM 去匹配不同的操作系统,这样只要 JVM 的支持不变,程序可以任意的在不同的操作系统上运行。但是这种运行方式很明显没有直接运行在操作系统上性能高,不过随着硬件技术的发展,这些问题几乎可以忽略了。3.2、JDK 的安装与配置(重点)如果要进行 Java 的程序开发,必须有 JDK 的支持,JDK 指的是 Java 的开发工具,本次使用的版本是 JDK 1.7(不过在实际的开发之中,可能 JDK 1.5 还是主流使用版本),可以直接登录 ( )上进行下载。在进行 JDK 的安装之前,建议关闭本机的病毒防火墙。为了日后的方便维护,所以将 JDK 安装到:d:jav
10、a 目录下。安装 JDK 的过程之中还提示是否安装 JRE(Java 运行时解释),主要的功能是解释*.class 程序的,此处的安装目的是要更新本机的 JRE 版本,不过 JDK 本身是可以解释程序的。安装完成之后会出现以下的提示信息。对于 Java 程序开发而言,主要会使用 JDK 的两个命令:javac.exe 、java.exe。路径:D:Javajdk 1.7.0 _09bin。但是这些命令由于不属于 windows 自己的命令,所以要想使用,就需要进行路径配置。配置步骤:【我的电脑】 【属性】 【高级】 【环境变量】 【添加新的 PATH】,不同的 PATH 之间使用“;”分隔,修
11、改如下:3.3、第一个 Java 程序:永远的“Hello World !”(重点)第一个要测试的程序永远从“Hello World !”开始,Java 程序的文件后缀必须是*.java。范例:定义一个新的文件:Hello.javapublic class Hello public static void main(String args) System.out.println(“Hello World !“) ;当一个*.java 程序编写完成之后,可以按照如下的步骤执行: 编译程序,通过命令行进入到程序所在的路径,执行:javac Hello.java ,形成“Hello.class ”(
12、字节码); 解释程序,对生成的 Hello.class 在 JVM 上执行,输入: java Hello。在正常的情况下,本程序已经可以执行了,但是现在发现出现了如下的错误提示:Exception in thread “main“ java.lang.UnsupportedClassVersionError: Hello (Unsupported major.minor version 51.0)直接提示“UnsupportedClassVersionError ”(不支持的类版本错误),现在编译的时候使用的是 JDK 1.7,那么解释的时候也应该 JDK 1.7,那么来验证一下当前的 JRE
13、 版本,输入:java -version,信息如下:java version “ 1.4.2 _03“Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2 _03-b02)Java HotSpot(TM) Client VM (build 1.4.2 _03-b02, mixed mode)发现现在解释程序的版本是 JRE 1.4,因为 Oracle 10g 安装之后,本身就默认提供了 JDK,而这个 JDK 在 path 中的配置如下:D:oracleproduct 10.1.0 db_1jre1.4.2binclient
14、;D:oracleproduct 10.1.0 db_1jre1.4.2bin;那么现在有两种解决方法: 方法一:删除掉 Oracle 的所有 JRE 配置,太残忍了; 方法二:由于 path 的内容采用的是顺序读取方式,可以将新的配置写在最前面,修改 PATH:3.4、第一个程序解释(重点)第一个程序编写完成之后,下面来对此程序的组成进行说明:1、 关于类的定义:所有的 java 程序一定要被类所管理,那么定义类的格式如下:public class 类名称 对于类的定义现在就有了两种形式: public class 定义:类名称必须和文件名称保持一致,在一个*.java 之中只能有一个 pu
15、blic class; class 定义:类名称可以和文件名称不一致,但是生成的是 class 定义的名称,在一个*.java 程序之中可以同时存在多个 class 的定义,编译之后会分为不同的*.class 文件;额外声明: 在讲课过程之中为了方便理解,所以在一个*.java 程序之中会同时存在 public class 和 class 定义的类,而在日后的自己编写的代码过程之中,一个*.java 文件之中基本上都只包含一个 public class,不会有其他 class 单独定义; 所有类名称必须有自己的命名规范,每一个单词的开头首字母大写,例如:TestDemo;2、 主方法主方法表示
16、的是一个程序起点,要放在一个类之中,主方法定义格式如下:public static void main(String args) 这些字母的组成是完全固定的,今天先记住,以后进行完整的讲解。额外声明:日后主方法所在的类都将其称为主类,一般主类都使用 public class 声明。今天的所有程序都在主类之中编写,而至于类是什么,以后再介绍。3、 系统输出可以直接在屏幕上显示输出信息,操作语法:输出后加换行: System.out.println(输出内容) ;输出后不加换行: System.out.print(输出内容) ;这个基本的格式是 Java 程序运行的基本结构,一定要记下来。3.5、
17、classpath(重点)如果说现在要想执行某一个 java 程序,那么一定要进入到程序所在的路径下才可以执行,例如:现在程序的路径是在d:testjava 文件夹之中,如果要想执行这个文件夹之中的所有的*.class 文件,则需要进入到此目录下执行,那么如果现在希望在不同的目录下也可以执行呢?那么会直接提示用户,找不到这个类。那么现在非要执行的话,则必须配置CLASSPATH,配置语法如下:SET CLASSPATH=*.class 文件所在的路径范例:将 CLASSPATH 配置到 d:testjava 目录之中SET CLASSPATH=d:testjava此时,再次执行“java He
18、llo”命令,发现程序可以正常的执行完毕。而通过这个演示也可以得出一个结论:当使用java 命令执行一个类的时候,会首先通过 CLASSPATH 找到指定的路径,而后在此路径下加载所需要的*.class 文件。但是,如果像本程序这样,到处乱指 CLASSPATH 也是不可能的,最好的做法还是从当前所在的路径下加载所需要的*.class 文件比较合适,那么这个时候往往将 CLASSPATH 设置为“.”。SET CLASSPATH=.这个“.”也属于默认的配置,之所以要强调“.”的问题主要原因是在于,日后可能有一些其他的程序自动的修改本机的 CLASSPATH,那么这个时候只能依靠手工配置,不过
19、以上的配置方式都只是针对于一个命令行完成的,如果要针对于所有的命令行方式完成,则就需要增加一个新的环境属性。配置步骤:【我的电脑】 【属性】 【高级】 【环境变量】 【新建】 【输入属性的名称和内容】面试题:请解释 PATH 和 CLASSPATH 的区别? PATH:是操作系统的环境属性,指的是可以执行命令的程序路径; CLASSPATH:是所有*.class 文件的执行路径,java 命令执行的时候将利用此路径加载所需要的*.class 文件。3.6、标识符和关键字(重点)在程序之中用于定义名称的都表示标识符,例如:类的名称、方法名称或变量名称等等,在 java 之中的标识符的定义格式:由
20、字母、数字、_、$所组成,其中不能以数字开头,不能是 Java 中的保留字。但是在这里面需要提示的是,所有的标识符之中用户不要去使用“$”定义,而且标识符一定要有自身的意义,不要随意起名称,一般都建议使用英文字母组成,例如:studetName,但是在定义变量(标识符)或方法的时候也有一个明确的要求:第一个单词的首字母小写,之后每个单词的首字母大写,例如:studentName。而在定义类名称的时候(标识符),每一个单词的首字母大写,例如:TestDemo。关键字也被称为保留字,指的是一些有特殊含义的内容,在定义标识符的时候不能够去使用,而 Java 之中的保留字定义如下:一共有 49 个关键
21、字,但是严格来讲,这些关键有如下几个说明: 未使用到的关键字:goto(无条件跳转)、const(定义常量); 有特殊含义的标记(严格来讲不算关键字):true、false 、null; JDK 1.4 之后引入的新关键字:assert ; JDK 1.5 之后引入的新关键字:enum。3.7、数据类型(重点)任何一门语言都是由若干种不同的数据类型所组成,在 java 之中数据类型一共分为两类: 基本数据类型(数值操作): 默认值|- 数值型:|- 整型:byte、short、int 、long; 0|- 浮点型:float、double; 0.0|- 字符型:char; u0000|- 布尔
22、型:boolean; false 引用数据类型(内存操作):|- 数组、类、接口; null今天主要讲解基本类型的数据,而且每种基本数据类型也都有其自己的保存数据范围,这些范围如下。 byte 的数据长度是 8 位,-128 127; int 数据的长度为 32 位,-2147483648 2147483647; double 可以保存的数据范围是最大的。但是对于以上给出的基本数据类型的定义,如果从实际的开发角度上,以下的几种类型最为常用: int 型:只要是看见了整型的定义,其类型都是 int; double 型:只要是看见了小数的定义,其类型都是 double; byte 型:日后进行数据
23、传输的时候使用此类型,讲解到 IO,和编码转换的操作上使用; boolean:用于程序的逻辑操作使用; long:表示日期时间、表示文件长度的时候。3.7.1 、整型整型就表示一个基本的整数,可以直接使用 int 定义,而且在 java 之中默认的一个整数,其类型就是 int。public class Hello public static void main(String args) int x = 10 ; / 10 是一个整数,就属于 int 型int result = x * 2 ; / int 型 * int 型 = int 型System.out.println(result) ;
24、但是,对于以上的操作代码,下面有两点说明: 说明一:请保持良好的编程习惯,在每一个操作之中都加上一个“ ”。 说明二:所有的变量在使用之前一定要为其赋予默认值。范例:错误的操作public class Hello public static void main(String args) int x ; / 按照道理来讲,x 是 int 型,没有赋值,结果应该是 0System.out.println(x) ;因为 x 变量只定义了而未被初始化,修改程序:public class Hello public static void main(String args) int x ; / 按照道理来
25、讲,x 是 int 型,没有赋值,结果应该是 0x = 10 ; / 在使用之前为 x 变量赋值System.out.println(x) ;但是这种代码的成功编译只能针对于 JDK 1.5 之上的版本完成,而在 JDK 1.4 之前,以上的代码是错误的,是不能使用的,所以为了防止这种版本的差异,明确给出要求:所有的变量一定要在其定义的时候直接赋值。public class Hello public static void main(String args) int x = 10 ; / 定义变量给出默认值System.out.println(x) ;int 型数据本身也是有自己的保存范围的,
26、那么如果说现在操作的数据已经超过了其 int 的范围呢?为了方便验证,下面给出两个操作,这两个操作日后讲解,可以通过它得出 int 的最大值和最小值: 取得 int 的最大值:Integer.MAX_VALUE ; 取得 int 的最小值:Integer.MIN_VALUE。范例:极限操作public class Hello public static void main(String args) int max = Integer.MAX_VALUE ; / 最大值int min = Integer.MIN_VALUE ; / 最小值System.out.println(max) ; / 复
27、制当前行代码:CTRL + JSystem.out.println(min) ;/ 最大值 + 1 = 最小值、最小值 - 1 = 最大值System.out.println(max + 1) ; / int 型 + int 型 = int 型,-2147483648System.out.println(max + 2) ; / int 型 + int 型 = int 型,-2147483647System.out.println(min - 1) ; / int 型 - int 型 = int 型,2147483647这个地方就好象出现了一个循环的操作,这种情况在程序上称为数据的溢出,而要想
28、解决这种数据溢出的主要方法就可以通过扩大数据范围来完成,比 int 大的范围是 long,所以现在有如下的两种方式完成:数字 L、(long)数字。public class Hello public static void main(String args) int max = Integer.MAX_VALUE ; / 最大值int min = Integer.MIN_VALUE ; / 最小值System.out.println(max) ; / 复制当前行代码:CTRL + JSystem.out.println(min) ;/ 最大值 + 1 = 最小值、最小值 - 1 = 最大值Sy
29、stem.out.println(max + 1L ) ; / int 型 + long 型 = long 型,2147483648System.out.println(min - (long) 1) ; / int 型 - long 型 = long 型,-2147483649所有的程序的操作之中的数据类型转换: 如果小范围和大范围操作,小范围自动变为大范围,例如:int + long = long; 如果现在把表示范围大的数据变成表示范围小的数据,则必须强制完成,例如:int 型 = (int) long 型;当然,下面再通过一个简单的代码进一步说明转性的操作。public class H
30、ello public static void main(String args) int x = 10 ; / int 型数据long y = x ; / int 变为 long 型long result = x * y ; / int * long = long ;int temp = (int) result ; / long int,强制转换System.out.println(temp) ;另外还需要强调的是 byte 型数据,这个表示的是字节的定义。此类型的范围是:-128 127 之间。public class Hello public static void main(Stri
31、ng args) int x = 200 ; / 超过了 byte 范围byte b = (byte) x ; / 强制转换,溢出数据System.out.println(b) ;可是,说到 byte 型数据,额外提醒一下,有一个问题,算是一个特殊支持:public class Hello public static void main(String args) byte b = 20 ; / 20 是 int 型System.out.println(b) ;在为 byte 类型赋值的时候,如果其给出的数据范围在 byte 范围之中,则自动的将 int 变为 byte 型数据,当然这种操作只是
32、在直接赋值的情况下完成。3.7.2 、浮点型浮点型指的是小数,在 java 之中,默认的一个小数实际上对应的类型就是 double 型数据。public class Hello public static void main(String args) double x = 10.02 ; / 定义浮点型数据System.out.println(x * x) ;这个时候的计算结果为:“ 100.40039999999999” 。按照数学的角度,肯定结果不正确,但是这个结果是由于 JVM 本身的 bug 所决定。而在浮点型数据之中,实际上也分为两种:double、float ,float 的范围要
33、小于 double 的范围,那么既然默认的小数属于double 型数据,如果要为 float 赋值呢?必须强制转换,而转换的方式:数字 F、(float)数字;public class Hello public static void main(String args) float x = 10.02F ; / double floatfloat y = (float) 10.02 ; / double floatSystem.out.println(x * y) ;但是需要说明的是,整型数据也可以自动的向浮点型转换。public class Hello public static void
34、main(String args) int x = 10 ;double y = x ; / int doubleSystem.out.println(y * x) ; / double * int = double一般在进行数学计算的时候,需要将一些数据变为浮点型,例如:以下的计算:public class Hello public static void main(String args) System.out.println(9 / 2) ; / 4这个时候的结果是 4,但是实际上的结果应该是 4.5,因为现在的计算都是两个整型数据完成的,所以其计算结果也一定还是 int,int 不包含
35、小数位,所以小数位如果存在则直接取消,如果要想得出正确的结果,则需要将其中的一个数据变为double 或 float 即可。public class Hello public static void main(String args) System.out.println(9 / (double)2) ; / int / double = double以后定义变量的时候,是整型就使用 int 定义,是小数就使用 double 进行定义。而且所有数据的转型: 自动转型(由小到大):byte short int long float double; 强制转型(由大到小):double float
36、long int short byte。至于说到底使用到何种的转换,我个人的认为是几乎不要去转换,只需要表示出该有的数据即可。例如,定义年龄肯定是 int 型数据,定义成绩是 double(能使用 double 就使用 double,不要用 float)型数据。3.7.3 、字符型在 Java 之中使用单引好 “”定义的内容就表示一个字符,例如:A 、B,那么定义字符的时候类型使用 char 完成。在各个语言之中,char 和 int 之间是可以互相转换的, 在 C 语言之中转换的编码是 ASC II 码 ,当时的编码范围: 大写字母范围:65 90; 小写字母范围:97 122。大写字母和小
37、写字母之间查了 32。范例:定义字符public class Hello public static void main(String args) char c = A ; / 定义一个字符int x = c ; / char intx += 32 ; / 变为小写编码char temp = (char) x ; / int charSystem.out.println(temp) ;但是需要提醒的是,Java 在定义字符的时候所使用的并不是 ASC II 码,而是 UNICODE 编码,这是一种使用十六进制定义的编码,可以表示出任意的文字,这就包含了中文定义。public class Hel
38、lo public static void main(String args) char c = 张 ; / 定义一个字符,23452int x = c ; / char intSystem.out.println(x) ;UNICODE 设计的时候包含了所有的 ASC 码,所以有一部分的编码是完全和 ASC II 码重复的,但是也有许多是不重复的编码。3.7.4 、布尔型布尔型主要表示的是一种逻辑的判断,其中布尔是一个数学家的名字,而布尔型数据只有两种取值:true、false 。public class Hello public static void main(String args)
39、boolean flag = true ; / 定义布尔型数据/ if 语句判断的就是布尔型数据if (flag) / flag = trueSystem.out.println(“Hello World .“) ;但是需要提醒的是,在许多的语言之中,布尔型也使用 0(false)或非 0(true )来表示,不过此概念在 Java 之中无效,只有 true 和 false 两个内容。3.7.5 、初见 StringString 本身不属于 Java 的基本数据类型,因为它属于一个类(引用型数据),但是这个类使用起来可以像基本数据类型那样方便的操作,而且也使用很多,只要是开发都会存在字符串,字
40、符串是使用“”定义的一串数据。在字符串之中可以使用“+ ”进行字符串的连接操作。范例:定义字符串public class Hello public static void main(String args) String str = “Hello “ ; / 定义字符串str += “ World “ ; / 字符串连接str = str + “!“ ; / 字符串连接System.out.println(str) ;但是在使用字符串的过程之中,也需要注意一点,在 char 类型之中实际上除了定义单个字符之外,也存在了一组转义字符:(单个)、t(表示按下了 tab 键)、n(换行)、“ 、。p
41、ublic class Hello public static void main(String args) String str = “Hello World !“ntHello MLDN“ ; / 定义字符串System.out.println(str) ;在讲课的过程之中,这些符号还是会出现的。范例:观察以下程序的运行结果public class Hello public static void main(String args) double x = 10.2 ;int y = 20 ;String result = “加法计算结果:“ + ( x + y ) ;System.out.
42、println(result) ;所有的数据类型只要是碰到了 String 的连接操作(+ ),那么所有的类型都会先自动向 String 转型,之后再进行字符串的连接操作。3.8、运算符(重点)+、-、*、/都属于运算符,在 Java 之中运算符太多了。并且这些运算符之间是存在着优先级的,可是正常人,真的不怎么背它。但是在现实之中比较无奈的事,以下的代码会经常出现。public class Hello public static void main(String args) int x = 10 ;int y = 20 ;int result = + x * y - / y * 10 + +x
43、 * - y ;System.out.println(result) ;以上的程序本人绝对不会分析,一般国家的计算机等级考试都这些烂玩意。如果非要有人写,你可以心里把这个人的祖宗十八代一代代的使劲骂,包括这个人可能产生的后代也要狠狠的骂,譬如:孩子没屁眼。3.8.1 、三目运算符三目运算是一种赋值运算符,其语法格式如下:数据类型 变量 = 布尔表达式?满足条件设置的内容:不满足条件设置的内容 ;范例:将两个 int 型数据大的数值赋值给变量public class Hello public static void main(String args) int x = 10 ;int y = 20
44、 ;int result = x y ? x : y ;System.out.println(result) ;当然,对于这样的计算,也可以通过 ifelse 完成。public class Hello public static void main(String args) int x = 10 ;int y = 20 ;int result = 0 ; / 定义变量,保存结果if (x y) result = x ; else result = y ;System.out.println(result) ;这样的三目运算,在日后从事的开发之中,一定会出现,最近的出现时间断:4 周之后。3.
45、8.2 、逻辑运算符逻辑运算一共包含三种:与(多个条件一起满足)、或(多个条件有一个满足)、非(true 变 false,false 变 true)。1、 与操作:表示将若干个条件一起进行连接判断,同时满足返回 true,有一个不满足返回 false,对于与操作有两种运算符:此时程序出现了错误,而这个错误是由“10 / 0 = 0” 造成的,那么证明所有的条件都进行了验证,但是与操作的特点是属于 有一个条件不满足,结果就是 false,那么如果前面已经存在了不满足条件的运算,后面不管有多少个满足的条件,其结果都是 false,那么就真的没有必要进行判断了,这个时候可以换一个符号 短路与;范例:
46、短路与操作,因为前面的条件(1 = 2)的结果是 false,那么后面的就没有必要再继续进行判断了,最终的结果就是 false。2、 或操作:若干个条件一起判断,其中只要有一个返回 true,结果就是 true,只有都返回 false 的时候结果才是 false,或操作有两种运算:|、|范例:普通或操作,|public class Hello public static void main(String args) if (1 = 1 | 10 / 0 = 0) System.out.println(“条件满足。“) ;使用普通或操作的过程之中,发现即使前面的条件满足了,后面的也进行正常的判断
47、,但是后面的判断似乎没有任何的意义,因为不管返回是何种结果都不会影响最终的结果就是 true。范例:短路或操作,|public class Hello public static void main(String args) if (1 = 1 | 10 / 0 = 0) System.out.println(“条件满足。“) ;可以发现,前面的条件(1 = 1)满足了就会返回 true,那么不管后面是何条件最终的结果都是 true。3.8.3 、位运算符(了解)位运算在 Java 之中存在:int y = 20 ;System.out.println(x 19 的二进制数据: 00000000 00000000 00000000 001001120 的二进制数据: 00000000 00000000 00000000 0010100int y = 20 ;System.out.println(x | y) ;19 的二进制数据: 00000000 00000000 00000000 001001120 的二进制数据: 00000000 00000000 00000000 0010100|结果: 00000000 00000000 00000000 0