2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞
所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。 Java基本数据类型 所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。 数据类型 Java C/C++ 所占位数 值的范围 char 16 0 ~65535 8 -27~27-1 byte 0-255 short -215~215-1 int 32 -231~231-1 16/32 - long 64 -263~263-1 32/64 float 3.4e-038 ~3.4e+038 double 1.7e-308 ~1.7e+308
自动类型转换 数据类型的转换 整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级: 低----------------------------------------------------->高 byte,short,char—> int —> long—> float —> double->String 操作数1类型 操作数2类型 转换后的类型 byte、short、char int int byte、short、char、int long long byte、short、char、int、long float float byte、short、char、int、long、float double double System.out.println(‘a’)与System.out.println(’a’+1) 的区别。
优先级、结合性以及单/双目运算 3.1 优先级、结合性以及单/双目运算 Java中变量的缺省初值都是确定的: 1) . , [] , () 9) & 2) ++ , -- , ! , ~ , instanceof 10) ^ 3) new (type) 11) | 4) * , / , % 12) && 5) + , - 13) || 6) >> , >>> , << 14) ?: 7) > , < , >= , <= 15) = , += , -= , *= , /= , %= , ^= 8) == , != 16) &= , |= , <<= , >>= , >>>= Java中变量的缺省初值都是确定的: 布尔变量的初值为:false 整数变量的初值为:0 浮点数变量的初值为:0.0 引用(复合)变量的初值为:null 在方法实现中定义的变量必须显式的初始化。 Stu s = new Stu(); int a = ++s.age*3<<;
优先级、结合性以及单/双目运算 3.1 优先级、结合性以及单/双目运算 1) . , [] , () 9) & 1) . , [] , () 9) & 2) ++ , -- , ! , ~ , instanceof 10) ^ 3) new (type) 11) | 4) * , / , % 12) && 5) + , - 13) || 6) >> , >>> , << 14) ?: 7) > , < , >= , <= 15) = , += , -= , *= , /= , %= , ^= 8) == , != 16) &= , |= , <<= , >>= , >>>=
练习 写出下面表达式的最后运算结果,并且令a = 1,b = 2,c =3,d = false。 (1)a+=b--/++c; (2)d = !((a>=--b/b++)&&a==b);
4.1 选择语句:if-else, switch-case 4.2 循环语句:while, do-while, for 4、Java控制结构 4.1 选择语句:if-else, switch-case 4.2 循环语句:while, do-while, for 4.3 跳转语句:continue, break, return
2.4.1 分支语句 分支语句分为两类:单分支语句和多选语句。 1. if-else语句 if-else语句的基本格式为: if(布尔表达式) { 语句或块1; } else 语句或块2;
其中: (1) 布尔表达式返回值为true或false。 (2) 如果为true,则执行语句或块1,执行完毕跳出if-else语句。 (3) 如果为false,则跳过语句或块1,然后执行else下的语句或块2。
【例】测试if-else语句,如果x>10,则输出x的值,并提示结果正确,否则输出x= 10,提示结果不正确。试写出该程序: //程序文件名称为TestIf.java public class TestIf { //声明全局变量x static int x; public static void main(String args[]) x = 12; if(x>10)
System.out.println("x = " + x + " 结果正确"); } else System.out.println("x = 10" + " 结果不正确"); x = 5; System.out.println("修改x的值之后"); if(x>10) {
程序输出结果
2. switch语句 switch语句的基本格式为: switch(表达式1) { case 表达式2: 语句或块2; break; case表达式3: 语句或块3; case 表达式4: 语句或块4; default: 语句或块5; }
表达式expression的返回值类型必须是这几种类型之一:int、byte、char、short char(String在java7 中被支持) 。 case子句中的值valueI必须是常量,而且所有case子句中的值应是不同的。 default子句是任选的。 break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行。 (如果某个case分支后没有break语句,程序将不再做比较而执行下一个分支。) switch语句的功能可以用if-else语句来实现,但某些情况下,使用switch语句更简炼。
2.4.2 for循环语句 for循环语句实现已知次数的循环,其基本格式为: for(初始化表达式;测试表达式;步长) { 语句或块; }
其执行顺序如下: (1) 首先运行初始化表达式。 (2) 然后计算测试表达式,如果表达式为true,执行语句或块;如果表达式为false,退出for循环。 (3) 最后执行步长。
【例】用for循环统计1~100(包括100)之间数的总和。试写出该程序: //程序文件名称为TestFor.java public class TestFor { public static void main(String args[]) int sum = 0; for(int i = 1; i<=100; i++) sum += i; System.out.println("1到100(包括100)的数的总和为:" + sum); }
程序输出结果
2.4.3 while循环语句 while循环语句实现受条件控制的循环,其基本格式为: while(布尔表达式) { 语句或块; } 当布尔表达式为true时,执行语句或块,否则跳出while循环。
上面for循环语句的例子改为while语句后如下所示: int sum = 0; int i = 1; while (i<=100) { sum += i; i++; } System.out.println("1到100(包括100)的数的总和为:" + sum);
2.4.4 do语句 do语句实现受条件控制的循环,其基本格式为: do { 语句或块; } while(布尔表达式)
先执行语句或块,然后再判断布尔表达式。与while语句不同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为: int sum = 0; int i = 1; do { sum += i; i++; } while (i<=100); System.out.println("1到100(包括100)的数的总和为:" + sum);
练习 4.写出下面程序的运行结果。 //Examplex2_3.java public class Example2_3{ public static void main(String[] args){ int x = 1,a = 0,b = 0; switch(x){ case 0: b++; case 1: a++; case 2: a++,b++; } System.out.prinln(“a=”+a); System.out.prinln(“b=”+b);
练习(3) 6.编写Java程序,输出从公元1990年到2007年所有闰年的年号,每输出两个年号换一行。判断年号是否为闰年的条件是: (1)若年号能被4整除,而不能被100整除,则是闰年; (2)若年号能被400整除也是闰年。
Java语言程序设计-数组、容器和字符串 2018/11/22 Java语言程序设计-数组、容器和字符串 教师:段鹏飞
1、数组的基本属性值 2、数组的初始值 3、字符串的操作,转换 4、注意==的使用 5、例题 知识点 1、数组的基本属性值 2、数组的初始值 3、字符串的操作,转换 4、注意==的使用 5、例题
主要内容 1、数组 2、容器(List, Set, Map) 3、字符串
数组是一组相同类型变量的集合,可以使用共同的名字引用它。 1 数组 数组是一组相同类型变量的集合,可以使用共同的名字引用它。 ]
int[][] arr 或 int arr[][]; 1.1 创建和使用数组 声明数组 (1)声明一维数组的格式: 数组元素的类型[ ] 数组的名字; int[] arr 或 int arr[]; (2)声明二维数组的格式: 数组元素的类型[ ][ ] 数组的名字; int[][] arr 或 int arr[][];
1.2 创建数组 一般来说,当创建数组的时候,使用 new 操作符,后面跟着数组元素的数据结构。然后将元素的数目用方括号[]括起来,其格式如下所示: 数组名字 = new 数组元素的类型[数组元素的个数] ; 例: a = new int[10];
1.3 数组元素的使用 数组可以通过下标访问自己的元素: int a[ ]=new int[10]; for(int i=0;i<a.length;i++) { a[i]=i; System.out.print(a[i]+""); }
注意,不能在length后面加一个圆括号( ),否则造成错误,因为length不是一个方法。 1.4 确定数组的大小 为了获得数组的大小,可以使用下面的代码: arr.length; 注意,不能在length后面加一个圆括号( ),否则造成错误,因为length不是一个方法。
1.5 多维数组的应用 在Java中,多维数组(multidimensional arrays)是由若干行和若干列组成数组。在人们工作生活与学习中,要使用二维表格、矩阵、行列式等,都可以表示成多维数组。例如: int D[ ][ ] = new int[3][4];
1.5 多维数组的应用 该语句声明并创建了一个3行4列的数组D。这个数组在逻辑上可以表示成一个int类型的矩阵。 也就是说,这个数组在逻辑上可以表示为: D[0][0] D[0][1] D[0][2] D[0][3] D[1][0] D[1][1] D[1][2] D[1][3] D[2][0] D[2][1] D[2][2] D[2][3]
2 集合 集合是一系列对象的聚集,实际上是用一个对象代表一组对象,在集合中的每一个对象称为一个元素。与数组不同的是,集合中的元素都是对象。 集合在程序设计中是一种重要的数据结构,Java提供了有关集合的类库,我们称之为Collection API,其接口和类主要位于:java.util包中
2.1 体系结构 Collection Vector List HashSet Set Map Hashtable HastMap ArrayList
2.2 List、Set、Map 通用方法 : boolean contains(Object a) boolean equals(Object a) Iterator iterator() int size() void clear() boolean add(Object a)
ArrayList(数组列表)和Vector(向量)是List的两个重要 实现。 List 接口是 Collection 的子类,它表示对象可以重复, ArrayList(数组列表)和Vector(向量)是List的两个重要 实现。 ArrayList 和 Vector 实际上是Java中的动态数组,我们 知道,数组在用new创建以后,其大小(length)是不能 改变的,而 ArrayList 和 Vector 中元素的个数(size) 是可以改变的
public static void main(String[] args){ 2.3 示例 public static void main(String[] args){ ArrayList list = new ArrayList(); list.add("苹果"); list.add("香蕉"); list.add("梨子"); list.add("香蕉"); // 允许重复 list.add("菠萝"); list.remove(“菠萝”); // 删除元素 System.out.println(list); // 元素的顺序与加入的顺序有关 } 元素是可以重复的
public class IteratorDemo { 2.3 示例 public class IteratorDemo { public static void main(String[] args) { ArrayList list = new ArrayList(); for(int i=0;i<=10;i++){ list.add(new Integer(i)); } Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next());
2.6 List、Set、Map总结 List接口 ArrayList:一个可增长的数组,提供快速遍历和快速随机访问,当需要快速遍历时而不是做大量删除和插入时,用ArrayList Vector(Hashtable)为了线程安全,Vector方法被同步,通常使用ArrayList 而不用Vector Set接口 重在数据的唯一性,不允许重复,set接口通过equals()方法确定两个对象是否相等,重复时只能有一个放在set中 Map接口 Map接口: 按 “键-值”对进行插入,(键、值都是对象)可以按照键来搜索值对象 可以查找值的集合,也可以查找键的集合
String类位于java.lang包中,具有丰富的方法 3 无处不在的字符串 生活中的字符串 使用String对象存储字符串 String类位于java.lang包中,具有丰富的方法 计算字符串的长度 连接字符串 比较字符串 提取字符串 “有志者事竟成 ” 频繁使用的字符串 “离奥运会开幕还有380天” “教育改变生活” String s = "有志者事竟成"; String s = new String("有志者事竟成");
要想打印输出引号(”),必须在字符串中使用转义序列\” 调用字符串的length()方法可以获得字符串的长度 3.1 字符串长度 随机输入你心中想到的一个名字,然后输出它的字符串长度 package s1java.sg.chap9; import java.util.*; public class HelloAccp1 { public static void main(String[ ] args) { System.out.print("请随机输入你想到的名字: "); Scanner input = new Scanner(System.in); String name = input.next(); System.out.println("这个名字的长度是: \" " + name.length()+ "\" "); } 要想打印输出引号(”),必须在字符串中使用转义序列\” 调用字符串的length()方法可以获得字符串的长度
计算字符串长度 3.1 字符串长度 字符串 方法原型: public int length(){ } 长度 调用length() 方法获得 调用方法: 字符串标识符.length(); 返回字符串中的字符数
3.2 字符串比较 String类中有三个方法可以比较两个字符串是否相同。 public int compareTo(String str); public boolean equals(Object obj); public boolean equalsIgnoreCase(String str); 这里需要特别说明,比较二个数值x、y是否相等,我们使用x==y。而比较二个字符串相等则不能使用“==”来比较。请看下面的程序段:
两个学员输入各自最喜欢的课程名称,判断是否一致 3.2 字符串比较 两个学员输入各自最喜欢的课程名称,判断是否一致 比较两个字符串是否相等 //判断课程名称是否相同 if(favCourse1.equals(favCourse2)){ System.out.println("最喜欢的课程相同"); }else{ System.out.println("最喜欢的课程不相同"); }
输入的“Java”和“java”代表同一课程,如何解决? 3.2 字符串比较 equals()方法比较原理 输入的“Java”和“java”代表同一课程,如何解决? 使用equalsIgnoreCase()方法 结合toUpperCase()或toLowerCase() 字符串 1 字符串 2 检查组成字符串内容的字符是否完全一致
使用equalsIgnoreCase()方法解决 3.2 字符串比较4-3 使用equalsIgnoreCase()方法解决 if(favCourse1.equalsIgnoreCase(favCourse2)){ System.out.println("最喜欢的课程相同"); }else{ System.out.println("最喜欢的课程不相同"); } 比较时忽略大小写形式
结合toUpperCase()方法解决 3.2 字符串比较 if(favCourse1.toUpperCase().equals(favCourse2.toUpperCase())){ System.out.println("最喜欢的课程相同"); }else{ System.out.println("最喜欢的课程不相同"); } 使用 toUpperCase( ) 方法 Java JAVA 使用 toLowerCase( ) 方法 Java java
令狐冲的Java成绩如表所示,输出他的成绩单 3.3 字符串连接 令狐冲的Java成绩如表所示,输出他的成绩单 学科 成绩 SQL 80 Java 90 HTML 86.7 public static void main(String[ ] args) { int sqlScore = 80; //sql成绩 int javaScore = 90; //java成绩 double htmlScore = 86.7; //html成绩 //创建成绩单 String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore + " HTML:" + htmlScore; //打印成绩单 System.out.println("*****令狐冲成绩单*****"); System.out.println(scoreSheet); } 数值型变量自动转换成String类型 String scoreSheet = "SQL:\t" + sqlScore + "\nJava:\t" + javaScore + "\nHTML:\t" + htmlScore; “+”连接字符串
方法2:使用String类的concat()方法 3.3 字符串连接 方法1:使用“+” 方法2:使用String类的concat()方法 A.concat(B): B字符串将被连接到A字符串后面 String s = new String("你好,"); String name = new String("张三!"); String sentence = s.concat(name); System.out.println(sentence); 输出结果 你好,张三!
使用作业提交系统提交Java作业,输入java源代码文件名,并输入自己的邮箱,提交前对Java文件名以及邮箱有效性进行检查。编码实现 3.4 字符串常用提取方法 使用作业提交系统提交Java作业,输入java源代码文件名,并输入自己的邮箱,提交前对Java文件名以及邮箱有效性进行检查。编码实现 合法的文件名应该以.java结尾 合法的邮箱名中至少要包含“@”和“.”, 并检查“@”是否在“.”之前
返回出现第一个匹配的位置, 如果没有找到字符或字符串,则返回-1 3.4 字符串常用提取方法 0 1 2 3 位置 青 春 无 悔 常用提取方法举例 返回出现第一个匹配的位置, 如果没有找到字符或字符串,则返回-1 方法 说明 public int indexOf(int ch) 搜索第一个出现的字符ch(或字符串value) public int indexOf(String value) public int lastIndexOf(int ch) 搜索最后一个出现的字符ch(或字符串value) public int lastIndexOf(String value)
3.4 字符串常用提取方法 方法 说明 public String substring(int index) 提取从位置索引开始的字符串部分 public String substring(int beginindex, int endindex) 提取beginindex和endindex之间的字符串部分 public String trim() 返回一个前后不含任何空格的调用字符串的副本 beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算
3.4 字符串常用提取方法 作业提交系统 //检查Java文件名 //检查你的邮箱格式 int index = fileName.lastIndexOf("."); if(index!=-1 && index!=0 && fileName.substring(index+1, fileName.length()).equals("java")){ fileCorrect = true; }else{ System.out.println("文件名无效。"); } //检查你的邮箱格式 if (email.indexOf('@') !=- 1 && email.indexOf('.') > email.indexOf('@')){ emailCorrect = true; }else{ System.out.println("Email无效。"); }
如果要打印输出“小鱼儿”,应填入的代码是什么? 3.4 小结 如果要打印输出“小鱼儿”,应填入的代码是什么? String word = "Hello, "; word = word.trim(); String s = word.concat("小鱼儿!"); int index1 = s.indexOf(','); int index2 = s.indexOf('!'); System.out.println(s.substring(______, _______)); 顺便讲一下trim() index1+1 index2
使用java.lang包中的Byte、Short、Integer 、 Long、Float、Double类调相应的类方法: 3.5 字符串与基本数据的相互转化 使用java.lang包中的Byte、Short、Integer 、 Long、Float、Double类调相应的类方法: public static byte parseByte(String s) throws NumberFormatException public static short parseShort(String s) throws NumberFormatException public static short parseInt(String s) throws NumberFormatException public static long parseLong(String s) throws NumberFormatException public static float parseFloat(String s) throws NumberFormatException public static double parseDouble(String s) throws NumberFormatException 可以将“数字”格式的字符串,转化为相应的基本数据类型。
Public static String valueOf(int n) 3.5 字符串与基本数据的相互转化 数字转换为字符串 Public static String valueOf(int n) Public static String valueOf(float n) 例如: String str=String.valueOf(123.56)
3.5 字符串与字符、字节数组 public void getChars(int start,int end,char c[],int offset ) 字符串调用getChars方法将当前字符串中的一部分字符拷贝到参数c指定的数组中。将字符串中从位置start到end-1位置上的字符拷贝的数组c中,并从数组c的offset处开始存放这些字符。需要注意的是,必须保证数组c能容纳下要被拷贝的字符。 public char[] toCharArray() 字符串对象调用该方法可以初始化一个字符数组,该数组的长度与字符串的长度相等,并将字符串对象的全部字符拷贝到该数组中。
public byte[] getBytes() 使用平台默认的字符编码,将当前字符串转化为一个字节数组。 String(byte[],int offset,int length) 该构造方法使用平台默认的字符编码,用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。 public byte[] getBytes() 使用平台默认的字符编码,将当前字符串转化为一个字节数组。
3.5 例子 public class Test10 { public static void main(String args[]) { byte d[]="你我他".getBytes(); System.out.println("数组d的长度是(一个汉字占两个字节):"+d.length+"个字节"); String s=new String(d,0,2); System.out.println(s); }
StringBuffer:String增强版 StringBuffer声明 创建空字符串 StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer("aaa"); 创建一个变量存储字符串aaa sb.toString(); //转化为String类型 sb.append("**"); //追加字符串
定义StringBuffer的实例,存储课程字符串 循环追加字符,使用StringBuffer,效率高! 从控制台接收课程信息,不断累加直到输入“#”键结束,并输出全部课程信息 //声明课程信息字符串 StringBuffer course = new StringBuffer(); System.out.println("请输入S1课程信息: "); Scanner sc = new Scanner(System.in); //循环从键盘接收字符串 String input; while(!(input = sc.next()).equals("#")){ course.append(input); course.append("\n"); } System.out.println("s1的课程信息是:" + course); 定义StringBuffer的实例,存储课程字符串 循环追加字符,使用StringBuffer,效率高!
4 正则表达式 一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。 比如,“\\dhello”中的\\d就是有特殊意义的元字符,代表0到9中的任何一个。字符串“9hello”和“1hello”都是与正则表达式“\\dhello”匹配的字符串之一。 字符串对象调用 public boolean matches(String regex) 方法可以判断当前字符串对象是否和参数regex指的正则表达式匹配。
常用元字符及其意义 元字符 正则表达式写法 意义 \d “\\d” 0~9的任一数字 \D “\\D” 任一非数字字符 . “.” 任一字符 \56 普通意义的点 \w “\\w” 用于标识符的字符 \W “\\W” 不能用于标识符的字符 \p{Lower} \\p{Lower} 小写字母[a-z] \p{Upper} \\p{Upper} 大写字母[A-Z] \p{ASCII} \\p{ASCII} ASCII字符
常用限定符及其意义 限定符模式 意义 X? X出现0次或1次 X* X出现0次或多次 X+ X出现1次或多次 X{n} X恰好出现n次 X{n,m} X出现n次至m次
例子5.12 String regex="\\w{1,}@\\w{1,}\56\\w{1,}" ; String str1="zhangsan@sina.com"; String str2="li@si@dl.cn"; if(str1.matches(regex)) { System.out.println(str1+"是一个Email地址"); } else { System.out.println(str1+"不是一个Email地址"); if(str2.matches(regex)) { System.out.println(str2+"是一个Email地址"); { System.out.println(str2+"不是一个Email地址");
示例
2018/11/22 谢谢
2018/11/22 Java语言程序设计-使用对象 教师:段鹏飞
如何定义类 定义一个类的步骤 1、定义类名 2、编写类的属性 3、编写类的方法
类将现实世界中的概念模拟到计算机程序中 Java类模板 public class 类名 { //定义属性部分 属性1的类型 属性1; 属性2的类型 属性2; … 属性n的类型 属性n; //定义方法部分 方法1; 方法2; 方法m; }
定义类 编写学生类,输出学生相关信息 学生类 姓名 年龄 班级 爱好 显示学员个人信息
定义类 public class Student { 成员变量 String name; //姓名 int age; //年龄 String classNo; //班级 String hobby; //爱好 //输出信息方法 public void show(){ System.out.println(name + "\n年龄:" + age + "\n就读于:" + classNo + "\n爱好:" + hobby); } 成员变量 成员方法
使用对象的步骤: 创建对象 引用对象成员:使用“.”进行以下操作 如何创建和使用对象 类名 对象名 = new 类名(); 引用类的属性:对象名.属性 引用类的方法:对象名.方法名() Student student = new Student(); student.name = "张浩"; //给name属性赋值 student.show(); //调用show()方法
创建和使用对象 创建“张浩”对象 public class InitialStudent { 创建对象 public static void main(String args[]){ Student student = new Student(); student.name = "张浩"; student.age = 10; student.classNo = "S1班"; student.hobby = "篮球"; student.show(); } 创建对象 给每个属性赋值 调用方法
类的方法定义类的某种行为(或功能) 如何定义类的方法 定义类的方法 方法的名称 方法的定义 方法返回的数据类型 方法的主体 步骤一:定义方法名以及返回值 定义类的方法 public 返回值类型 方法名() { //这里编写方法的主体 } 步骤二:编写方法体
两种情况 方法的返回值 如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型 如果方法没有返回值,返回类型为void 作用: 跳出方法 给出结果 return 表达式; public class Student{ String name = "张三"; public void getName(){ return name; } …… 编译错误 返回类型要匹配
方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果 方法调用 方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果 方法调用:执行方法中包含的语句 对象名.方法名();
小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作 方法调用 按此按钮, 狮子开始跑 电动玩具狮子 属性: 颜色:黄色 行为: 跑 叫 按此按钮, 狮子开始叫 只须按动按钮,不需要知道这个玩具到底如何使lion跑或是跳的 按动按钮就是方法调用 小明过生日,爸爸送他一个电动狮子玩具,编程测试这个狮子能否正常工作
方法调用 public class AutoLion { String color = "黄色"; //颜色 /*跑*/ public void run(){ System.out.println("正在以0.1米/秒的速度向前奔跑。"); } /*叫*/ public String bark(){ String sound = "大声吼叫" ; return sound; /*获得颜色*/ public String getColor(){ return color; /*显示狮子特性*/ public String showLion(){ return "这是一个" + getColor() + "的玩具狮子!"; public class TestLion { public static void main(String[ ] args) { AutoLion lion = new AutoLion(); System.out.println(lion.showLion()); lion.run(); System.out.println(lion.bark()); } 在main()方法中 调用类的方法 提问会输出什么结果? 程序执行时各语句的执行顺序是什么?使用断点调试的方法进行 在类的方法中调用 该类另一个方法
方法之间允许相互调用,不需要知道方法的具体实现,提高了效率 方法调用小结 方法之间允许相互调用,不需要知道方法的具体实现,提高了效率 情 况 举 例 Student类的方法a( )调用Student类的方法b( ),直接调用 public void a( ){ b( ); //调用b( ) } Student类的方法a( )调用Teacher类的方法b( ),先创建类对象,然后使用“.”调用 Teacher t = new Teacher( ); t.b( ); //调用Teacher类的b()
常见错误4-1 public class Student{ public void showInfo(){ return "我是一名学生"; } 在Eclipse环境中讲解常见错误 方法的返回类型为void,方法中不能有return返回值!
常见错误4-2 public class Student{ public double getInfo(){ double weight = 95.5; double height = 1.69; return weight, height; } 方法不能返回多个值!
常见错误4-3 public class Student{ public class Student{ public String showInfo(){ return "我是一名学生"; } public double getInfo(){ double weight = 95.5; double height = 1.69; return weight; public class Student{ public String showInfo(){ return "我是一名学生"; public double getInfo(){ double weight = 95.5; double height = 1.69; return weight; } 多个方法不能相互嵌套定义!
常见错误4-4 public class Student{ int age=20; if(age<20){ System.out.println("年龄不符合入学要求!"); } public void showInfo(){ return "我是一名学生"; 不能在方法外部直接写程序逻辑代码!
为什么要用带参数的方法 工作原理 新鲜梨汁 新鲜苹果汁 新鲜桃汁 输出三种果汁
定义带参数的方法 调用带参数的方法 如何使用带参数的方法3-1 public class Zhazhi{ public String zhazhi ( String fruit ) { String juice = fruit + "汁"; return juice; } 参数列表: (数据类型 参数1,数据类型 参数2…) /*调用zhazhi方法*/ Zhazhi myZhazhi = new Zhazhi(); String myFruit = "苹果"; String myJuice = myZhazhi.zhazhi(myFruit); System.out.println(myJuice); 调用方法,传递的参数要与参数列表一一对应
如何使用带参数的方法3-2 传送给方法的形参列表 public 返回值类型 方法名(形式参数列表){ //方法的主体 } 方法返回值的类型 public class CustomerBiz { String[ ] names = new String[30]; public void addName(String name){ //增加客户姓名 } public void showNames (){ //显示全部客户姓名 没有返回值 一个形式参数
调用带参数的方法 如何使用带参数的方法3-3 实参列表 对象名.方法名(实参1, 实参2,……,实参n) 先实例化对象, public static void main(String[] args) { CustomerBiz st = new CustomerBiz(); Scanner input = new Scanner(System.in); for(int i=0;i<5;i++){ System.out.print(“请输入客户的姓名:"); String newName = input.next(); st.addName(newName); } st.showNames(); 先实例化对象, 再使用方法 实参的类型、数量、顺序 都要与形参一一对应
常见错误4-1 //方法定义 public boolean searchName(int start ,int end ,String name){ //方法体 } //方法调用 String s="开始"; int e=3; String name="张三"; boolean flag=对象名. searchName(s ,e ,name); 形参和实参数据类型不一致!
常见错误4-2 //方法定义 public boolean searchName(int start,int end,String name){ //方法体 } //方法调用 int s=1; int e=3; boolean flag= 对象名.searchName(s,e); 形参和实参数量不一致!
常见错误4-3 //方法定义 public boolean searchName(int start,int end,String name){ //方法体 } //方法调用 int s=1; int e=3; String name="张三"; 对象名.searchName(s,e,name); 调用方法后没有对返回值作任何处理!
巩固练习 1.在以下Java程序类中,语法正确的是()。 A) public int ufTest(int num) int sum=num+100; return sum; } B) public String ufTest(int num) C) public void ufTest(int num) D) public int ufTest(int num)
巩固练习 2.如果编写一个main()方法调用HelloAccp类的show()方法, 其运行结果是()。 public class HelloAccp{ int a=100,b=50; public void avg(){ float c=(a+b)/2; } public void show(){ System.out.println("平均值为:“ + c); A)存在错误,提示:无法解析c B)平均值为:75 C)平均值为:75.0 D)存在错误,提示:无法将数据类型int转换为float
巩固练习 1.在Java中,类Test的源代码如下所示,改程序的编译运行结果是()。 public class Test(){ public int add(int a,intb){ return a+b; } public int length(inta,int b){ return add(a,b)*2; public static void main(String[] args){ Test test=new Test(); System.out.println("结果为:“ + test.length(10,20)); A)第6行出现编译错误,提示无法找到add方法 B)第10行出现编译错误,提示无法将int类型自动转换成String类型 C)输出:结果为:60 D)输出:结果为:null
2018/11/22 谢谢