JAVA笔记第一章基础部分李兴华网易云课堂_第1页
JAVA笔记第一章基础部分李兴华网易云课堂_第2页
JAVA笔记第一章基础部分李兴华网易云课堂_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、1、j ava 简介Java 是现在最为流行的编程语言之一,也是拥有众多厂商支持的编程语言之一,同时Java 已经成为了一个事实上的应用层开发的标准基于业务的开发 。其上所构建出来的框 架也是最多的,开展的如此良好归结于一点: 反射机制 所有框架的灵魂 。Java语言的前身是在1991年开发出的OAK平台,最早是为一个 GREEN的工程而设计的,此工程的核 心意义在于利用email来控制家电产品运行,也就是最早所谓的物联网的概念。当时SUN的工程师们原本打算使用C+进展开发,后来考虑到C+複杂性,于是以C+为根底开发出了一个 OAK平台技术,所以Java 是使用C+编写。Java推出了 Hot

2、 Java浏览器技术,并且获得了相当大的成功,所以Java最早的定位就是基于网络的。后来Java经过了一些时间的沉淀,在 1995年5月23日的时候正式推出了 JDK 1.0,同时OAK被重新 命名为Java,之后在1998年的时候,推出了 JDK 1.2,同时将Java更名为Java 2到了 2005年十周年大会 的时候,推出了 JDK 1.5版本,或者称为 Java SE 5.0,最新的版本是 JDK 1.8,要想使用广泛,还需要至少 3 年。Java是由最早的SUN斯坦伏大学网络开发的,SUN是一家从事于硬件生产的公司,而SUN最著名的代表作就是小型机,而最成功的应用是在 amazon

3、上进展的。 Amazon 是一个在线商店,但是它自己也出 版许多的技术图书。现在 amazon比拟著名的效劳就是云效劳,像CIA也购置了 amazon云效劳,搭建的是一个私有云效劳。但是非常遗憾的是, SUN 经历了世界的互联网低潮,低潮之后就一直没有重新站起来, 在2021年的时候终于被 Oracle收购了。解释:关于 Oracle 收购 SUN企业平台架构:操作系统+数据库+中间件+编程语言; 微软的产品: Windows + SQL Server + IIS + .NET Office ; Oracle 的产品:UNIX + Oracle + OAS收购 BEA得到 WebLogic+

4、PL/SQL收购 SUN 取得 Java、 CRM、 ERP;而Java技术的开展又有了几个分支: J2SE 2005年之后更名为Java SE :提供了一些根底版本的支持;J2EE2005年之后更名为Java EE:提供了企业平台搭建,现在使用最广泛的架构; J2ME2005年之后更名为Java ME:提供了嵌入式开发的支持,但是却出生在了一 个不好的时代,Nokia横行的时代,但是 J2ME在哪个时候只能够作为游戏的出现。后来被 Android 所取代了。Java主要的特点:Java语言足够简单、Java是一门面向对象的编程语言、Java提供了垃圾的自动收集机制、Java提供了多线程与反射

5、操作机制、Java具备很强的可移植性。Java'hi'U'L * Java Virtual Machine)处合计算机上由義件戍换件極拟的i十讦机 理经编洋过的V台无关的字W fPSclass A fT Java V'm r :!ii I Java 'i: MKl.?''J lx lass Afl Javafjg拟札(JVM)辻 I、i 址ut istetF爭舍怕 JavaWM器Vi贞将J自v日跟拟机的代/对定的丫台I:运彳jSourcfl.javsSiQLiirGv.laia由于所有的程序不是直接与具体的操作系统捆绑在一起,那么都是经过

6、JVM处理后执行的, 所以只要JVM支持的功能不改变,那么程序可以在不同的平台间进展任意的移植。但是由 于程序没有操作系统直接接触, 所以会导致性能下降,最早也是容易被竞争对手诟病的问题, 但是随着硬件技术的开展,这些问题都解决了。2、JDK安装如果要进展Java程序的开发,那么需要下载 JDK,本次使用的是JDK 1.7版本。但是 在进展JDK的安装之前请保证本机的病毒防火墙关闭。安装过程之中会询问用户是否要安装 JRE在现在的操作系统里面都支持了 JRE但是 支持的并不是最新的,所以本次是选择安装新的JRE所谓的JRE指的是JAVA运行时环境,即:如果只有JRE那么表示只能够运行 Java

7、程序,但是却不能够进展开发。安装完成之后可以发现所有 JDK的可执行程序路径:D:Javajdk170_09bin。但是这些 命令本身并不属于 windows系统,所以需要首先进展路径的配置: 【我的电脑】 一【属性】 【咼级】一【环境变量】一【编辑 path】。此时在path环境变量里面已经存在有一些其它配置,而且多个路径之间要使用“进展分割。把新的路径放在最前面,此时的效果如下。3、根本概念3.1 第一个程序范例:定义 Hello.java 程序public class Hello public static void main(String args) System.out.printl

8、n("Hello World .") ; 当程序编写完成之后,下面就可以采用如下的方式进展操作基于命令行方式 : / 在WINDOWS 命令窗口下进展操作执行。编译程序:javac Hello.java,执行之后一个 Hello.class的字节码文件,也是真 正要执行的程序;解释程序:java Hello,解释程序,在 JVM上进展解释。第一个程序虽然简单,但是却包含了所有Java的核心运行过程,针对于每一步进展解释。1、定义类的局部:public class Hello 类之中的代码;类是在明天开场才要解释的概念,那么在Java之中所有的程序都要求以类为单元进展编写,对

9、于类的定义有两种: public class 类名称:文件名称要与类名称保持一致,但是一般而言,在一个*.java 文件里面只能够有一个 public class 定义; class 类名称:文件名称可以与类名称不同,但是生成的 *.class 名称是定义的类名称,在 一个 *.java 文件里面可以同时使用 class 定义多个类,编译之后每一个类会自动生成各自的 *.class 文件;在日后进展类名称定义的时候,有一个自己的命名标准:每一个单词的首字母必须大 写,例如: HelloJavaDemo。2、主方法主方法表示的是程序的起点,任何的程序都是由主方法开场执行的,在Java中的主方法组

10、成比拟长:public static void main(String args) 编写代码,今天的代码都在此处编写;一般主方法都习惯于将其放在使用 public class 定义的类之中, 所以主方法所在的 public class类,日后称为主类。3、系统输出系统输出指的是将提示信息输出到标准输出设备 显示器上,对于系统输出有两 种方式:输出之后增加换行: System.out.println(" 内容 ") ; 输出之后不增加换行: System.out.print(" 内容 ") ;把以上的根本程序弄熟练了,根本上今天的Java程序的构造也就都固

11、定了。3.2 CLASSPATH初步分析重点通过单词的含义就可以清楚的知道,CLASSPATH指的是类的保存路径。例如,现在在D:testjava目录下存在有一个" Hello.class"文件存在,那么此时命令行所在的路径也是“d:testjava ,所以可以直接使用“ java Hello 这个类。但是如果说此时命令行的所在路 径为"e:",在e盘下并没有存在 Hello.class文件。那么一旦执行了“ java Hello"命令会出 现如下的错误提示信息:错误:找不到或无法加载主类HelloError: NotFoundClassErr

12、or : Hello那么现在就希望即使所在的路径在e盘上,也可以加载到d:testjava目录下的Hello.class文件,那么可以通过设置CLASSPAT完成。范例:设置CLASSPATHSET CLASSPATH=d:testjava设置完成之后,那么再次执行“java Hello "命令。那么发现可以找到Hello.class文件,所以可以得出一个结论:每当使用java命令解释一个类的时候,会自动的通过CLASSPATH所设置的路径加载所需要的类。但是如果在实际的工作之中这样到处乱设置CLASSPATH并不方便,最好的做法是从当前所在的路径下去加载所需要的类文件。那么往往会将

13、CLASSPAT嚴置为“.",表示从当前所在路径加载。范例:设置从当前所在路径加载类SET CLASSPATH=.默认情况下所有的 CLASSPATHS是通过当前所在路径进展加载的,但是在一些软件配置的时候,有可能会自动的帮你去修改CLASSPAT路径,那么此时就必须手工设置, 但是上面的手工设置只适合于当前的命令行方式。如果要想针对于所有的命令行窗口,那么可以建立一个新的环境属性。面试题:请解释 PATH和CLASSPAT的区别? PATH是操作系统的程序配置路径,通过此路径配置可执行程序; CLASSPATH是Java程序解释时所使用的路径,用户执行 java命令的时候会自动的根

14、据CLASSPATH所设置的路径进展类的加载,一般都将其设置为“."表示从当前所在路径进展类加载。3.3 标识符与关键字、注释重点在定义类、变量名称、方法名称的时候对于命名是有组成要求的,在Java里面任何的一个标识符可以由字母、数字、 _、$符号所组成,其中不能以数字开头,不能是 Java的关 键字保存字,像Hello、JavaDemo,都属于合法的标识符。但是在定义标识符的时候个人原那么:建议都以字母开头,由字母和数字组成,少用“_坚决不用“ $boole;uibieflkkfcC Eric IIduclufCOlHllMUdefaultdodoubk«ketjflei

15、klsfinlltinglyllcntfwifinpleikeiiisIILsIriUiceoiHITLlkEertLIL EMWiihllpi nal*! - 1i<r«riftcdl»ubh<ntnruAntyyixhianpcrfinslrtuoupUmisiturmevoidvol af liewhiteutUM在以上所给出的49个关键字之中,有两个关键字只是介绍不讲解:native、volatile。在给出的关键字之中, 有三个严格来讲不属于关键字,只属于特殊含义的单词,例如:null、true、false;Java里面有两个不使用的关键字:goto、

16、const在JDK 1.4之后增加了一个assert关键字,将在异常处理中使用;在JDK 1.5之后增加了一个 enum关键字。除此之外任何的语言都会存在有注释的概念,所谓的注释指的是程序在编译的时候不会编译的程序局部,在Java里面有三类注释:单行注释:/注释;多行注释:/* */ ;文档注释:/*/此类注释最后再使用。3.4 Java数据类型划分重点程序的数据类型指的是允许操作的数据形式,例如数据库之中可以操作字符串、数字、日期时间,那么程序也是一样的。在Java之中数据类型一共分为两大类:根本数据类型只包含具体的数据,不牵扯到内存的关联 数值型:整型:byte、short、int、lon

17、g;默认值:0实型浮点型:float、double ;默认值:0.0字符型:char ;默认值:'u0000'布尔型:boolean ;默认值:false引用数据类型指的内存的关联数据,类似于指针的概念:类、数组、接口。默认值:null魏堀类型大小位可袅示的1long 长赘数64-922M720368 M7 75®0® - 9223J_?2038M7580732shod用矩龜数)16tnte < 愷)8-128 5clifu. 字苻0-2556flOEtf 单精度32-5 IEK* 10話)5 IE3R( 3 J 10能)donbk度)4 E30S(-

18、1 " M砸1 TE3A8 (L" 1O308)通过以上的数据的保存大小可以发现,按照由小到大的保存顺序:byte < short < int <long < float < double,double可以保存最大的数据,使用double可以保存全宇宙之中最有意义的最大的数字。以上给出的几个根本类型,有个人总结的几个核心用法:表示整数永恒使用int、表示小数永恒使用double ;在进展数据传输和字符转码的过程之中都使用byte ;表示日期时间或者是文件大小的时候都使用long;表示逻辑关系的时候往往都使用boolean。341 整型数据byt

19、e、short、int、long整型数据是最为常用的一个数据类型,其不能保存小数数据,在Java之中,默认的一个整数就是int型数据类型。范例:定义整型变量public class TestDemo public static void main(String args) / 10是一个整数,既然是整数就是int数据类型/ 10也称为常量,而 num是一个变量int num = 10 ; /int 变量 =int 型常量num = 20 ;/ num 的内容被改变了System.out.pri ntln(num);本程序之中首先将一个数字10是一个int型常量赋予int型的变量num,而后修改

20、了 num变量的内容。提示:关于不同版本 JDK的问题解释之前所谓的默认值暂时无法使 用的问题那么在JDK 1.5之后,针对于变量的声明与赋值这两个操作上已经发生了变化。范例:正确代码public class TestDemo public static void main(String args) int num ;/定义一个int型变量,定义的时候没设置数值num = 10 ; /为变量设置内容System.out.pri ntln(num);范例:错误代码public class TestDemo public static void main(String args) int num

21、;/定义一个int型变量,定义的时候没设置数值System.out.pri ntln(num);变量在使用前一定要设置默认值不要去依靠系统提供的默认值,但是如果在JDK 1.4 及其之前版本的话,连最早正确的代码也是错的第一行是定义变量、第二行是为变量赋值,这个是错误的,所以最保险的做法是是在声明变量的同时就设置好内容int num = 10;既然是数值型的变量,那么变量定义之后也是可以进展数学计算的。范例:进展数学计算public class TestDemo public static void main(String args) int numA = 10 ;int numB = 20

22、;int result = numA + numB ; /int + int = intSystem.out.pri ntln( result);每种数据类型都有其自己的最大值和最小值范围,那么如果说超过了这个范围呢? 范例:观察超过数据范围的情况public class TestDemo public static void main(String args) int max = Integer.MAX_VALUE ; / 取得 int 的最大值int min = Integer.MIN_VALUE ;/ 取得 int 的最小值System.out.println(max) ;/ 最大值:2

23、147483647System.out.println(min) ;/ 最小值:-2147483648/int 型 + int 型 =int 型System.out.println(max + 1) ;/ 最大值 + 1 = -2147483648最小值System.out.println(max + 2) ;/ 最大值 + 1 = -2147483647次最小值/int 型-int 型=int 型System.out.println(min - 1) ;/ 最小值-1 = 2147483647最大值发现数据是一个循环过程,最大值如果继续进展加法计算那么变为了最小值,最小值如果继续进展了减法计

24、算,将变为最大值,这一概念属于数据的溢出。面对数据的溢出问题,如果要想解决,那么唯一的途径就是扩大使用的数据范围,比 int保存范围大的数据类型是long,那么如果要想将int变为long,有两种方式:方式一:在数字前加上一个"(lo ng) ”long x = (long) 10 ; /int 变为 long方式二:是在数字后加上一个字母“Llong x = 10L ; / int 变为 long范例:利用 long 数据类型解决数据的溢出问题public class TestDemo public static void main(String args) int max = I

25、nteger.MAX_VALUE ; / 取得 int 的最大值int min = Integer.MIN_VALUE ; / 取得 int 的最小值System.out.println(max) ;/ 最大值: 2147483647System.out.println(min) ;/ 最小值: -2147483648/ int 型自动向上变为long + long 型 = long 型System.out.println(max + 1L) ; / 2147483648System.out.println(max + (long) 2) ; / 2147483649/ int 型自动向上变为

26、long - long 型 = long 型System.out.println(min - 1L) ; / -2147483649 那么通过这样一个程序就可以得出一个结论:当范围小的数据类型与范围大的数据类 型一起进展数学计算的时候, 范围小的数据类型会自动的变为范围大的数据类型, 当类型统 一之后再进展数学计算。bytet short宀int宀long。而在整型数据之中还存在有一种 byte 的类型,这个长度只有“ -128 127之间。 范例:观察 byte 操作public class TestDemo public static void main(String args) int

27、num = 129 ;byte b = (byte) num ;/ 范围大的数据变为范围小的数据,需要强制转换System.out.println(b) ; 范围大的数据类型如果要变为范围小的数据类型,一定要使用强制转换,但是这之中 就有可能出现数字的错乱。但是在使用 byte 的时候一点很有意思, byte 作了一些特殊处理。 范例:观察原始操作public class TestDemo public static void main(String args) int num = 10 ;byte b = (byte) num ;/ int 变为 byteSystem.out.println

28、(b) ; 范例:观察特殊的支持public class TestDemo public static void main(String args) byte b = 10 ;/ int 变为 byteSystem.out.println(b) ;任何一个整数在 Java 之中都是一个 int 类型的常量, 现在是将 int 型变为 byte 型。因为10 正好在 byte 的范围之中, 而如果不在 byte 范围之中的整型常量, 那么依然需要执行强制 转型。3.4.2 实型数据 float 、double 在程序之中默认的小数类型就是double , double 是范围最大的数据类型。范例

29、:观察 double 的使用 public class TestDemo public static void main(String args) double num = 10.2 ; / 小数为 double 类型 System.out.println(num) ;/ double 型 * int 型变为 double 型 = double 型 System.out.println(num * 2) ;但是如果要使用的是 float ,一定需要注意,要执行强制类型转换,那么转换的形式也 有两种:形式一:(float)变量;形式二:在数字之后使用字母"F"表示。范例:声明

30、 float 变量public class TestDemo public static void main(String args) float num = 10.2f ;/ float * int = floatSystem.out.println(num * 2) ; 建议使用小数还是以 double 为主,不要去采用 float 了。提醒:一定要注意的是,整型数据都是不包含小数点位的,而 float 和 double 是会包含小数 位范例:观察程序的问题 public class TestDemo public static void main(String args) int num

31、A = 10 ;int numB = 3 ;System.out.println(numA / numB) ;/ 3 public class TestDemo public static void main(String args) int numA = 10 ;int numB = 3 ;System.out.println(numA / (double)numB) ;/ 3.3333333333333335从 Java 开场一直到今天,一直都有一个bug:public class TestDemo public static void main(String args) System.o

32、ut.println(3 * 10.1) ; / 30.299999999999997double可以保存的数据是最大的,所以所有的数据类型:byte宀int宀long宀double的顺序进展自动类型转换。3.4.3 字符型数据 char所谓的字符数据指的是使用“"声明的一个字符信息,例如:A'就表示一个字符。字符使用 char 进展表示,而且 char 和 int 之间是可以进展互相转换的。 范例:观察 char 与 int 的转换 public class TestDemo public static void main(String args) char c = 

33、9;z' ;/ 字符变量int num = c ;/ 将 char 变为 int 型System.out.println(num) ;通过一系列的转换操作,可以发现,字母和数值之间的转换是有一定的数据联系的:大写字母A 刀:65 90;小写字母a z: 97 122,大写和小写字母之间差了32个长度; 数字字母 0 9: 48 57;细心的同学可以发现,以上的字符编码过程和在 C 语言之中学习到的字符结果是一样 的,但是Java和C所采用的编码方式并不一样,Java使用的是UNICODE编码,这是一种十六进制的编码方式。但是考虑到开发者的使用习惯,所以UNICODE吸收了 C语言之中的

34、ASC II 码的局部编码规那么,这样的好处是可以方便的进展编程习惯的对接。 范例:直接操作数字就可以实现字母的改变public class TestDemo public static void main(String args) char c = 'A' ;/ 字符变量int num = c ;/ 将 char 变为 int 型num = num + 32 ; / 65 + 32 = 97 , num 为 97System.out.println(num) ;System.out.println(char) num) ;强调:但是一定要记, '0'和数字 0

35、是两个概念。判断某一个字符是否是数字public class TestDemo public static void main(String args) char c = '6' ; / 字符变量 if (c >= 48 && c <= 57) System.out.println(" 是一个数字! ") ; if (c >= '0' && c <= '9') System.out.println(" 是一个数字! ") ;而且由于UNICODE编码的

36、存在,所以 Java中的char数据类型是可以保存中文的。 public class TestDemo public static void main(String args) char c = '刁 ' ;/ 字符变量int num = c ;System.out.println(num) ; 但是如果要想保存中文,必须是在中文的语言环境下。3.4.4 布尔型数据 boolean 布尔是一个数学家的名字,对于boolean数据类型只有两种选择:true、false。一般而言,布尔数据类型往往都作为一些程序的控制逻辑使用。范例:程序逻辑public class TestDemo

37、 public static void main(String args) boolean flag = 1 < 2 ;if (flag) / 需要接收的是布尔, flag = trueSystem.out.println(" 条件满足! ") ;在一些其它语言之中不支持布尔型数据的可能会使用0表示 false, 1 表示 true,但是Java里面的布尔是绝对不可能使用数字来表示的。345字符串类型:String初步认识Java之中是没有提供一种类String 类完成。使用“ "在学习 Oracle 的时候可以发现存在有字符串数据,但是在 型可以直接表示字

38、符串的,而要想表示出字符串,那么可以利用 声明的数据就表示一个字符串。范例:定义字符串变量public class TestDemo public static void main(String args) String str = "Hello " ;/ 双引号声明str = str + "World " ;/ “+表示字符串连接str += "!" ;/ 表示字符串连接System.out.pri ntln( str);现在就可以发现,在数学计算之中“+表示的是加法计算,而在字符串之中“+表示字符串连接操作。所以,这个时候就可能会

39、存在如下一种问题。public class TestDemo public static void main(String args) int numA = 10 ;double numB = 20.1 ;Stri ng result ="计算结果:"+ numA + numB ; System.out.pri ntln( result); /计算结果:1020.1在Java里面任何的数据类型,只要是与String进展了“ +连接操作,那么都表示所有的类型自动的变为String后进展连接操作。那么为了正确只能够使用“()改变优先级。现在可以发现程序里面“"表示字符

40、,“"表示字符串,那么如果要想包含这样的信 息就必须采用转义字符,有如下的转义字符:n换行、tTab、"”、''、。范例:转义字符public class TestDemo public static void main(String args) Stri ng result = "t"Hello 'World . n 你好! ” ;System.out.pri ntln( result);转义字符只在Java学习之中有用处,其它的地方意义不大。而如果是强制性拼凑字符 串操作也会使用到。3.5 运算符重点程序就是一系列的运算符:数

41、学、关系、逻辑、位等等。但是对于运算符的使用,个人 的建议是别太复杂。范例:观察如下的 BT题目 public class TestDemo public static void main(String args) int numA = 10 ;int numB = 20 ;int result = numA - + numB * + numA / numB + * numA - + numA - numB + + numB ;System.out.pri ntl n( result) ;/ 120以上运算符不建议这样使用。运算符的优先级iI01方ia粤近祀n *«IE号】.-,負弓

42、)22*8 "3算删重讶j孰*3垃左律右删#伸由左显有di申左M石7">* tfc i ttWIfTAkiDJ由左*有1:世*1址鼻胃由左里疳Lti its堆尊円和turttifijtft由左呈右II审址占审丘童石1111111fbr -tn這鼻苦任何的时候聪明点的人都不背,都依靠“()修改操作的优先级。但是在这里需要强调三类运算符:三目、逻辑、位。、三目运算符三目是一种逻辑的赋值运算。其根本操作格式:数据类型 变量=布尔表达式?值1 :值2 ;如果布尔表达式成立,将值1的数据赋予变量,否那么将值2的数据赋予变量。public class TestDemo publi

43、c static void main(String args) int numA = 10 ;int numB = 20 ;int result = numA > numB ? numA : numB ;System.out.pri ntl n( result) ;/ 20public class TestDemo public static void main(String args) int numA = 10 ;int numB = 20 ;int result = 0 ;if (numA > nu mB) result = numA ; else result = numB

44、 ;System.out.pri ntl n( result) ;/ 20/ 三目也可以利用判断语句实现,不过代码较长。、逻辑运算 逻辑运算主要有与、或、非三种,其中非的实现主要依靠“ !完成。但是最为麻烦的 是与和或两个运算,因为各自都有两组实现。1、 与操作:&、&& 范例:观察“ & 问题public class TestDemo public static void main(String args) if (1 = 2 & 10 / 0 = 0) System.out.println(" 条件满足! ") ;Exceptio

45、n in thread "main" java.lang.ArithmeticException: / by zeroat TestDemo.main(TestDemo.java:3) 此时出现了程序的错误,那么就表示两个判断条件实际上都执行了,但是来分析一下 与操作的特点, 与操作必须保证所有的判断条件都为 true ,最终才是 true ,那么按照之前的 判断来讲,前面已经有条件返回了false,那么后面不管有多少个true,结果一定是false,那么就没有必要继续向后判断了,那么可以使用短路与“ &&。范例:使用“ && public

46、class TestDemo public static void main(String args) if (1 = 2 && 10 / 0 = 0) System.out.println(" 条件满足! ") ; 此时后面的条件没有继续判断,属于短路操作。2、 或操作: | 、| 范例:观察普通或“ | 使用public class TestDemo public static void main(String args) if (1 = 1 | 10 / 0 = 0) System.out.println(" 条件满足! ") ;E

47、xception in thread "main" java.lang.ArithmeticException: / by zeroat TestDemo.main(TestDemo.java:3)由于或操作是假设干个条件有一个返回true,结果就是true,而在以上的程序之中,发现前面有条件返回了 true ,但是后面的判断依然执行了, 这就是因为普通或会将所有的条 件都判断执行,而现在使用短路或。范例:使用短路或 | public class TestDemo public static void main(String args) if (1 = 1 | 10 / 0

48、 = 0) System.out.println("条件满足!");此时前面的条件返回了true,而不管后面会返回多少个false,最终的结果也一定是true。结论:在任何情况下编写逻辑判断的时候都使用“&& "、"。、位操作了解位运算的初步就是需要实现十进制和二进制数据之间的转换操作,转换原那么:数字除2取余,最后按照倒序排列。十进制:11 T 00000 00000二进制数据,int 是 32 位 -251f-221f-210f-201f在Java里面提供的位运算:&、|、取反、A异或、>>、<<、&g

49、t;>>。移位操作要注意的问题是高低位是补 0还是补1和对char, byte, short型的操作:1<< : (left-shift),最低位补 02>> : signed right-shift),右移过程使用符号位扩展sign extension),即如果符号为为1那么高位补1 ,是0那么补0,也就是逻辑右移3>>> : (unsigned right-shit),右移过程使用零扩展zero extension),即最高位一律补 0,也就是算术右移4移位操作的数据类型可以是byte, char, short, int, long型,

50、但是对byte, char, short 进展操作时会先把它们变成一个int型,最后得到一个int型的结果,对long型操作时得到一个long型结果,不可以对boolean型进展操作。5移位操作符可以和=合并起来,即<<=、>>=和 >>>=。例如a >>= 2; 表示将a右移两位后的值重新赋给a。当时在使用这三个操作符对byte, char, short型数据进展操作时要注意,例如有一下代码 片段:public class ShiftTestpublic staticvoid main(String args)byte a;byte b;

51、byte c;a =127;b=127;c=127;a<<= 2;<<=2);System.out.println(a);System.out.println(bSystem.out.println(c << 2);运行结果是:-4 -4 508这说明了在操作a <<= 2执行过程是这样的:先将byte型的数127变成int型,左移2位得到508,然后把508赋给byte型变量a时只是简单地”折断"(truncate) 得到数-4。编译时编译器不会提示你可能损失,但是如果你把 a <<= 2 改成 a = a <<

52、; 2; 编译器就会提示可能就是x除以2的y此方,取整数 就是 x 乘以 2 的 y 次方精度实际上在本例中确实是损失精度了 损失精度了。移位操作的简单计算方法: >>右移操作 x>>y<<左移操作 X<<y范例:实现“ & 操作public class TestDemo public static void main(String args) int numA = 17 ;int numB = 11 ;System.out.println(numA & numB) ;17 的二进制: 00000 00000 ;11 的二进制:

53、00000 00000 ;& 操作:00000 00000; e 十进制:1范例:实现“ | 操作public class TestDemo public static void main(String args) int numA = 17 ;int numB = 11 ;System.out.println(numA | numB) ;17的二进制:00000 00000;11 的二进制:00000 00000;|操作:00000 00000;e 十进制: 27面试题: 请用最快的方式计算 2的 3次方最笨拙的方法是: 2 * 2* 2 = 8 ;采用移位: 2 <<

54、2;public class TestDemo public static void main(String args) int num = 2 ;System.out.println(num << 2) ; 面试题: 请解释“ &和“ && 、“| 和“ | 的区别?在逻辑运算上与和或分别有两种:|- 与操作:|- 普通与“ &:所有的判断条件都要执行;卜短路与“&& ”:如果前面有条件返回了 false,那么后面的条件不再执行, 最终结果就是 false;|- 或操作:卜普通或“ | :所有的判断条件都要执行;卜短路或“"

55、;:如果前面有条件返回了true,那么后面条件不再判断,最终结果就是true。位操作:卜位与操作“ &:只有在两位都为 1的时候才返回1,如果有一位是0返回0;卜位或操作“ |只有在两位都为 0的时候才返回0,如果有一位是1返回1。3.6程序构造重点程序构造有三种:顺序、分支、循环。实际上所有的程序都会包含有顺序的范畴,按照代码的定义的先后顺序执行。3.6.1 分支语句:分支语句一共分为两种类型:条件分支、开关语句。if语句:ifelse语句:if else if else 语句:if(布尔表达式)/条件满足时执行if(布尔表达式)/条件满足时执行 else /条件不满足时执行if(布尔表达式)/条件满足时执行 else if (布尔表达式)/条件满足时执行 . else /条件不满足时执行范例:分支语句的使用public class TestDemo public static v

温馨提示

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

评论

0/150

提交评论