学习笔记之JavaSE(5)--Java基础语法4

时间:2023-02-16 07:44:49
一、方法

方法是组合在一起来执行操作语句的集合,方法的语法格式为:修饰符+返回值类型+方法名+参数列表+方法体。关于方法我总结了如下要点:

  • 修饰符包括权限修饰符和其它修饰符。权限修饰符包括public、protected、private和default;其它修饰符包括abstract,final,static,native,synchronized,transient,volatile等
  • 返回值类型可以为void和任何类型,需要在方法体里面通过return关键字返回具体的值。
  • 如果返回值类型为void,可以省略return语句
  • 如果返回值类型不是void,必须确定每一条代码路径都将返回该类型所对应的值
  • return两个功能:返回与返回值类型对应的值;强制结束方法
  • 制定方法名参见标识符的命名规范
  • 参数列表中的参数为形参,可以看做该方法的局部变量
  • 局部变量只能使用final修饰符修饰,否则编译错误
  • 参数的传递是将实参的值拷贝并赋给形参
  • 如果参数类型是基本类型,那么改变形参不会影响实参
  • 如果参数类型是引用类型,相当于实参拷贝了一份引用赋给形参,相当于“一个电视有两个遥控器”,通过形参改变对象,实参所引用的对象也会改变(除了String
示例程序:
public class Test16 {

public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入整数x:");
int x=s.nextInt();
System.out.print("请输入整数y:");
int y=s.nextInt();
s.close();
Test16 t=new Test16();
System.out.println("x+y="+t.add(x, y));
System.out.println("x-y="+t.minus(x, y));
System.out.println("x*y="+t.multiplyBy(x, y));
System.out.println("x/y="+t.divideBy(x, y));
System.out.println(t.getLevel(99));
}

public int add(int a,int b){
return a+b;
}

public int minus(int a,int b){
return a-b;
}

public int multiplyBy(int a,int b){
return a*b;
}

public double divideBy(int a,int b){
if(b!=0){
return (double)(a/b);
}else{
return 0;
}
}

//如果返回值类型不是void,必须确定每一条代码路径都将返回该类型所对应的值
public String getLevel(int score){
if(score>=0&&score<60){
return "您的成绩为不及格";
}else if(score>=60&&score<70){
return "您的成绩为D";
}else if(score>=70&&score<80){
return "您的成绩为C";
}else if(score>=80&&score<90){
return "您的成绩为B";
}else if(score>=90&&score<=100){
return "您的成绩为A";
}else{
return "您的成绩为不及格";
}
}
}

二、方法重载

方法重载是指在一个类中定义多个同名方法,但要求每个方法的参数列表必须不同。调用重载方法时,编译器通过检查调用的方法的参数列表选择一个合适的方法。方法重载的知识点:
  • 方法重载和返回值类型、抛出异常类型和权限修饰符无关,不过可以任意改变它们
  • 必须改变参数列表的个数、种类、顺序中至少一种
  • 方法重载最常用的是构造方法重载
示例程序:
public class Test17 {
private String name;

//构造方法的方法重载
public Test17(){}
public Test17(String name){
this.setName(name);
System.out.println(name+" has been constructed!");
}

public static void main(String[] args) {
Test17 t=new Test17("k");
System.out.println(t.add(1, 1.1));//使用原始方法
System.out.println(t.add(1, 1.1, 1));//使用重载版一
System.out.println(t.add(1.1 , 1.1));//使用重载版二
System.out.println(t.add(1.1, 1));//使用重载版三
}

//方法重载
public double add(int a,double b){
return a+b;
}

public double add(int a,double b,int c){//参数列表的个数不同
return add(a,b)+c;
}

public int add(double a,double b){//参数列表的类型不同
return (int)(a+b);
}

protected double add(double a,int b){//参数列表的顺序不同
return a+b;
}

//私有变量的getter与setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

面试题:
1.方法重载和方法覆盖区别?
答:方法重载实现了编译时多态,方法覆盖实现了运行时多态。方法重载要求一同一改,方法名必须相同,参数列表必须不同(个数,种类,顺序)。
方法覆盖要求两同两小一大,方法名和参数列表必须相同,抛出异常和返回值类型小于等于父类(返回值是基本类型必须相同),访问权限大于等于父类。