方法重载
-
方法名必须相同
-
形参列表(类型,个数,顺序至少一样)必须不同,否则重定义
-
返回类型无要求
package chapter06.D6方法重载; public class OverLoadExercise { public static void main(String[] args) { Methods method = new Methods(); method.m(10);//100 method.m(10,20); method.m("征途"); } } class Methods{ public void m (int n){ System.out.println("平方="+(n*n)); } public void m (int n1,int n2){ System.out.println("相乘="+(n1*n2)); } public void m (String str){ System.out.println("传入的str="+str); } }
package chapter06.D6方法重载; public class OverloadExercise2 { public static void main(String[] args) { Methods2 methods2 = new Methods2(); System.out.println(methods2.max(10,24)); System.out.println(methods2.max(10,24,21.4));//自动转化 } } class Methods2{ public int max(int n1,int n2){ return n1>n2?n1:n2; } public double max(double n1,double n2){ return n1>n2?n1:n2; } public double max(double n1,double n2,double n3){ double max1=n1>n2?n1:n2; return max1>n3?max1:n3; } }
可变参数
package chapter06.D7可变参数; public class VarParameter { public static void main(String[] args) { Method m = new Method(); System.out.println(m.sum(1,5,6)); } } class Method{ public int sum(int...nums){//可变参数,可接受多个int nums当做数组来使用 /* System.out.println("接收的参数个数="+ nums.length); return 25;//return几都行 */ int res=0; for (int i = 0; i < nums.length; i++) { res+=nums[i]; } return res; } }
package chapter06.D7可变参数; public class VarParameterDetail { public static void main(String[] args) { int[]arr={1,2,3}; T t1 = new T(); t1.f1(arr); } } class T{ public void f1(int...nums){//可变参数本质就是数组 System.out.println("长度="+ nums.length); } public void f2(String str,double...nums){//可变参数可以和普通类型参数一起放在形参列表,但可变参数要在后,并只能出现一次 System.out.println("长度="+ nums.length); } }
package chapter06.D7可变参数; public class VarParameterExercise { public static void main(String[] args) { Method2 hm = new Method2(); System.out.println(hm.showScore("milan",90.1,80.0)); System.out.println(hm.showScore("terry",90.1,80.0,60.2,75.6)); } } class Method2{ public String showScore(String name,double...scores){ double totalScore=0; for (int i = 0; i <scores.length ; i++) { totalScore +=scores[i]; } return name+" 有 "+scores.length+"门课的成绩总分为="+totalScore; } }
作用域基本使用
package chapter06.D8作用域基本使用; public class VarScope { public static void main(String[] args) { Cat cat = new Cat(); cat.cry(); cat.eat(); } } class Cat{ int age=10;//全局变量(属性,可赋值,不赋值为默认值),作用域为Cat整个类体 int salary; { int num=100;//局部变量,无默认值,作用在代码块中 } public void cry(){ int n=10 ;//局部变量,必须赋值,作用域在cry方法中 String name="jack";//局部变量 System.out.println("在cry中使用属性 age="+age); System.out.println("cry局部变量 n="+n); } public void eat(){ System.out.println("在eat中使用属性 age="+age);//name,num就不能用 System.out.println("在eat中使用属性 salary="+salary); } }
package chapter06.D8作用域基本使用; public class VarScopeDetails { public static void main(String[] args) { Person p1 = new Person(); p1.say();//当执行say方法时 say方法的局部变量如name会创建,say执行完后name局部变量就销毁,但属性(全局变量)还可用 System.out.println(p1.name); T t = new T(); t.test(); t.test2(p1); } } class Person{ public int age=20;//属性可以加修饰符 protected private String name="jack"; public void say(){ //细节 属性和局部变量可以重名,访问时遵循就近原则 String name = "king";//局部变量不能加修饰符 System.out.println("say()name="+name);//king } public void hi(){ String address="北京"; String name="上海"; } } class T{ public void test(){ Person p1 = new Person(); System.out.println(p1.name);//new别的类以后可以使用别的类属性 } public void test2(Person p){ System.out.println(p.name);//也可传别的类的对象来使用属性 } }