Java學習第二十五天<方法過載><可變引數><作用域基本使用>
阿新 • • 發佈:2022-03-13
-
方法名必須相同
-
形參列表(型別,個數,順序至少一樣)必須不同,否則重定義
-
返回型別無要求
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);//也可傳別的類的物件來使用屬性
}
}