




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章Java基本程序设计结构西北师范大学陈旺虎chenwh@2014-2015基本知识数据类型变量运算符类型转换字符串输入输出控制流程大数值数组2课程内容33.1基本知识字符集标识符关键字注释4字符集Java语言采用unicode字符集16位,含有65536个字符,包括:A---Z,a---z汉字、日文片假名、平假名和朝鲜文Unicode只是一个编码规范目前实际实现的unicode编码有三种:UTF-8,UCS-2和UTF-16三种unicode字符集之间可以按照规范进行转换。(p34)5
标识符标识符由字母、下划线、美元符号和数字组成,且第一个符号不能为数字。下列都是合法标识符:
Hello、$1234、www_123标识符可用作:类名、变量名、方法名、数组名、文件名等。6关键字关键字Java语言中已经被赋予特定意义的一些单词。常见有:class、public、try、catch、if、float、import、void等。关键字不做变量名。7注释Java有三种注释的方式://
注释内容由//一直到此行结束。/*,*/
定义一个注释块。3./**,*/这种注释方法可用来自动产生文档。8注释例1
FirstSample.java
/***这是一个Java的小例子*/publicclassFirstSample
{
/*main方法*/
publicstaticvoidmain(Stringargs[])
{
System.out.println(“你好!”);//输出
}}93.2数据类型Java是一种强类型语言意味着必须为每一个变量声明一种类型。Java共有8种基本类型:整数类型(int、short、long、byte)浮点类型(float、double)字符类型(char)布尔类型(boolean
)10整数类型整型常量表示:
十进制:123,
6000
八进制:077,
065
十六进制:0x234,
0xab12整型变量的定义分为四种:
intshortlongbyte注意:Java中整数的范围与运行Java代码的机器无关;Java中没有unsigned类型。11int型变量定义:
intx;
intheight,age;定义同时可赋值:
intheight=180,age=20;对于int型变量,内存分配个4字节,占32位,取值范围-231~231-1。-2147483648~214748364712short型变量定义:
shorth;
shortm,n;定义同时可赋值:
shortm=12,n=20;对于short型变量,内存分配2个字节,占16位,取值范围-215~215-1。-32768~3276713long型变量定义:
longsum;
longi,
j,
k;定义同时可赋值:
longsum=343435L;对于long型变量,内存分配8个字节,占64位,取值范围-263~263-1。-92233720368477808~
9223372036847780714byte型变量定义:
bytew;
bytex,y,z;定义同时可赋值:
bytex=12,y=24,z=36;对于byte型变量,内存分配个1字节,占8位,取值范围-27~27-1。-128~12715浮点类型Java中有两种浮点类型:
floatdouble浮点常量的表示:小数表示430.2科学计数4.302E2表示溢出和出错的三种特殊的浮点数值:正无穷大Float.POSITIVE_INFINITY负无穷大Float.NEGATIVE_INFINITY
NaN(非数字)Float.NaN16float型常量
12.23f,32.00F,2e40f变量的定义
floatx;
floatx1,x2,x3;
定义时赋初值
floatx1=12.23f,x2=32.00f,x3;对于float型变量内存分配4个字节,占32位。有效小数位数为6~717double型常量
12.23d,32.00D,123.0,6e-120变量定义
doubled;
doubled1,d2,d3;定义时可以赋初值
doubled1=1223.f,d2=32.00d,d3;对于double型变量内存分配8个字节,占64位。有效小数位数为1518字符类型常量
‘a’、‘A’、‘8’、‘?’变量定义
charq;
charc,type,cat;定义同时可赋值
charc=‘a’,type,cat;转义字符前缀\u表示Unicode值,而十六进制的4位数字则表明具体是哪个Unicode字符。一些特殊字符的转义序列。如\b,\n,\\等。p35表3-319布尔类型常量
true、false变量的定义
booleanx;
boolean
x,y;定义同时可赋值
booleanx=true,y=false;在Java中,布尔值和整数不能相互转换。3.3变量在Java中,每一个变量属于一种类型。在声明变量时,变量所属的类型位于变量名之前。double
salary;int
vacationDays;longearthPopulation;booleandone;在Java中,可以在一行中声明多个变量。不过,不提倡使用这种风格。int
i,j;//both
are
integers2021变量初始化声明一个变量后,必须通过赋值语句对它进行明确的初始化永远不要使用一个未初始化的变量的值。在Java中,可以在代码的任何地方进行变量声明。变量的声明尽可能地靠近变量第一次使用的地方。在Java中,不能在同一作用域内声明两个相同的变量。22常量的定义在Java中,使用关键字final来表示常量。习惯上常量名都用大写。
finaldoubleCM_PER_INCH=2.54;关键字final表示只能对变量赋一次值,其值一旦设定,便不能改。在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static
final声明一个类常量(classconstants)。
publicstaticfinaldoubleCM_PER_INCH=2.54;233.4运算符各种运算符数学函数与常量运算符的优先级与结合性各种运算符算术运算符自增运算符与自减运算符关系运算符逻辑运算符位运算符2425各种运算符Java提供一个特别的运算符。这是一个用来创建对象的运算符。new26数学函数与常量Math类包含着多种数学函数。幂函数三角函数指数函数及它的反函数Java还提供了两个常量。Math.PIMath.E27运算符的优先级与结合性
优先级操作符结合性
1
[].()(方法调用)从左到右
2!~++--+(一元)–(一元)()(强制类型转换)new从右到左
3*/%从左到右
4+
-从左到右
5
<<>>(最高位填0)>>>(最高位填符号位)
从左到右
6
<<=>>=instanceof从左到右
7
==!=从左到右
8
&从左到右
9
^从左到右
10|从左到右
11&&从左到右
12||从左到右
13?
:从右到左
14=+=-=*=/=%=&=|=^=<<=>>=>>>=从右到左283.5类型转换int
byte→
short→→longchar
↓
float
↓
double→
↓
↘
↙
六个黑箭头表示无信息损失的转换,而三个红箭头表示的转换则可能丢失精度!!29隐式类型转换大多数的数值转换是遵循优先级的关系自动完成的。转换原则如下:如果两个操作数中有一个是double类型的,则另一个将会转换成double类型。否则,如果两个操作数中有一个是float类型的,另一个将会转换成float类型。否则,如果两个操作数中有一个是long类型的,另一个将会转换成long类型。否则,两个操作数都将转换成int类型。30强制类型转换强制类型转换的语法:(目标类型)变量名在进行强制类型转换时,当心丢失数据。例1:doublex=9.987;
int
nx=(int)x;//转换后nx=9例2:浮点数四舍五入
Math.round()方法。
doublex=9.987;
int
nx=(int)Math.round(x);//结果:nx=10313.6字符串Java字符串是Unicode字符的序列,它是组织字符的基本数据结构从某种程度上来说有些类似于字符的数组。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String。在Java中,字符串被当作对象来处理。字符串可以分为两大类创建之后不会再做修改和变动的不可变字符串String类;创建之后允许再做更改和变化的构建字符串StringBuilder类。32字符串常量使用“”定义字符串,使用‘’定义字符。“abc”,“欢迎使用Java”都是字符串。‘a’,‘b’,‘c’都是字符。Java会自动为字符串常量生成一个String类的对象,所以可以直接初始化String对象。如:Strings=“Helloworld!”33String类字符串String类的构造方法String类的基本操作String类的API及文档34String类的构造方法
创建String的一个对象并进行初始化,需要调用类String的构造方法,主要有以下创造方法:①String():创建一个空串②String(Stringvalue)③
String(charvalue[])④String(char[],int
startIndex,int
numChars)35(1)获得字符串的子串格式:
substring(int
startpoint);substring(intstart,
intend)例子:
Stringjerry="Ilovetom”;s1=jerry.substring(2);s2=jerry.substring(2,5)String类的基本操作36String类的基本操作(2)串连接(+)例:Strings1=“Hello!”;Strings2=“World”;Strings3=s1+s2;当连接一个字符串和一个非字符串时,后者将被转换成字符串。Hello!world37(3)获取字符串的长度使用String类中的length()方法可以获取一个字符串的长度。
Strings=“Iamateacher”;Stringtom=“我是老师”
intn1,n2;n1=s.length();n2=tom.length();
则:n1=14,n2=4。String类的基本操作String类的基本操作(4)检测字符串是否相等可以使用equals方法检测两个字符串是否相等。如s.equals(t);注意:s和t可以是字符串变量,也可以是字符串常量。“Hello”.equals(greeting);“Hello”.equalsIgnoreCase(“hello”);一定不能使用“==”运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一位置上。3839(5)字符串检索可以用String类中的方法:
indexOf(strings)
indexOf(Strings,
int
startpoint)
例子:
Stringme=“Iamateacher”;
me.indexOf(“a”);//结果为2
me.indexOf(“w”,3);//结果为-1
String类的基本操作40
(6)字符串与数值的转化java.lang包中的Integer类、Long类、Float类、Double类分别提供了相应的方法用来进行字符串与数值间的转换。字符串转化为数值
Integer.parseInt(字符串);
Double.parseDouble
(字符串);例:Integer.parseInt(“12345”)再如:longx;Strings=“1000”;x=Integer.parseLong(s);String类的基本操作41数值转化为字符使用String类中定义的valueOf()方法,便可将一个数值转换为字符串。如:
floatx=123.45f;
Strings;
s=String.valueOf(x);String类的基本操作(7)获得对象的字符串表示所有的类都默认为java.lang包中Object类的子类或间接子类。Object类有一个方法:toString()可用于获得对象的字符串表示。例子:
Buttonbutton=newButton(“确定”);
System.out.println(button.tostring());String类的基本操作43String类的API及文档(1)返回给定位置的代码单元
publiccharcharAt(int
index)
publicint
offsetByCodePoints(int
startIndex,int
cpIndex)
publicint
codePointAt(int
index)//获取第cpIndex个代码点UTF16以16位为一个代码单元,有些辅助字符可能占两个代码单元。遍历一个字符串,查看每个代码点:int
cp
=
sentence.codePointAt(i);if
(Character.isSupplementaryCodePoint(cp))
i+=2;else
i++;44String类的API及文档(2)返回字符串长度
publicintlength()//代码单元数 publicint
codePointCount(start,end)//实际字符长度(3)字符串比较
publicint
compareTo(Stringother) publicboolean
equals(Objectother) publicboolean
equalsIgnoreCase(Stringother)publicboolean
startsWith(Stringprefix) publicboolean
endsWith(Stringsuffix)45String类的API及文档(4)字符串的检索和子串
publicint
indexOf(Stringstr)
publicint
indexOf(Stringstr,
int
fromIndex)
publicint
indexOf(int
cp)
publicint
indexOf(int
cp,
int
fromIndex)publicint
lastIndexOf(Stringstr)
publicint
lastIndexOf(Stringstr,
int
fromIndex)
publicint
lastIndexOf(int
cp)publicint
lastIndexOf(int
cp,
int
fromIndex)
publicStringsubstring(int
beginIndex)publicStringsubstring(int
beginIndex,
int
endIndex)46String类的API及文档(5)字符串的修改
publicStringtoLowerCase()
publicStringtoUpperCase()
publicStringreplace(charoldChar,
charnewChar)publicStringreplace(CharSequence
oldString,
CharSequence
newString)public
Stringtrim()publicStringconcat(Stringstr)
//说明:String实现了CharSequence接口47String类的API及文档(6)字符串类与其他类型的转换
public
staticStringvalueOf(chardata[])public
staticStringvalueOf(chardata[],
int
offset,intcount)public
staticStringvalueOf(booleanb)public
staticStringvalueOf(charc)public
staticStringvalueOf(int
i)
public
staticStringvalueOf(longl)public
staticStringvalueOf(floatf)public
staticStringvalueOf(doubled)
public
staticStringtoString()48StringBuilder类字符串StringBuilder类的说明StringBuilder类的API49StringBuilder类的说明
采用字符串连接的方式构建字符串时,每次连接字符串时,都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuilder类就可以避免这个问题的发生。如果需要用许多小段的字符串构建一个字符串,那么应该如下步骤进行。
StringBuilder
builder
=
new
StringBuilder();//createastringbuilder
builder.append(ch);//appendsasinglecharacterBuilder.append(str);//appendsastring在JDK5.0中引入StringBuilder类,这个类的前身是StringBuffer类。50StringBuilder类的API(1)分配/获取字符串的长度
voidsetLength(int
newLength)
int
length()(2)分配/获取字符串的容量
voidensureCapacity(int
minCapacity)
int
capacity()(3)字符串的检索和子串
voidgetChars(int
srcBegin,int
srcEnd,char[]dst,int
dstBegin)Stringsubstring(int
beginindex)Stringsubstring(int
beginindex,int
endindex)51StringBuilder类的API(4)字符串的修改
StringBuilder
append()
StringBuilder
insert()
StringBuilder
delete(intstarts,
intend)
StringBuilder
deleteCharAt(intindex)
StringBuilder
reverse()
StringBuilder
replace(intstarts,
intend,
Stringstr)voidsetCharAt(int
i,
charc)(5)字符串类型转换
toString()52命令行参数每个Java应用程序都有一个带String[]args参数的main方法。这个参数用来接收命令行上的参数。例:publicclassMessage
{publicstaticvoidmain(String[]args)
{if(args[0].equals(“-h”))
System.out.print(“Hello”);elseif(args[0].equals(“-g”);
System.out.print(“goodbye,”);for(int
i=1;i<args.length;i++)
System.out.print(“”+args[i]);
System.out.println(“!”);
}
}53如果程序用如下方法调用
javaMessage–gcruelword则args数组内容如下:程序运行结果:goodbye,cruelworld!
Args参数从命令行第三个参数开始取值!“Cruel”Args[0]:“-g”Args[1]:Args[2]:“World”命令行参数54字符串总结1.掌握两类字符串的定义和使用。2.掌握两类字符串的各种基本操作方法。3.掌握命令行参数的使用方法。3.7输入输出读取输入格式化输出文件输入与输出55读取输入通过控制台进行输入:Scannerin=newScanner(System.in);Line();Int();in.next();in.Double()//空格分隔例3-2
InputTest.javaScanner类定义在java.util包中。由于Scanner类输入是可见的,所以不适用于从控制台读取密码。Java
SE
6.0引入Console类。Consolecon=System.console();
con.readLine(“prompt”);
con.readPassword(“prompt”);56格式化输出使用System.out.print(x)将数值x输出到控制台上。Java
SE
5.0沿用了C语言库函数中的printf方法.例如:System.out.printf(“%,.2f”,f)。用于printf的转换符(表3-5)用于printf的标志(表3-6)printf方法中日期和时间的格式化输出。日期和时间的转换符(表3-7)57文件输入与输出要想对文件进行读取,就需要一个用File对象构造一个Scanner对象。比如:Scannerin=newScanner(newFile(“myfile.txt”));要想写入文件,就需要构造一个PrintWriter对象,在构造器中,只需提供文件名:PrintWriterout=newPrintWriter(“myfile.txt”);58593.8控制流程Java中的语句有5种:方法调用语句
System.out.println(“Hello!”);表达式语句
x=23;
i++;60Java语句复合语句
p59用{}把一些语句括起来就构成了一个语句。{z=x+23;
System.out.println(“Hello”);}控制语句
if、switch、for、while、do-whilePackage语句和import语句61条件语句Java有两种类型的条件语句
if语句
switch语句62if语句if语句一般形式:
if(表达式){
语句1
}else{
语句2
}63publiccalssIF{
publicstaticvoidmain(String[]args){
intx=6;
if(x>0){y=1;}
else]{y=-1;}
System.out.println(“我在学习IF语句”);}}例子64if的扩充形式if(表达式1)语句1elseif(表达式2)语句2
……elseif(表达式n)
语句nelse
语句n+165switch语句switch{表达式){case常量1:语句序列1
break;
case常量2:语句序列2
break;…….case常量n:语句序列n
break;default:语句序列n+1}
66注意表达式值、常量i的值为整型,不能是字符串。常量i!=常量j执行:先计算表达式值,若与常量i相同,则执行语句序列i;若都不相同,则执行语句序列n+1。注意case子句后的break!!67循环语句循环语句分为三种:
whiledo-while
for68while与do-while语句while一般格式:
while(表达式){语句序列}
例3-3
Retirement.java
do-while一般格式:
do
{语句序列}while(表达式);例3-4
Retirement2.java69for语句格式:
for(表达式1;表达式2;表达式3){语句序列}其中,表达式1负责变量初始化表达式2称为循环条件表达式3用来改变循环条件
{语句序列}称为循环体执行如右:例3-5
LotteryOdds.java70例:1-100之和importjava.applet.*;importjava.awt.*;publicclassForSum100extendsApplet{publicvoidpaint(Graphicsg)
{intsum=0;
for(int
i=1;i<=100;i++)
{sum=sum+i;}
g.drawString(“sum=”+sum,10,20);
}}71中断控制流程语句break
作用:结束整个循环的执行,转到下一语句。continue
作用:结束本次循环,开始下一次循环。注意:(1)Java中没有goto语句!!!(2)Java中提供了一种带标签的break语句,用于跳出多重嵌套的循环语句。72返回语句Java的返回语句与Java的方法紧密相关,当程序执行到此语句时,将立即返回上一级方法。格式:returnvalue;733.9大数值如果基本的整型和浮点型数据无法达到要求的精度,那么可以使用java.math包中的两个类,BigInteger和BigDecimal。这两个类可以操作任意长的数字。BigInteger类实现了任意精度的整数运算,而BigDecimal实现了任意精度的浮点运算。例3-6
BigIntegerTest.java
p73java.math.BigIntegerjava.math.BigDecimal743.10
数组数组是一种数据结构,它是有序数据的集合,数组中的每个元素的数据类型都是相同的。对元素的确定是由数组名和它的下标实现的如,
a[0]代表数组a的第一个元素,a[1]代表数组a的第二个元素,依次类推。75一维数组格式:数组元素类型数组名字[];
数组元素类型[]数组名字;//推荐使用二维数组格式:数组元素类型数组名字[][];
数组元素类型[][]数组名字;//推荐使用其中数组元素类型可以为Java中的任意类型,包括基本类型和复合类型。数组的声明76例如:
float[]boy;double[]girl;
char[]cat;
float[][]
a;
double[][]b;也可用定义的类来声明数组:
Point[]line;
数组的声明77与C/C++不同,Java在数组定义时并不为数组分配内存,必须经过初始化后才能访问数组中的元素。在Java中,数组是独立的类,有自身的方法。一个数组是一个对象,即使它由基本数据类型组成。数组的声明78数组的创建数组声明后,要用new运算符为其分配内存空间,分配内存空间时必须指明数组的长度。格式如下:数组名字=new数组元素类型[个数]
如:boy=newfloat[5];
int[]age=newint[10];79声明数组时内存情况:
float[]boy;创建数组后内存情况:
boy=newfloat[5];0x7bea内存情况→Boy[0]Boy[1]Boy[2]Boy[4]Boy[3]80数组元素为类的对象定义数组
Integer[]a;//NullInteger[]b=newInteger[5];创建数组元素的对象实例
for(int
i=0;i<b.length;i++) b[i]=newInteger(i*10);81一维数组举例(基本类型)82一维数组举例(复合类型)83数组初始化及匿名数组一维数组的初始化多维数组的初始化匿名数组84一维数组的初始化在定义数组的时候对数组的元素进行初始化,例如:int[]smallPrimes={2,3,5,7,11,13};系统会自动按照所给的初值的个数,算出数组的长度,并分配相应的空间。在Java中,可以初始化一个匿名数组。例如:
newint[]{17,19,23,29,31,37}使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组。例如:
smallPrimes=newint[]{17,19,23,29,31,37};85int[]intArray={11,47,93,26,38}分配空间+赋初值静态初始化必须与数组定义放在一个语句中。intArray=newint[10];//原数组丢失。XXXXintArray1147933826一维数组的初始化86多维数组的初始化系统会自动根据初始值的大小计算出数组的大小。例如:
int[][]magicSquare={{16,3,2,13},{5,10,11,8},{9,6,7,12},{4,15,14,1}};Java语言中,二维数组被看作数组的数组,把数组当作对象来处理。For
each循环Java
SE
5.0增加了一种功能很强的循环结构,可以用来依次处理数组中的每个元素,而不必指定下标值。这种for循环的语句格式为:for(variable:collection)statement;例如:for(intelement:a)
System.out.println(element);传统的for循环语句也可获得同样的效果。例如:for(int
i=0;i<a.length;i++)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计材料代用管理制度
- 诊所内科门诊管理制度
- 诊所药品进货管理制度
- 试用员工流程管理制度
- 财务绩效考核管理制度
- 财政水利资金管理制度
- 货物电梯设备管理制度
- 货运物流公司管理制度
- 2025年中国互联力量训练器材行业市场全景分析及前景机遇研判报告
- 2025年中国催化加热器行业市场全景分析及前景机遇研判报告
- 船体结构与制图知到智慧树期末考试答案题库2025年华中科技大学
- 2025年水利工程专业考试试卷及答案
- 2025年中考物理复习难题速递之压强与浮力综合
- 过户光伏合同能源管理协议
- 鼓胀中医护理
- 高中家长会 高三上学期迎战首考家长会课件
- 2025-2030智能制造装备行业市场发展分析及前景趋势与投资研究报告
- 四川省第二地质大队招聘考试真题2024
- 学习解读公平竞争审查条例实施办法课件
- 基于物联网的智能家居安全监控系统建设方案
- 2024年中国农业银行深圳市分行招聘笔试真题
评论
0/150
提交评论