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

下载本文档

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

文档简介

1、java简介

Java是现在最为流行的编程语言之一,也是拥有众多厂商支持的编程语言之一,同时Java已

经成为了一个事实上的应用层开发的标准(基于业务的开发)。其上所构建出来的框架也是

最多的,发展的如此良好归结于一点:反射机制(所有框架的灵魂)。

Java语言的前身是在1991年开发出的OAK平台,最早是为一个GREEN的项目而设计的,

此项FI的核心意义在于利用email来控制家电产品运行,也就是最早所谓的物联网的概念。

当时SUN的工程师们原本打算使用C++进行开发,后来考虑到C++复杂性,于是以C++为基

础开发出了一个OAK平台技术,所以Java是使用C++编写。Java推出了HotJava浏览器技术,

并且获得了相当大的成功,所以Java最早的定位就是基于网络的。

后来Java经过了一些时间的沉淀,在1995年5月23日的时侯正式推出了JDK1.O,同时OAK被成新命

名为Java,之后在1998年的时候,推出了JDKL2,同时将Java更名为Java2,到了2005年十周年大会的时

候,推出了JDK1.5版本,或者称为JavaSE5.0,最新的版本是JDKL8,要想使用广泛,还需要至少3年。Java

是由最早的SUN(斯坦伏大学网络)开发的,SUN是•家从事于硬件生产的公司,而SUN最著名的代表作就

是小型机,而最成功的应用是在amazon上进行的。Amazon是一个在线商店,但是它自一也出版许多的技

术图书。现在amazon比较著名的限务就是云服务,像CIA也购买了amazon云服务,搭建的是一个私有云

服务。但是非常遗憾的是,SUN经历了世界的互联网低潮,低潮之后就一直没有重新站起来,在2009色的时

候终于被Oracle收购了。

解释:关于Oracle收购SUN

•企业平台架构:操作系统+数据库+中间件+编程语言;

,微软的产品:Windows+SQLServer+IIS+.NET、Office;

・Oracle的产品:UNIX+Oracle+OAS(收购BEA得到WebLogic)+PL/SQL(收购SUN

取得Java)、CRM、ERP;

而Java技术的发展又有了几个分支:

•J2SE(2005年之后更名为JavaSE):提供了一些基础版本的支持;

•J2EE(2005年之后更名为JavaEE):提供了企业平台搭建,现在使用最广泛的架构;

•J2ME(2005年之后更名为JavaME):提供了嵌入式开发的支持,但是却出生在了一个不

好的时代,Nokia横行的时代,但是J2ME在哪个时候只能够作为游戏的出现。后来被Android

所取代了。

Java主要的特点:Java语言足够简单、Java是一门面向对象的编程语言、Java提供了垃

圾的自动收集机制、Java提供了多线程与反射操作机制、Java具备很强的可移植性。

Java虚拟机(JavaVirtualMachine)

◎0•台计克机l」l]软件或硬件模拟的计嵬机。Java虚拟机(JVM)读以并处

理经编译过的平台无关的字打码class文件。

◎Java编译器针对Java虚拟机产tclass支仰,因此是独立JT饰的

©Java解科器负责将Java虚拟机的代码作特定的T台卜运仃

JVMforDos

Dos

Source,java编译Source.classJVMforWinx

Windows

JVMforUnix

UNIX

Other

OtherPlatform

由于所有的程序不是直接与具体的操作系统捆绑在一起,那么都是经过JVM处理后执行的,

所以只要JVM支持的功能不改变,那么程序可以在不同的平台间进行任意的移植。但是由于

程序没有操作系统直接接触,所以会导致性能下降,最早也是容易被竞争对手诟病的诃题,

但是随着硬件技术的发展,这些问题都解决了。

2、JDK安装

如果要进行Java程序的开发,那么需要下载JDK(),本次使用的是JDK1.7

版本。但是在进行JDK的安装之前请保证本机的病毒防火墙关闭。

四JavaSEDevelopmentKit7Update9-自定义安蓼凶

lava.ORACLE

i・从下面的列表中选择要安装的可选功能.安装完成后,您可以使用宏制面板”中的诲加/

删除程序饮用程序来更改您选择的功能

功能说明

开发"

JavaSEDevelopmentKit7

源代

码Update9,包括JavaFXSDK,即

公共

驮一个专用JRE和一个专用

JavaFX运行时.它要求硬盘驱

动题上有300MB空间-

安装到:

D:\Java\jdkL7,0_09\更改⑥…I

<上一步(&)

L就漪傀讶!什出1居琉iFFilJn

安装过程之中会询叵用户是否要安装JRE,在现在的操作系统里面都支持了JRE,但是

支持的并不是最新的,所以本次是选择安装新的川E,所谓的JRE指的是JAVA运行时环境,即:

如果只有JRE,那么表示只能够运行Java程序,但是却不能够进行开发。

安装完成之后可以发现所有JDK的可执行程序路径:D:\Java\jdkL7.0_09\bin。但是这些

命令本身并不属于windows系统,所以需要首先进行路径的配置:【我的金脑】一【属性】

-【高级】一【环境变量】一【编辑path】。

此时在path环境变量里面已经存在有一些其它配置,而且多个路径之间要使用进

行分割。把新的路径放在最前面,此时的效果如下。

编辑系统变量工J凶

变量名国):

变量值W):D:\Java\;dkl.7.0_09\历用|

蕨取消

3、基本概念

3.1第一个程序

范例:定义Hello.java程序

publicclassHello{

publicstaticvoidmain(Stringargs[l){

System.out.println("HelloWorld;

)

)

当程序编写完成之后,下面就可以采用如下的方式进行操作(基于命令行方式):〃在

WINDOWS命令窗口下进行操作执行。

,编译程序:javacHello.java,执行之后一个Hello.class的字节码文件,也是真正

要执行的程序;

•解释程序:javaHello,解释程序,在JVM上进行解释。

第一个程序虽然简单,但是却包含了所有Java的核心运行过程,针对于每一步进行解释。

1、定义类的部分:

publicclassHello{

类之中的代码;

}

类是在明天开始才要解释的概念,那么在Java之中所有的程序都要求以类为单元进行

编写,对于类的定义有两种:

•publicclass类名称:文件名称要与类名称保持一致,但是一般而言,在一个*Java文件里

面只能够有一个publicclass定义;

•class类名称:文件名称可以与类名称不同,但足生成的*.class名称是定义的类名称,在

一个*.java文件里面可以同时使用class定义多个类,编译之后每一个类会自动生成各自的

:class文件;

在日后进行类名称定义的时候,有一个自己的命名规范:每一个单词的首字母必须大

写,例如:HelloJavaDemo,

2.主方法

主方法表示的是程序的起点,任何的程序都是由主方法开始执行的,在Java中的主方

法组成比较长:

publicstaticvoidmain(Stringargs[]){

编写代码,今天的代码都在此处编写;

)

一般主方法都习惯于将其放在使用publicclass定义的类之中,所以主方法所在的public

class类,日后称为主类。

3.系统输出

系统输出指的是将提示信息输出到标准输出设备一一显示器上,对于系统输出有两

种方式:

输出之后增加换行:System.out.printin("内容");

输出之后不增加换行:System.out.print(“内容”);

把以上的基本程序弄熟练了,基本上今天的Java程序

的结构也就都固定了。

3.2CLASSPATH初步分析(重点)

通过单词的含义就可以清楚的知道,CLASSPATH指的是类的保存路径。例如,现在在

D:\testjava目录下存在有一个"Hello.class”文件存在,那么此时命令行所在的路径也是

“d:\testjava",所以可以直接使用“javaHello”这个类。但是如果说此时命令行的所在路径

为飞:",在e盘下并没有存在Hello.class文件。那么一旦执行了“javaHello"命令会出现

如下的错误提示信息:

错误:找不到或无法加载主类HelloError:NotFoundClassError:Hello

那么现在就希望即使所在的路径在e盘上,也可以加载到d:\testjava目录下的

Hello.class文件,则可以通过设置CLASSPATH完成。

范例:设置CLASSPATH

SETCLASSPATH=d:\testjava

设置完成之后,那么再次执行"javaHello”命令。那么发现可以找到Hello.class文件,所

以可以得出一个结论:每当使用java命令解释一个类的时候,会自动的通过CLASSPATH所设

置的路径加载所需要的类,

但是如果在实际的工作之中这样到处乱设置CLASSPATH并不方便,最好的做法是从当

前所在的路径卜.去加载所需要的类文件。那么往往会将CLASSPATH设置为表示从当前

所在路径加载。

范例:设置从当前所在路径加载类

SETCLASSPATH=.

默认情况下所有的CLASSPATH都是通过当前所在路径进行加载的,但是在一些软件配

置的时候,有可能会自动的帮你去修改CLASSPATH路径,那么此时就必须手工设置,但是上

面的手工设置只适合于当前的命令行方式。如果要想针对于所有的命令行窗口,则可以建立

一个新的环境属性。

面试题:请解秣PATH和CLASSPATH的区别?

•PATH:是操作系统的程序配置路径,通过此路径配置可执行程序;

•CLASSPATH:是Java程序解样时所使用的路径,用户执行java命令的时候会自动的

根据CLASSPATH所设置的路径进行类的加载,一般都将其设置为“.”表示从当前所在路径进

行类加载。

3.3标识符与关键字、注释(重点)

在定义类、变量名称、方法名称的时候对于命名是有组成要求的,在Java里面任何的一个标

识符可以由字母、数字、一、$符号所组成,其中不能以数字开头,不能是Java的关键字(保

留字),像Hell。、JavaDem。,都属于合法的标识符。但是在定义标识符的时候个人原则:建

议都以字母开头,由字母和数字组成,少用,坚决不用

abstactbooleanbreakbytecasecatchcluu

classcontinuedefaultdodoubleelseexteuth

falselilialfinallyfloatforifimplcincnts

UlipoitnixtjuiceofliltmtcifacelougIWtlX'Cnew

millpackageprivateprotectedpublictetivnshoit

staticsx'ucbronizedroperthisthrowllnowsUausieiif

tmevoidvolatilewluleasxeitennui

在以上所给出的49个关键字之中,有两个关键字只是介绍不讲解:native、volatile.

在给出的关键字之中,有三个严格来讲不属于关键字,只属于特殊含义的单词,例如:

nulktrue、false;

Java里面有两个不使用的关键字:goto、const

在JDK1.4之后增加了一个assert关键字,将在异常处理中使用;

在JDK1.5之后增加了一个enum关键字。

除此之外任何的语言都会存在有注释的概念,所谓的注释指的是程序在编译的时候不

会编译的程序部分,在Java里面有三类注释:

•单行注释://注释;

•多行注释:/*…*/;

•文档注释:/**…*/此类注释最后再使用。

3.4Java数据类型划分(重点)

程序的数据类型指的是允许操作的数据形式,例如数据库之中可以操作字符串、数字、口期

时间,那么程序也是一样的。在Java之中数据类型一共分为两大类:

•基本数据类型(只包含具体的数据,不牵扯到内存的关联):

数值型:

整型:byte、short、int、long;默认值:0

实型(浮点型):float、double:默认值:0.0

字符型:char;默认值:'\u0000'

布尔型:boolean;默认值:false

•引用数据类型(指的内存的关联数据,类似于指针的概念):类、数组、接口。

默认值:null

Java以木数据类仪

No.数据类型大小位可表示的数据范国

1long(长整数)64-92253-2036854—5808-9223S-20368>-|--580"

■int(整数)32-214-483648-21J7I8364-

3由(短整数)16-32-6832~6"

4byte(位)8-128-127

5chai(字符)0~255

6Ho泪(单精度)32-34E36(-34I058)-34E38(341058)

一double(双双度)64-1~E30s(-「10须)~I-E308(1-10308)

通过以上的数据的保存大小可以发现,按照由小到大的保存顺序:byte<short<int<long<

float<double,double可以保存最大的数据,使用double可以保存全宇宙之中最有意义的最

大的数字。以上给出的几个基本类型,有个人总结的几个核心用法:

­表示整数永恒使用int、表示小数永恒使用double;

•在进行数据传输和字符转码的过程之中都使用byte:

­表示日期时间或者是文件大小的时候都使用long;

•表示逻辑关系的时候往往都使用booleano

3.4.1整型数据(byte、short、int、long)

整型数据是最为常用的一个数据类型,其不能保存小数数据,在Java之中,默认的一个整数

就是int型数据类型。

范例:定义整型变量

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

〃10是一个整数,既然是整数就是int数据类型

〃10也称为常量,而num是一个变量

intnum=10;//int变量=int型常量

num=20;〃num的内容被改变了

System.out.println(num);

本程序之中首先将一个数字10(是一个int型常量)赋予int型的变量num,而后修改

了num变量的内容。提示:关于不同版本JDK的问题(解释之前所谓的默认值哲时无法使

用的问题)

那么在JDK1.5之后,针对于变量的声明与赋值这两个操作上已经发生了变化。

范例:正确代码

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnum;//定义一个int型变量,定义的时候没设置数值

num=10;//为变量设置内容

System.out.prin:ln(num);

)

)

范例:错误代码

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnum;//定义一个int型变量,定义的时候没设置数值

System.out.println(num);

)

)

变量在使用前一定要设置默认值(不要去依靠系统提供的默认值),但是如果在JDK1.4

及其之前版本的话,连最早正确的代码也是错的(第一行是定义变量、第二行是为变量献值,

这个是错误的),所以最保险的做法是是在声明变量的同时就设置好内容(intnum=10);

既然是数值型的变量,那么变量定义之后也是可以进行数学计算的。

范例:进行数学计算

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA-10;

intnumB=20;

intresult=numA+numB;//int+int=int

System.out.println(result);

)

}

每种数据类型都有其自己的最大值和最小值范围,那么如果说超过了这个范围呢?

范例:观察超过数据范围的情况

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intmax=Integer.MAX_VALUE;//取得int的最大值

intmin=lnteger.MIN_VALUE;//取得int的最小值

System.out.println(max);//最大值:2147483647

System.out.println(min);//最小值:-2147483648

//int型+int型=int型

System.out.printlnfmax+1);//最大值+1=-2147483648(最小值)

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

//int型-int型=int型

System.out.println(min-1);//最小值-1=2147483647(最大值)

)

)

发现数据是一个循环过程,最大值如果继续进行加法计算则变为了最小值,最小值如

果继续进行了减法计算,将变为最大值,这一概念属于数据的溢出。

面对数据的溢出问题,如果要想解决,那么唯一的途径就是扩大使用的数据范围,比

int保存范围大的数据类型是long,那么如果要想将int变为long,有两种方式:

方式一:在数字前加上一个“(long)”

longx=(long)10;//int变为long

方式二:是在数字后加上一个字母“L”

longx=10L;〃int变为long

范例:利用long数据类型解决数据的溢出问题

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intmax=Integer.MAX_VALUE;//取得int的最大值

intmin=lnteger.MIN_VALUE;//取得int的最小值

System.out.println(max);//最大值:2147483647

System.out.println(min);//最小值:-2147483648

〃int型(自动向上变为long)+long型=long型

System.out.println(max+IL);//2147483648

System.out.println(max+(long)2);//2147483649

〃int型(自动向上变为long)-long型=long型

System.out.println(min-IL);//-2147483649

)

}

那么通过这样一个程序就可以得出一个结论:当范围小的数据类型与范围大的数据类

型一起进行数学计算的时候,范围小的数据类型会自动的变为范围大的数据类型,当类型统

一之后再进行数学计算。

byte-*short-*int-*longa

而在整型数据之中还存在有一种byte的类型,这个长度只有“-128~127”之间。

范例:观察byte操作

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnum=129;

byteb=(byte)num;〃范围大的数据变为范围小的数据,需要强制转换

System.out.println(b);

)

}

范围大的数据类型如果要变为范围小的数据类型,一定要使用强制转换,但是这之中

就有可能出现数字的错乱,

但是在使用byte的时候一点很有意思,byte作了一些特殊处理。

范例:观察原始操作

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnum=10;

byteb=(byte)num;//int变为byte

System.out.println(b);

)

)

范例:观察特殊的支持

publicclassTestDemo{

publicstaticvoidmainfStringargs[]){

byteb=10;〃int变为byte

System.out.println(b);

)

任何一个整数在Java之中都是一个int类型的常量,现在是将

int型变为byte型。因为10正好在byte的范围之中,而如果不在byte

范围之中的整型常量,那么依然需要执行强制转型。

3.4.2实型数据(float、double)

在程序之中默认的小数类型就是double,double是范围最大的数据类型。

范例:观察double的使用

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

doublenum=10.2;//小数为double类型

System.out.println(num);

“double型*int型(变为double型)=double型

System.out.println(num*2);

)

)

但是如果要使用的是float,一定需要注意,要执行强制类型转换,那么转换的形式也有

两种:

,形式一:(float)变量;

•形式二:在数字之后使用字母“F”表示。

范例:声明float变量

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

floatnum=10.2f;

//float*int=float

System.out.println(num*2);

)

)

建议使用小数还是以double为主,不要去采用float了。

提醒:一定要注意的是,整型数据都是不包含小数点位的,而float和double是会包含小数

范例:观察程序的问题

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=10;

intnumB=3;

System.out.println(numA/numB);//3

)

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=10;

intnumB=3;

System.out.printlnfnumA/(double)numB);//3.3333333333333335

)

)

从Java开始一直到今天,一直都有一个bug:

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

System.out.println(3*10.1);//30.299999999999997

)

)

double可以保存的数据是最大的,所以所有的数据类型:byte

fint-long-double的顺序进行自动类型转换。

3.4.3字符型数据(char)

所谓的字符数据指的是使用声明的一个字符信息,例如:7V就表示一个字符。字符使用

char进行表示,而且char和int之间是可以进行互相转换的。

范例:观察char与int的转换

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

charc='z';〃字符变量

intnum=c;//将char变为int型

System.out.println(num);

)

)

通过•系列的转换操作,可以发现,字母和数值之间的转换是有•定的数据联系的:

・大写字母(A~Z):65~90;

•小写字母(a-z):97~122,大写和小写字母之间差了32个长度;

・数字字母(3-9):48-57:

细心的同学可以发现,以上的字符编码过程和在C语言之中学习到的字符结果是相同

的,但是Java和C所采用的编码方式并不相同,Java使用的是UNICODE编码,这是一种十六

进制的编码方式。但是考虑到开发者的使用习惯,所以UNICODE吸收了C语言之中的ASCII

码的部分编码规则,这样的好处是可以方便的进行编程习惯的对接。

范例:直接操作数字就可以实现字母的改变

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

charc='A';〃字符变量

intnum=c;//将char•变为int型

num=num+32;//65+32=97,num为97

System.out.println(num);

System.out.println((char)num);

)

强调:但是一定要记和数字0是两个概念。判断某一个字符是否是数字

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

chare=16';〃字符变量

if(c>=48&&c<=57){

System.outprintln("是一个数字!");

)

if(c>='O'&&c<='9'){

System.outprintln("是一个数字!");

)

)

)

而且由于UNICODE编码的存在,所以Java中的char数据类型是可以保存中文的。

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

chare小刁「〃字符变量

intnum=c;

System.out.println(num);

)

}

但是如果要想保存中文,必须是在中文的语言环境下。

3.4.4布尔型数据(boolean)

布尔是一个数学家的名字,对于boolean数据类型只有两种选择:true,falseo一般而言,

布尔数据类型往往都作为一些程序的控制逻辑使用。

范例:程序逻辑

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

booleanflag=1<2;

if(flag){//需要接收的是布尔,flag==true

System.out.println("条件满足!");

)

)

)

在一些其它语言之中(不支持布尔型数据的)可能会使用。表

示false,1表示true,但是Java里面的布尔是绝对不可能使用数字来

表示的。

3.4.5字符串类型:String(初步认识)

在学习Oracle的时候可以发现存在有字符串数据,但是在Java之中是没有提供一种类

型可以直接表示字符串的,而要想表示出字符串,则可以利用String类完成。使用“””声明

的数据就表示一个字符串,

范例:定义字符串变量

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

Stringstr="Hello";〃双引号声明

str=str+"World";//"+”表示字符串连接

str+="W”;〃表示字符串连接

System.out.println(str);

)

)

现在就可以发现,在数学计算之中“+”表示的是加法计算,而在字符串之中“+”表示

字符串连接操作。所以,这个时候就可能会存在如下一•种问题。

publicclassTestDemo{

publicstaticvoidmainfStringargs[]){

intnumA=10;

doublenumB=20.1;

Stringresult="计算结果:"+numA+numB;

System.out.println(result);

)

)〃计算结果:1020.1

在Java里面任何的数据类型,只要是与String进行了“+”连接操作,那么都表示所有

的类型自动的变为String后进行连接操作。那么为了正确只能够使用“()”改变优先级。

现在可以发现程序里面表示字符,表示字符串,那么如果要想包含这样的信

息就必须采用转义字符,有如下的转义字符:\n(换行)、\t(Tab).\"(")、V(')>\\(\)o

范例:转义字符

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

.Strin.resul.."\t\"Hell.\'Worl..\n你好!

System.out.println(result);

)

)

转义字符只在Java学习之中有用处,其它的地方意义

不大。而如果是强制性拼凑字符串操作也会使用到。

3.5运算符(重点)

程序就是一系列的运算符:数学、关系、逻辑、位等等。但是对于运算符的使用,个人的建

议是别太复杂。

范例:观察如下的BT题目

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=10;

intnumB=20;

intresult=numA-+numB*++numA/numB++*numA-+numA-numB+++

numB;

System.out.println(result);//120

)

}

以上运算符不建议这样使用。

运算符的优先级

KVR奥

I0fit号*由左f右

1D方话号is,符由左玄右

2,.♦(正号)、・一田”由右及左

2•由右5E左

2f一由右无左

3•wAH由左区右

4♦w-・本底,行

5««»位左妙.运尊打由左直右

6>•>-•J<-关用库森打由左基右

7关不*籁仔由左W右

8&(值坂-HAND)由左金右

9位31运算符由左至右

101(愎if-符号OR)运算而由左登右

n&&送M闩由左里右

121M博■刁畲左■右

13也aBiiSR由右E左

14■『11博,冉由右2左

任何的时候聪明点的人都不背,都依靠“()”修改操作的优先级。但

是在这里需要强调三类运算符:三目、逻辑、位。

3.5.1.三目运算符

三目是一种逻辑的赋值运算。其基本操作格式:

数据类型变量=布尔表达式?<1:值2;

如果布尔表达式成立,将值1的数据赋予变量,否则将值2的数据赋予变量。

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=10;

intnumB=20;

intresult=numA>numB?numA:numB;

System.out.println(result);//20

)

)

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=10;

intnumB=20;

intresult=0;

if(numA>numB){

result=numA;

}else{

result=numB;

)

System.out.println(result);//20

)

}//三目也可以利用判断语句实现,不过代码较长。

352.逻辑运算

逻辑运算主要有与、或、非三种,其中非的实现主要依靠"!”完成。但是最为麻烦的

是与和或两个运算,因为各自都有两组实现。

1.与操作:(&、&&)

范例:观察“&”问题

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

if(l==2&10/0==0){

System.out.println("条件满足!");

)

)

)

Exceptioninthread"main"java.lang.ArithmeticException:/byzero

atTestDemo.main(Tes:Demo.java:3)

此时出现r程序的错误,那么就表示两个判断条件实际上都执行了,但是来分析一下

与操作的特点,与操作必须保证所有的判断条件都为trie,最终才是true,那么按照之前的

判断来讲,前面已经有条件返回了false,那么后面不管有多少个true,结果一定是false,那

么就没有必要继续向后判断了,则可以使用短路与

范例:使用“&&”

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

if(l==2&&10/0==0){

System.out.println("条件满足!");

)

)

)

此时后面的条件没有继续判断,属于短路操作。

2.或操作:(|、||)

范例:观察普通或“|”使用

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

if(l==l|10/0==0){

System.out.println("条件满足!");

)

)

)

Exceptioninthread"main"java.Iang.ArithmeticException:/byzero

atTestDemo.main(Tes:Demo.java:3)

由于或操作是若干个条件有一个返回true,结果就是true,而在以上的程序之中,发现

前面有条件返回了true,但是后面的判断依然执行了,这就是因为普通或会将所有的条件都

判断执行,而现在使用短路或。

范例:使用短路或(||)

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

if(l==l||10/0==0){

System.out.println("条件满足!");

)

)

此时前面的条件返回了true,而不管后面会返回多少个false,

最终的结果也一定是trueo

结论:在任何情况下编写逻辑判断的时候都使用

3.53位操作(了解)

位运算的初步就是需要实现十进制和二进制数据之间的转换操作,转换原则:数字除2取余,

最后按照倒序排列。

十进制:11f00000000000000000000000000301011(二进制数据,int是32位)

4-2

5……1t

子2

2.......1t

4-2

10t

v2

0.......1t

在Java里面提供狗位运算:&、卜~(取反)、人(异或)、>>、«、»>o

移位操作要注意的问题是高(低)位是补0还是补1和对char,nyie,short型的操作:

(1)«:(left-shift),最低位补0

(2)»:(signedright-shift),右移过程使用符号位扩展(signextension),即如果符号为为1则

高位补1,是0则补0,也就是逻辑右移

(3)»>:(unsignedright-shit),右移过程使用零扩展(zercextension),即最高位一律补0,也就是

算术右移

(4)移位操作的数据类型可以是byte,char,short,int,long型,但是对byte,char,short进行操

作时会先把它们变成一个ini型,最后得到一个ini型的结果,疝long型操作时得到一个long型结果,不

可以对boolean型进行操作。

(5)移位操作符可以和=合并起来,即<<=、»=和>>>=。例如a»=2:表示将a右移两位后的值

重新赋给a。当时在使用这三个操作符对byte,char,short型数据进行操作时要注意,例如有一下代码

片段:

publicclassShiftiest{

publicstaticvoidmain(String[]args){

bytea;byteb;bytec:a=127;b=127;c=127:a«=2;

System,out.println(a);Syslem.out.prinlln(b<<=2):

System,out.printIn(c«2);

)

}运行结果是:-4-4508

这说明了在操作a«=2执行过程是这样的:先将byte型的数127变成int型,左移2位得到508,然

后把508赋给byte型变量a时只是简单地“折断"(truncate)得到数编译时编译器不会提示你可能损失

精度(实际上在本例中确实是损失精度了),但是如果你把a<<=2改成a=a«2;编译器就会提示可

能损失精度了。

移位操作的简单计算方法:〉右移操作x»y就是x除以2的y此方,取

整数

“左移操作X«y就是x乘以2的y次方

范例:实现操作

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=17;

intnumB=11;

System.out.printlnfnumA&numB);

)

}

17的二进制:00000000000000000000000000010001;

11的二进制:00000000000000000000000000001011;

&操作:00000000000000000000000000000001:@十进制:1

范例:实现“I”操作

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnumA=17;

intnumB=11;

System.out.println(numA|numB);

)

)

17的二进制:00000000000000000000000000010001;

11的二进制:00000000000000000000000000001011:

|操作:000C0000000000000000000000011011;d十进制:27

面试题:请用最快的方式计算2的3次方

最笨拙的方法是:2*2*2=8:

采用移位:2<<2:

publicclassTestDemo{

publicstaticvoidmain(Stringargs[]){

intnum=2;

System.out.printlnfnum«2);

面试题:请解释“&”和“&&”、“I”和的区别?

•在逻楫运算上与和或分别有两种:

I-与操作:

I-普通与“&”:所有的判断条件都要执行;

I-短路与“&&”:如果前面有条件返回了false,那么后面的条件不再执行,最

终结果就是false;

I-或操作:

I-普通或“|”:所有的判断条件都要执行;

I-短路或“||”:如果前面有条件返回了true,那么后面条件不再判断,最终

结果就是true。

•位操作;

|•位与操作:只有在两位都为1的时候才返

回I,如果有一位是0返回0;

I-位或操作只有在两位都为0的时候才返

回0,如果有一位是1返回lo

3.6程序结构(重点)

程序结构有三种:顺序、分支、循环。

实际上所有的程序都会包含有顺序的范畴,按照代码的定义的

先后顺序执行。

3.6.1分支语句:

分支语句一共分为法种类型:条件分支、开关语句。

if语句:if…else语句:if…elseif…else语句:

if(布尔表达式){if(布尔表达式){if(布尔表达式){

温馨提示

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

评论

0/150

提交评论