今天学习了Java中方法的概念,并针对于前一天的练习题加强了练习,优化了一些程序,减少了其循环次数
方法的概念
引用也叫句柄,类似于指针,但是和指针是不同的。指针是一个存放地址的变量,使程序员可以灵活的访问内存,由于可以对指针进行任意的运算操作,所以给程序带来了安全隐患和意想不到的结果。引用继承了指针节省内存的优点,但是限制了对地址的操作,它是安全的。Java中所有的变量都是一个引用,java中没有指针的概念方法可以理解为一个命名的代码块,通过名称就可以重复使用这段代码,而不需要反复书写,可以达到代码重用的目的方法可以有参数,也可以没有参数;方法可以有返回值,也可以没有返回值。
定义一个方法:
【public static】修饰符 返回值类型【int】 方法名称【add】(参数类型参数列表) {
方法体
return返回值;
}
对于定义格式的解释:
修饰符:现阶段固定为public static两个关键字
返回值类型:方法最终产生的结果数据是什么类型,这个类型必须和return的返回值类型匹配。如果并没有产生结果数据,例如仅仅只是进行一个输出显示,则返回类型为void
public static void inputNumber(int kk) {
if (kk > 3)
return; //因为返回类型为void,所以return后面不能跟任何内容.作
用类似于break
System.out.println(kk);
}
public static void main(String[] args) {
int num1 = inputNumber(123); //语法报错,因为方法的返回值为
void,不是int类型,所以报错.只能修改为inputNumber(123);
System.out.println(num1);
}
方法名称:自定义的名称,命名规则和变量一样。一般建议使用动词,首字母小写,大写字母分词
参数:是指进入方法中的数据,有了这些数据,方法才能执行逻辑。这些参数在方法内部作为一种
占位符的形式出现
例如方法定义public static long add(int begin, int end)表示调用这个方法时必须传入2个整型
的数据,否则这个方法没办法执行
参数类型:进入方法的数据是什么类型。用于限制调用方法时传入的具体值的类型,不允许类型不匹配
参数名称:进入方法的数据对应的变量名称。这个名称实际没有任何价值,仅仅只是充当占位符的
作用。但是需要注意这里相当于有一个这个名称的临时变量的存在,则不能再定义同名的临时
注意:临时变量不允许重复定义—java强类型编程语言
方法体:方法内部执行的若干行代码
return:结束方法的执行,并且将返回值返还给调用处。
return 123; 表示返回结果为123,这个值将返回到调用处。当然要求返回值的类型和声明的
返回值类型一致
return; 表示从这里结束方法的执行,并返回调用处,但是没有具体的返回值。这里要求声明
时的返回值类型为void
返回值:方法最终产生的结果数据。 return res;返回值:是指从方法中出来的数据,也就是方法执 行之后的最终结果数据。 注意:
- 返会回值必须和返回值类型对应参数如果有多个,需要使用逗号分隔。但是返回值只能是一个【对象或者数据】参数如果没有,小括号则可以留空,但是小括号不能省略。
- 多个方法的定义先后顺序无所谓。不能在一个方法内部定义方法,同时方法必须定义在class内部 。
- 方法定义之后,没有调用就不会执行;要想执行,一定要调用它。
- 在方法中的特殊方法main是代码的执行起始点,但是注意方法的签名不能做任何修改,否不执行
String中的方法
String str = "a中s文sd";
for (int i = 0; i < str.length(); i++) // String中提供的length():int方法用于
获取字串中的字符个数,不区分中英文
System.out.println(str.charAt(i));// String中提供的charAt(int):char方法用于获
取指定位置的字符
String str = "asdflaskdf";
// String中提供的方法indexOf用于从左向右查找子字符串的起始位置,如果查找则返回起始位置
下标,否则返回-1
System.out.println(str.indexOf("dff"));
// String中提供的方法indexOf用于从右向左查找子字符串的起始位置,如果查找则返回起始位置
下标,否则返回-1
System.out.println(str.lastIndexOf("df"));
//substring从指定位置开始到字串结尾为止所构成的子字符串
System.out.println(str.substring(2));
//从指定位置开始到指定位置为止所构成的子字符串
System.out.println(str.substring(2, 6));
修改后的判定两个数的最大公约数和最小公倍数;
package test0105;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k1 = input(sc);
int k2 = input(sc);
System.out.println("您输入的数为:"+k1+" "+k2);
int min = Math.min(k1, k2);
for (int i = min; i >= 1; i--) {
if (k1 % i == 0 && k2 % i == 0) {
System.out.println(k1 + "和" + k2 + "的最大共约数为:" + i);
break;
}
}
int begin = Math.max(k2, k1);
int end=k1*k2;
for (int i = begin;i<=end;i++) {
if(i%k1==0&&i%k2==0) {
System.out.println(k1+"和"+k2+"的最小共倍数为:"+i);
break;
}
}
}
public static void output() {
}
public static void compute() {
}
public static int input(Scanner sc) {
int k1;
while(true) {
System.out.println("请输入一个正整数");
String ss = sc.nextLine();
try {
k1 = Integer.parseInt(ss);
if(k1>0)
break;
System.out.println("不合法的数据");
} catch (Exception e) {
System.out.println("您输入的格式错误!");
}
}
return k1;
}
}