• 1. Wen Jiabao, College of Information Science and Engineering in Hunan University.第2讲 Java语法基础
  • 2. OUTLINE了解Java的语法基础 Java数据类型 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) Java数组 编程实践
  • 3. OUTLINE了解Java的语法基础 1.1 标识符的命名约定和惯例 1.2 关键字 1.3 Java注释 Java数据类型 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) Java数组 编程实践
  • 4. 1 了解Java的语法基础与所有的程序设计语言一样,Java语言也是由Java语言规范和Java开发包(API)组成的。学习任何语言都要从这两个方面入手。 Java语言主要由以下六种元素组成:标识符、关键字、分隔符、数据类型、运算符、表达式组成。 如何运用这些语言构成自己的程序呢? import java.io.*; public class HelloworldApp{ public static void main(String []args){ int i=100; System.out.println(i/8): } } 找出上面程序中的语法要素:
  • 5. 1 了解Java的语法基础Identifier Keyword vs Reserved word 分隔符空格 tab: 分隔符. :用于包与包、包与类、类和方法、对象与方法之间 分隔符; :每条Java语句以;结束,Java允许将一个长语句写到多行中去,但是不以断开Keyword、String。一般不将多个语句写到一行中。 分隔符 {…} :类体;方法体;复合语句 分隔符[ ] :数组 分隔符( ) :方法的定义或方法的调用 分隔符“ ” :字符串String 分隔符‘ ’ :字符 三种注释//… /*…*/ /**…*/ 运算符
  • 6. 1.1 Java标识符的命名约定和惯例标识符的命名规则: 标识package,class, method, variable, parameter, interface等成份的名字,是字母、下划线、$ 、数字组成的字符混合序列,不能以数字开头,区别大小写,不能使用Java的关键字或保留字。 命名时应尽量体现各自描述的事物或属性、功能等。一般性命名约定: 尽量使用完整的英文单词或确有通用性的英文缩写或专业术语。 词组中采用大小写混合,使之更易于识别。 避免使用过长的标识符,一般控制在15个字符以内。 避免使用类似的标识符,或者仅仅是大小写不同。
  • 7. 1.1 Java标识符的命名约定和惯例具体命名惯例如下: 包名就为名词或名词性短语,全部小写。 类名、接口名应为名词或名词性短语,各单词首字母大写。 方法名应为动词或动宾短语,首字母小写,其余各单词首字母大写。 变量名应为名词或名词性短语,首字母小写,其余各单词首字母大写。 常量名应全部大写。 举例: package cn.edu.hdc; import java.util.StringTokenizer; private static final int MAX_AVAILABLE = 100; public class PrintStream extends FilterOutputStream implements Appendable, Closeable public boolean equalsIgnoreCase(String anotherString)
  • 8. 1.2 Keyword and Reserved Words 关键字KeyWord或保留字ReservedWord全部小写是Java语言本身使用的系统标识符,有特定的语法含义,不能用作标识符使用。 Java所有数据类型的长度都固定,并与平台无关,因此没有sizeof保留字。 Keywords are special reserved words in Java that you cannot use as identifiers (names) for classes, methods, or variables. They have meaning to the compiler; it uses them to figure out what your source code is trying to do. Table 1-1 contains all 49 of the reserved keywords.
  • 9. 1.2 Keyword and Reserved Words
  • 10. 1.2 Keyword and Reserved WordsThe following are access modifiers: private Makes a method or a variable accessible only from within its own class. (私有:类内可访问) friendly protected Makes a method or a variable accessible only to classes in the same package or subclasses of the class. (受保护:包内或子类内可访问) public Makes a class, method, or variable accessible from any other class. (公开:任何类均可访问) 资源<->方法和属性 人<->类class 家庭<->包Package 门牌号码>手机号码>电视>日记本
  • 11. 1.2 Keyword and Reserved WordsThe following are class, method, and/or variable modifiers: abstract Used to declare a class that cannot be instantiated, or a method that must be implemented by a nonabstract subclass. (抽象类:不可建立实例;抽象方法:必由非抽象子类予以实现) final Makes it impossible to extend a class, override a method, or reinitialize a variable. (最终类:不可继承;最终方法:不可重载;最终变量:不能再次初始化) class Keyword used to specify a class. interface Keyword used to specify an interface. (接口类) extends Used to indicate the superclass that a subclass is extending. (扩展:指定被继承的超类) implements Used to indicate the interfaces that a class will implement. (实现:指定被实现的接口类) new Used to instantiate an object by invoking the constructor. (激活构造方法,实例出一个对象)
  • 12. 1.2 Keyword and Reserved Wordsstatic Makes a method or a variable belong to a class as opposed to an instance. (静态方法或变量:属于类而非方法) synchronized Indicates that a method can be accessed by only one thread at a time. (同步方法:线程独占访问) transient Prevents fields from ever being serialized. Transient fields are always skipped when objects are serialized. (暂态域:不可序列化) volatile Indicates a variable may change out of sync because it is used in threads. (易失变量:线程同步可能改变其值) native Indicates a method is written in a platform-dependent language, such as C. (本地方法:用平台相关的语言编写的方法)
  • 13. 1.2 Keyword and Reserved WordsThe following are keywords used to control the flow through a block of code: if Used to perform a logical test for true or false. else Executes an alternate block of code if an if test is false. switch Indicates the variable to be compared with the case statements. case Executes a block of code, dependent on what the switch tests for. default Executes this block of code if none of the switch-case statements match. for Used to perform a conditional loop for a block of code. while Executes a block of code repeatedly while a certain condition is true. do Executes a block of code one time, then, in conjunction with the while statement, it performs a test to determine whether the block should be executed again.
  • 14. 1.2 Keyword and Reserved Wordsbreak Exits from the block of code in which it resides. continue Stops the rest of the code following this statement from executing in a loop and then begins the next iteration of the loop. instanceof Determines whether an object is an instance of a class, superclass, or interface. (是否是某个类/超类/接口类的实例?) return Returns from a method without executing any code that followsthe statement (can optionally return a variable).
  • 15. 1.2 Keyword and Reserved WordsThe following are keywords used in error handling: try Block of code that will be tried, but which may cause an exception. (可能产生异常的代码块) catch Declares the block of code used to handle an exception. (处理异常的代码块) finally Block of code, usually following a try-catch statement, which is executed no matter what program flow occurs when dealing with an exception. (当异常出现时,最终必须执行的代码块) throw Used to pass an exception up to the method that called this method. (抛出异常给调用方法) throws Indicates the method will pass an exception to the method that called it. (指定会抛出异常的方法) assert Evaluates a conditional expression to verify the programmer’s assumption. (计算条件表达式,以检验程序员的假设)
  • 16. 1.2 Keyword and Reserved WordsThe following are keywords used for package control: import Statement to import packages or classes into code. (输入包或类) package Specifies to which package all classes in a source file belong. (指定源文件的所属包)
  • 17. 1.2 Keyword and Reserved WordsThe following keywords are primitives: byte An 8-bit integer (signed). double A 64-bit floating-point number (signed). float A 32-bit floating-point number (signed). int A 32-bit integer (signed). long A 64-bit integer (signed). short A 16-bit integer (signed). char A single Unicode character (16-bit unsigned) (Unicode字符,16位无符号) boolean A value indicating true or false.
  • 18. 1.2 Keyword and Reserved WordsThe following keywords are a special type of reference variable: super Reference variable referring to the immediate superclass. (引用父类的变量) this Reference variable referring to the current instance of an object. (引用一个对象的当前实例的变量) The void keyword is used only in the return value placeholder of a method declaration. void Indicates no return type for a method.
  • 19. 1.2 Keyword and Reserved WordsThere are two keywords that are reserved in Java but which are not used. If you try to use one of these, the Java compiler will scold you with the following: const Do not use to declare a constant; use public static final. goto Not implemented in the Java language. It’s considered harmful.
  • 20. 1.2 Keyword and Reserved WordsWhich two are reserved words in the Java programming language? (Choose two.) A:run B:import C:default D:implement Correct Answers: B, C Which is a keyword? A: go B: NULL C: Break D: Class E: transient Correct Answers: E
  • 21. 1.3 Java注释注释(Comment):程序中的说明性文字(程序的功能、结构、版权等信息),增强程序的可读性和易维护性,有三种形式。 //... 单行注释,注释到行尾。 /* ...*/ 单行或多行注释。 /** ...*/ 文档注释。可以用Javadoc.exe自动加入生成帮助文档的单行或多行注释。
  • 22. OUTLINE了解Java的语法基础 Java数据类型 2.1 整型 2.2 字符型 2.3 浮点型 2.4 逻辑型 2.5 String类型 2.6 变量 2.7 数据类型的转换 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) Java数组
  • 23. 2 Java数据类型Java的数据类型(数据的集合以及在这个集合上能进行的运算) 包括:八种基本数据类型和引用类型:
  • 24. 2.1 整型整型:指不带小数的带符号数值,Java语言中没有无符号数。 注意:在表达式中整数类型默认为int类型,长整型必须以L做结尾。 int i=0xff;(十六进制以0x开头) int i=126;(十进制数不能以0开头,0除外) int i=067; (八进制以0开头) 计算结果超过计算机可表示的数据范围,称为溢出(Overflow)。我们要防止数据溢出现象。
  • 25. 2.1 整型在Java语言中,为byte、short、int、long分别提供了对应的对象包装类:Byte、Short、Integer、Long,以对象的方式提供了很多实用方法和常量,方便在基本数据类型和引用类型之间进行转换,详细请查阅Java API文档。 Integer类中提供了4个常量 (查帮助文档) Integer.MAX_VALUE:整型最大值(2147483647)。 Integer.MIN_VALUE:整型最小值(-2147483648)。 将String转换为byte, short, int, long的方法:String s=“127”; byte b = Byte.parseByte(s); short t = Short.parseShort(s); int i = Integer.parseInt(s); long l = Long.parseLong(s);
  • 26. 2.2 浮点型浮点型(FloatPoint Number):可以带小数点的带符号数值。 Java有单精度float(32bits),双精度double(64bits)两种类型。浮点型默认为double,如果要指定类型请在常数后加F(f)或D(d)。 浮点型有两种表示形式: 小数形式:12.37F,-0.5234D 指数形式:2.5E4,2.1E-7 不要使用float,double来执行精确的货币计算,因为会出现一些误差。Java推荐使用java.math.BigDecimal类用于任意精度的浮点值计算。
  • 27. 2.2 浮点型在Java语言中,为float、double分别提供了对应的对象包装类:Float、Double,以对象的方式提供了很多实用方法和常量,方便在基本数据类型和引用类型之间进行转换,详细请查阅Java API文档。 Float.MAX_VALUE, Float.MIN_VALUE Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY Float.NaN (Not a Number,div by zero) 将String转换为float、double的方法: String s=”127”; float f=Float.parseFloat(s); double d=Double.parseDouble(s);
  • 28. 2.3 字符型Java中采取双字节Unicode编码,而我们熟悉的ASCII码(American Standard Code for Information Interchange)是单字节的英文字符编码。char类型可与short类型相互转换。 字符型的四种表示形式: 用单引号括起来的单个字符。’A’ ‘中’ 转义字符以\开头的表示控制字符: 如’\r’:表示回车 (Carriage Return) 如’\123’:表示编码为123(8进制)的 Unicode字符,可表示部分Unicode字符。 如’\u2af3’:表示编码为2af3 (16进制) Unicode字符,可表示全部Unicode字符。
  • 29. 2.3 字符型关于字符集编码问题: 标准ASCII:七位编码,高位为0,取值范围0-127 扩展ASCII:八位编码。取值范围0-255 GB2312-80: GBK:即汉字内码扩展规范(Chinese Internal Code Specification)。1995年12月发布,向下与 GB 2312 编码兼容,向上支持 ISO 10646.1 国际标准,是前者向后者过渡过程中的一个承上启下的标准。 ISO 10646 是国际标准化组织 ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称 UCS),它与 Unicode 组织的 Unicode 编码完全兼容。ISO 10646 是一个包括世界上各种语言的书面形式以及附加符号的编码体系。其中的汉字部分称为“CJK 统一汉字”(China, Japan, Korea)。 BIG5:中文繁体字编码,为港、台地区广泛使用。 UNICODE:将全世界所有的字符进行了统一编码,实现国际化、可移植性。 ASCII是UNICODE的子集。
  • 30. 2.4 逻辑型逻辑型数据只有两种取值:true和false,长度为1Byte。不能与其它七类基本数据类型相互转换。 含关系运算符和逻辑运算符的表达式的结果为boolean。 Java语言没有无符号整数、指针、结构体struct、联合union、枚举等数据类型,这使得Java简单易学,但功能并没有丝毫减弱。
  • 31. 2.5 字符串StringString类型不属于八种基本类型,而属于引用类型。String常量是用双引号括起来的Unicode字符序列。 以下两种写法基本上等价: String s=new String(“abc”); String s=“abc”; 详见后面String和StringBuffer部分的讲解。
  • 32. 2.6 变量和常量变量是程序中数据的基本存储单元之一,由变量名、数据类型、修饰符、初值组成。我们遵循“先定义,后使用”的原则。 [modifier] [= ] 可用在成员变量前的修饰符:static、final、public、protected、private、transient等。 可用在局部变量前的修饰符:final 常量只能赋一次值,不能改变。 数据类型:8种基本类型Primitive type和引用类型Reference type。 变量的命名规则与标识符的命名规则相同。 声明一个变量,内存中分配一块空间,大小由变量的数据类型决定。在Java程序中声明变量后,可以用赋值语句来初始化变量,任何变量都不能没有初始值,否则无法通过编译。
  • 33. 2.6 变量和常量根据变量的作用域的不同,变量可分为: 局部变量 方法的形式参数:在整个方法内有效。 方法体中定义的变量:在整个方法内有效。 复合语句{}中定义:在{}内有效。 成员变量:在类内、方法外定义的变量,在整个类中有效。 类变量:有static修饰的成员变量,只能在static方法中直接使用,在non-static方法中使用需要先new一个对象,然后通过对象名.变量名来访问。 对象变量:无static修饰的成员变量,先new一个对象,然后通过对象名.变量名来访问。 异常处理参数:try{…}catch(Exception e){…}finally{…}
  • 34. 2.7 数据类型的转换规则基本数据类型的转换: 八种基本数据类型与String之间的转换 八种基本数据类型与Wrapped Class之间的转换 八种基本数据类型之间的转换 引用类型的转换: 上溯造型(子类->父类) 下溯造型(父类->子类):没有经过上溯造型,就不能进行下溯造型。
  • 35. 2.7 数据类型的转换规则自动隐含的类型转换(要求类型兼容,数据类型长度从小向大转)字符串转换成为数值类型:要转换的字符串对应的数字不能超过相应的数字类型所能表示的最大范围。 表达式类型转换:Java整型、浮点型、字符型数据可以混合运算,在运算中,不同类型的数据先转化为同一种类型然后再进行计算。 强制转换:指从在机器中占位多的类型向占位少的类型方向转换,这种转换可能导致计算精度的下降和数据的丢失(溢出).一般用在对象之间的转换。 语法格式:(低级数据类型)高级类型数据 int i=125; byte b=(byte)i;byteshortintlongfloatdoublechar
  • 36. 2.7 数据类型的转换规则String和基本数据类型之间的转换:Wrapped Class String s=“127”; byte b = Byte.parseByte(s); short t=Short.parseShort(s); int i=Integer.parseInt(s); long l=Long.parseLong(s); 数字类型转换成为字符串类型: String str=String.valueOf(number);其中number为任何数字类型。
  • 37. OUTLINE了解Java的语法基础 Java数据类型 Java的运算符、表达式、语句、程序 3.1 运算符 3.2 运算符的优先级 3.3 语句和程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) Java数组 编程实践
  • 38. 3.1 运算符运算符按照操作数的数目可分为: 单目运算符(++,--.~) 双目运算符 三目运算符(?:) 运算符又可以划分为:赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符等。 2.1.1 赋值运算符:先计算后赋值,注意等号==和赋值号=不要混淆。 变量名=表达式;等号左右的数据类型相容,否则需要强制转换。 补充:赋值表达式的值: System.out.println(a=5); System.out.println(a=false);
  • 39. 3.1 运算符3.1.2 算术运算符包括:二元运算符(+、-、*、/、%),一元运算符(++、――、+、-). /对整数和浮点数的运算结果不同。 System.out.println(8.0/5); System.out.println(8/5); if(i%2==0){ } i++选取i的值,再使i的值加1。++i:先使i的值加/减1,再取i的值。例如: int i=5,j=6; System.out.println(i++*j++); i=5; j=6; System.out.println(++i*++j);
  • 40. 3.1 运算符3.1.3 关系运算符:> >= < <= == != Java中基本数据类型和引用类型数据的相等关系有不同的含义: 基本数据类型的相等直接指两个操作数的值是否相等用==操作符; 引用数据类型的相等则有两个含义: 比较引用类型变量的指针地址是否相等:用==操作符。 比较引用类型变量的地址中的内容时,请覆盖Object类的equals()方法来实现,String类、StringBuffer类已覆盖了equals()方法例: int i=5,j=7; System.out.println( i==j ); String s1=“China”,s3; String s2=“中国”; System.out.println( s1==s2 ); System.out.println( s1.equals(s2) );
  • 41. 3.1 运算符基本类型数据的排序和引用类型数据的排序也不相同。实现Compared接口。
  • 42. 3.1 运算符3.1.4 逻辑运算符:用在bolean类型数据之间。 &与、 |或、 !非、 ^异或、&&短路与、||短路或。 &(|)用在整数(byte, short, char, int, long)之间时是按位与(按位或); &(|)用在逻辑类型数据之间时是逻辑与(逻辑或); ^异或:相同为0,不同为1。 与或和短路与、短路或的区别:前者是将运算到底,后者有结果时结束。
  • 43. 3.1 运算符3.1.5 位运算符:对byte, short, char, int, long(低于int型的操作数自动转换为int, 结果为int)进行按位操作: ~:按位取反 &:按位与 |:按位或 ^:按位异或 <<:左移一位(带符号) a<>:右移一位(带符号) a>>b:将二进制形式的a右移b位,高位补符号位。 >>>:右移一位(不带符号) a>>>b:将二进制形式的a右移b位,高位补0。
  • 44. 3.1 运算符a=10011101,b=00111001;则有如下结果: a<<3, a>>3, a>>>的值各为什么? a&b, a|b, ~a, a^b的值各为什么? 例程:bitop.java 功能:演示位运算。
  • 45. 3.1 运算符3.1.6 扩展赋值运算符: += - = *= /= %= &= |= ^= >>= <<= <<<= 3.1.7 其它运算符: 条件运算符?:可简化if...else语句 语法格式:boolean表达式1 ?表达式2 :表达式3 功能:先判断boolean表达式1的值,若为true,则结果为表达式2的值,否则取表达式3值。例如:result=(sum==0?1:num/sum); 分量运算符.:用在包名之间、包名与类名之间、类名与静态方法之间、类名与静态成员变量之间、对象名和成员方法之间、对象名和成员变量之间。 下标运算符[ ]
  • 46. 3.1 运算符实例运算符instanceof左面是一个对象,右面是一个类。当左面的对象是右面的类创建的对象时返回true,否则返回false,多用在对象的上溯造型和下溯造型比较多时。 内存分配运算符new: <类名> 对象名=new 构造方法(实参数); 强制类型转换运算符(类型)
  • 47. 3.1 运算符public class Blank { public static void main(String[] args) { Blank b=new Blank(); if(b instanceof Blank){ System.out.println("is"); }else{ System.out.println("is not"); } }//end of main() } //end of class Blank
  • 48. 3.2 运算符的优先级优先级决定表达式中不同运算的执行顺序。 运算符的结合性分为左结合和右结合: 左结合就是按照从左向右的顺序计算表达式。 右结合就是按照从右向左的顺序计算表达式。 例: 4*7%3:* %均是左结合性 a=b=c:赋值运算符是右结合性, a=(b=c)
  • 49. 3.3 Java程序、语句、表达式、运算符Java程序的层次:package包、class类、语句块、方法、语句、表达式、常量/变量/运算符。 方法由一条一条语句构成,语句是构成程序的基本单元。语句可对计算机发出操作指令。Java语句要求以;结束,包括: 方法调用语句; 表达式语句; 复合语句;{ …; …; } 控制语句; package,import语句。 语句中可能包含表达式。表达式中包含运算符和操作数。表达式用运算符将操作数(常量、变量和方法等)连接起来有确定值的式子。 运算符:包括算术运算符、关系运算符、逻辑运算符、赋值运算符等。
  • 50. 为了兼容非面向对象语言,Java保留了基本数据类型(不携带属性,没有方法可调用),沿用它们只是为了迎合人类根深蒂固的习惯,并能简单、有效地进行常规数据处理。与此同时Java也为各种基本数据类型提供了相应的包装类(Wrapper Class),完成简单数据类型到引用类型Object的转换。 八种基本数据类型都对应的包装类: 4 基本数据类型的对象包装类
  • 51. 4 基本数据类型的对象包装类要将字符串s转换成基本数据类型,几乎都用“对应包装类.parseXxx (s) ”方式实现: String s=“127”; byte b = Byte.parseByte(s); short t=Short.parseShort(s); int i=Integer.parseInt(s); long l=Long.parseLong(s); float f=Float.parseFloat(s); double d=Double.parseDouble(s); 基本类型转换为String,设number为任何数字类型: String str=String.valueOf(number); String str=number+””;利用+的自动转换功能
  • 52. 4 基本数据类型的对象包装类包装类和对应的基本数据之间可以进行转换: int i=100; Integer ii=Integer.ValueOf(i); int i=ii. intValue() ; 包装类
  • 53. Byte Short Integer Long Float Double Char Booleanbyte short int long float double char boolean构造方法()xxxValue()String
  • 54. 4 基本数据类型的对象包装类封装类Integer的一些有用的static方法: public static int parseInt(String s) {…} 功能:将字符串转换为十进制整数并返回 public static String toString(int i){…} 功能:返回整数i的String对象。 public static String toBinaryString(int i){…} 功能:返回整数i的二进制表示的String对象。 public static String toHexString(int i){…} 功能:返回整数i的十六进制表示的String对象。 作业:编程实现输入一个整数,将其转换为二进制,十六进制数并输出。要求CUI形式、使用swing的InputDialog()、showMessageDialog()方法输入输出信息。
  • 55. public class ToBiHex { public static void main(String[] args) { String s1 = "111"; System.out.println("111(2)=" + Integer.valueOf(s1, 2).intValue()); System.out.println("111(16)=" + Integer.valueOf(s1, 16).intValue()); System.out.println("111(10)=" + Integer.valueOf(s1, 10).intValue()); int k = 20; System.out.println("20(10)的二进制表示: " + Integer.toString(k, 2)); System.out.println("20(10)的十六进制表示:" + Integer.toString(k, 16)); } }
  • 56. OUTLINE了解Java的语法基础 Java数据类型 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 5.1 Java的标准输入和输出 5.2 JDK1.5增加的Scanner()和Printf() 5.3 图形界面的标准对话框 5.4 Java程序运行时间计算 Java流程控制语句(分支、循环、跳转) Java数组 编程实践
  • 57. 5.1 Java的标准输入和输出Java.lang.System类提供了3种标准输入和输出流: System→ class public static final PrintStream out → attribute println →method 标准输入流(System.in)用于读取用户从标准输入设备或用户定义的输入设备数据的输入。 InputStreamReader iin=new InputStreamReader(System.in); BufferedReader bin=new BufferedReader(iin); System.out.print("请输入一个字符串:"); String s=bin.readLine();
  • 58. 5.1 Java的标准输入和输出标准输出流(System.out):用于在标准输出设备或用户指定的输出设置上输出数据。 System.out.print (表达式1+表达式2+……); System.out.println(表达式1+表达式2+……); System.out.println(); 标准出错流(System.err)用于显示出错信息 System.err.print (表达式1+表达式2+……); System.err.println(表达式1+表达式2+……);
  • 59. 5.1 Java的标准输入和输出+的三种含义 算术运算的加 String的连接操作 concat() 只要+两侧的操作数中有一个为字符串类型,则先将另一个操作数转换为字符串,然后进行连接操作。 a=10;b=20 System.out.println(a+” ”+b); System.out.println(a+b+” ”); System.out.println(” ” +a+b);
  • 60. 5.2 JDK1.5增加的Scanner()和printf()JDK1.5增加的java.util.Scanner类和System.out.printf()方法,来简化用户数据输入和输出。Scanner类一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。 1. 从键盘上输入数据: import java.util.Scanner; Scanner reader=new Scanner(System.in); System.out.print("请输入一个字符串:"); int i=reader.nextInt(); 用reader对象调用haveNext()来循环判断是否还有用户输入,可以调用nextByte(), nextShort(), nextInt(), nextLong(), nextDouble(), nextFloat(), nextLine()来读取用户在命令行输入的各种数据类型。
  • 61. 5.2 JDK1.5增加的Scanner()和printf()2.printf(格式控制部分,表达式1,表达式2,…); 类PrintStream, java.io.PrintWriter和 java.lang.String 都增加了四个新的格式化方法。printf()和 format() 方法具有相同的功能. System→ class public static final PrintStream out → out是类System的属性。 println →method System.out.printf("Pi is approximately %5.2f", Math.Pi); printf(格式控制部分,表达式1,表达式2,…);
  • 62. 5.2 JDK1.5增加的Scanner()和Printf()格式控制部分: %[argument_index$][flags][width][.precision]conversion argument_index是1-n之间的正整数,说明了对应后面参数的序号,一般省略。System.out.printf("%2$d++++++%1$d\n",100,200); width表示输出的场宽,默认右对齐,指定场宽小于实际长度时自动向右扩展,场宽前[flags]加负号左对齐。 precision代表数值的小数位数 conversion代表被格式化的参数的类型: %d decimal,%o octal,%x hexadecimal, %f float/double %c a Unicode characters %s String 逗号格式化标志:%,20.2f
  • 63. 5.3 图形界面的标准对话框1. javax.swing.JoptionPane.showConfirmDialog():询问用户是否确定的对话框。 2. javax.swing.JoptionPane.showInputDialog():提示用户输入数据的对话框 import javax.swing.JOptionPane; str=JOptionPane.showInputDialog(“请输入:"); i=Integer.parseInt(str); (将String转换为需要的数据类型) 语法格式: public static String showInputDialog( Component parentComponent, Object message, String title, int messageType)
  • 64. 5.3 图形界面的标准对话框3. javax.swing.JoptionPane.showMessageDialog():显示数据的对话框 import javax.swing.JOptionPane; str=JOptionPane. showMessageDialog(null,“123456”,“标题栏”,1); public static void showMessageDialog(Component parentComponent, Object message, String title, int messageType) javax.swing.JoptionPane.showOptionDialog():可以实现以上3种方法的综合功能。
  • 65. 5.4 Java程序运行时间计算Java程序运行时间的计算,以ms为单位。 import java.util.*; long start= Calendar.getInstance().getTime(); //long start= new Date().getTime(); …… …… long end= Calendar.getInstance(). getTime(); //long end= new Date(). getTime(); Sytem.out.println(s2-s1); 注:public long getTime():Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT(历元即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000) represented by this Date object.
  • 66. OUTLINE了解Java的语法基础 Java数据类型 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) 6.1 if语句 6.2 switch语句 6.3 for语句 6.4 while语句 6.5 do…while语句 6.6 continue语句和break语句 Java数组 编程实践
  • 67. UML:Activity diagramsBohm and Jacopini's work demonstrated that all programs could be written in terms of only three control structures the sequence structure, the selection structure and the repetition structure. Activity diagrams are part of the UML. An activity diagram models the workflow (also called the activity) of a portion of a software system. Such workflows may include a portion of an algorithm, such as the sequence structure in Fig. 2.1. Activity diagrams are composed of special-purpose symbols, such as action-state symbols (rectangles with their left and right sides replaced with arcs curving outward), diamonds and small circles. These symbols are connected by transition arrows, which represent the flow of the activity, that is, the order in which the actions should occur
  • 68. 6.1 顺序结构结构化程序设计的三种结构:顺序、分支、循环。 Figure 2.1. Sequence structure activity diagram.
  • 69. 6.2 if语句if语句多用于二中择一,利用if的嵌套也能实现多中择一。 语法格式: if (exp){ statement1; }[else{ statement2; }] 注意: 表达式exp的值应为boolean. statement1,statement2即使只有一句也应用{}括起。
  • 70. 6.2 if语句Figure 2.2 if...else double-selection statement UML activity diagram. if ( grade >= 60) { System.out.println( "Passed" ); }else{ System.out.println( "Failed" ); }
  • 71. 6.2 if语句A: If a is true and b is true then the output is "A&&B." B: If a is true and b is false then the output is "notB." C: If a is false and b is true then the output is "ELSE." D: If a is false and b is false then the output is "ELSE." Correct Answers: C
  • 72. 6.3 switch语句switch语句:switch语句多用于多中择一。 语法格式: switch(exp){ case const1: statement1; break; case const2: statement2; break; ... ... .... .... case constn: statementn; break; [default: statement_default; break;] } 注意: exp必须是下述四种类型之一:int,byte,char,short. 在case子句中给出的匹配值consti必须是一个常量,且各case子句中的consti值各不相同。 例程:输入年year月month,输出该月的天数days。 注:闰年能被4整除不能被100整除;或者能被400整除。
  • 73. 6.3 switch语句
  • 74. 6.3 switch语句A: value = 3 B: value = 4 C: value = 5 D: value = 6 E: value = 7 F: value = 8 Correct Answers: F
  • 75. 6.4 for语句for语句:一般用于已知循环次数的情况下,语法格式: for(init_statement;test_exp;alter_statement){ body_statement } 例: int result=0; for(int i=0;i<10;i++){ result+=i; } 无限循环(在循环体中一定要有break跳出语句) for(;;){…} While true {…}
  • 76. 6.4 for语句Figure 5.3. for statement header components.
  • 77. 6.4 for语句 JDK1.5中For语句的增强:这个新的语法结构减少了因为iterator 和索引变量在遍历集合与数组时所带来的繁琐和出错几率。 import java.util.*; public class EnhancedForLab {     public static void main( String[] args ) {         Vector v = new Vector();         v.add( new String( "Hello World" ) );         v.add( new Integer( 10 ) );        v.add( new Double( 11.0 ) );         v.add( new Long( 12 ) );         for ( Iterator i = v.iterator(); i.hasNext(); ) {             System.out.println( " Vector element is: " + i.next() );         }   for ( Object o : v ) {             System.out.println( " Vector element is: " + o );         } }
  • 78. 6.4 for语句 import java.util.*; public class EnhancedForLab2 { public static void main( String[] args ) { String [] s = {"Java 2","Platform", "Standard","Edition","1.5", "is", "the", "latest","release","of","the", "Java", "Platform" };       for ( int i = 0; i < s.length; ++i ) {             System.out.println( "String array element is: " + s[i] );         } for ( String i : s ) {              System.out.println( " String Array element is: " + i );         } }
  • 79. public class ToBinary { public static void main(String[] args) { printBinary(256); printBinary(257); printBinary(1); } /* 该方法将整型参数i以二进制的形式输出,方法没有返回值*/ static void printBinary(int i) { System.out.print(i + "的2进制数表示为:\t"); for (int j = 31; j >= 0; j--) { if (((1 << j) & i) != 0) { System.out.print("1"); } else { System.out.print("0"); } } System.out.println();//换行 } }
  • 80. 6.5 while语句while语句:已知循环条件的情况。 语法格式: [init_statement] while(test_exp){ body_statement; [alter_statement;] } 例: int result=0; int i=0; while(i<10){ result+=i; i++; }
  • 81. 6.5 while语句Figure 4.4. while repetition statement UML activity diagram.
  • 82. 6.6 do…while语句do...while语句 语法格式: [init_statement] do{ body_statement; [alter_statement;] } while(test_exp) 例: int result=0; int i=0; do{ result+=i; i++; } while(i<=10)
  • 83. 6.6 do…while语句Figure 5.8. do...while repetition statement UML activity diagram.
  • 84. 6.6 do…while语句三个循环语句的比较: for:先判断,后执行;执行次数>=0;当条件为真时执行。 while:先判断,后执行;执行次数>=0;当条件为真时执行。 do...while:先执行,后判断;执行次数>=1;当条件为真停止执行。
  • 85. 6.7 continue语句和break语句1 break语句: 语法格式:break [label] 功能:终止某个语句块的执行,跳转到该语句块后的第一个语句开始执行。 switch语句中 break语句出现在多层嵌套的语句块中时,可以通过为各层语句块加标签,并在break带相应标签的方式,指明要终止的是哪一层语句块。 2 标签语句:由Java标识符加冒号组成。
  • 86. 6.6 continue语句和break语句3 continue语句: 语法格式:continue [label] 功能:用于跳过某个循环语句块的一次执行,直接执行下一次循环。
  • 87. import javax.swing.JOptionPane; public class GuessNumber { public static void main(String args[]) { int i = 0; String str = null; int num = (int) (Math.random() * 100) + 1; while (i != num) { str = JOptionPane.showInputDialog("请输入你所猜的数(1-100):"); i = Integer.parseInt(str); if (i > num) { JOptionPane.showMessageDialog(null, "你猜的数太大了!", "提示", 1); } if (i < num) { JOptionPane.showMessageDialog(null, "你猜的数太小!", "提示", 1); } if (i == num) { JOptionPane.showMessageDialog(null, "恭喜你,猜对了!", "提示", 1); } } } }
  • 88. OUTLINE了解Java的语法基础 Java数据类型 Java的运算符、表达式、语句、程序 对象包装类 Java编程的基本技巧 Java流程控制语句(分支、循环、跳转) Java数组 7.1 数组的声明、创建及初始化 7.2 多维数组 7.3 Arrays类和与数据操作相关的方法 编程实践
  • 89. 7.1 数组的声明、创建及初始化一.数组的基本概念: 数组的元素 -- element 数组的索引 -- index 数组的长度 -- length 数组的类型 -- type 数组的名称 – name 1.数组声明: 语法格式:type var[]; 或type []var; 例:int[ ] myNumbers;在栈空间内为myNumbers(指针、句柄、引用变量) 分配32bits的空间。
  • 90. 7.1 数组的声明、创建及初始化说明: 在Java语言中,声明数组时不能指定其长度。 长度为n的数组合法下标取值范围:0~n-1。程序运行时下标越界时抛出异常:IndexOutOfBoundsException 在Java中,二维数组每行的元素个数可能不同,所以也称为锯齿型数组。数组类型有一个属性length记录其实际长度。 2.创建数组:在堆空间heap内为数组元素分配内存空间 语法格式: 数组名=new 数组元素类型[元素个数]; myNumbers = new int[20]; 步骤1,2可合为一步。
  • 91. 7.1 数组的声明、创建及初始化3.数组的初始化:可以一个一个循环赋值,也可以一次枚举赋值。 数组名[]={初值表}; int a[]; a=new int[3];//数组的动态初始化 a[0]=1;a[1]=2;a[2]=3; 4.静态初始化:在声明一个数组的同时对数组的每个元素进行赋值。适用于数组中元素个数较少且各元素已知可枚举。 例: double d[]={3.14,2.728,3.45}; int[][] point=new int[][]{{1,2,3},{4,5,6,7}} int a[]=new int[3];
  • 92. 7.1 数组的声明、创建及初始化import java.util.*; public class ArrayTest{ public static void main(String args[]){ int a[]={13,2,30,5,34,908,-5,1200,234,9}; for(int i=0;i
  • 93. 7.2 多维数组1 声明数组 boolean[][] isFull; boolean isFull[][]; 2 创建数组 boolean[][] isFull=new boolean[4][3]; 3 初始化数组 4 使用数组 5 锯齿数组:二维数组中,每一行的元素个数不一样的数组。在声明锯齿数组时,至少要给出第一维的长度。二维数组int a[][]; a.length代表行数,a[n].length代表第n行的元素个数。 int[][] point = {{1,2,3}, {4,5}, {7}}; int[][] point = new int[3][]; point[0] = new int[2]; point[1] = new int[3]; point[2] = new int[4];
  • 94. 7.2 多维数组000000000pointpoint[1]point[2]point[0]point[0][3]6 锯齿数组内存模型 如何使用嵌套循环遍历多维数组?
  • 95. 7.3 Arrays类和与数据操作相关的方法1 与数组相关的类-Arrays:This class contains various methods for manipulating arrays (such as sorting and searching). This class also contains a static factory that allows arrays to be viewed as lists. 2. 一些与数据操作相关的方法: System.arraycopy()复制数组。Arrays.sort来排序数组
  • 96. 作业二编译并运行本章讲义中的所有Java程序,并记录其过程与运行结果(截图)。 请给出JAVA语言的所有运算符的优先级与结合性。(结合性指优先级相同的两个运算符放在一起时先算左边那一个还是右边那一个) 给出下列表达式的值。 (1) 3++4<<2^-8 (3) 36>>2*4&&48<<8/4+2 (2) "abc"&123||8<<2 (4) 2*4&&0<2||4%2 任意准备一份学生成绩表,其中包括至少3门课程、每门课程至少10名同学的成绩。请编写程序完成以下功能:(1) 统计并输出各门课程的平均成绩。(2) 输出等级表:优、良、中、及格与不及格。(3) 输出各门课程各个等级的分布情况表(百分占比)。 编写程序,用数组存储并输出乘法九九表。
  • 97. Question And Answer