zoukankan      html  css  js  c++  java
  • Java 方法重载与引用数组类型

    1.方法重载

     1)方法的签名

    • 方法的签名包含方法名和参数列表
    • 一个类中,不可以有两个方法的签名完全相同,即一个类中不能有两个方法的方法名和参数列表都一样。
    public class Test{
        public void print(int x){...};
        public void print(int x){...};            //编译错误,方法签名不能一样
    }
    
    public class Test{
        public void print(int x){...};
        public boolean print(int x){...};      //编译正确  
    }
    

     

    2)方法的重载

      在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载(overload)。

    • 发生在一个类中,方法名相同,参数列表不同
    • 编译器在编译时自动根据方法的签名绑定调用的方法
    public class Sum {
    	public static void main(String[] args) {
    		int x = sum(5,6);
    		double y = sum(5.0,6.0);
    		System.out.println(x);
    		System.out.println(y);
    	}
    	public static int sum(int x,int y){
    		return x+y;
    	}
    	public static double sum(double x,double y){          //方法重载
    		return x+y;
    	}
    }
    
    
    /*
    运行结果:
    11
    11.0
    */
    

     

    3)构造方法

      构造方法是在类中定义的方法,构造方法常用于实现对象成员变量的初始化,不同于其他的方法,构造方法定义有如下两点规则。

    • 构造方法的名称必须与类同名
    • 构造方法没有返回值,但也不能写void

    语法:

    [访问修饰符] 类名(){

      构造方法体;

    }

    3.1)this关键字的使用

      this关键字用在方法体中,用于指向调用该方法的当前对象,简单来说:哪个对象调用方法,this指的就是哪个对象,只能用在方法中,方法中访问成员变量之前默认有个this. 。

    public void drop(){
        this.row ++;    //将调用该方法对象的成员变量row+1,这样书写概念更佳清晰
    }
    
    
    //为了方便起见,在没有歧义的情况下可以省略this:
    public void drop(){
        row ++;
    }
    

      在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样会利于代码的可读性,但此时不能省略this关键字,是用来区分成员变量和参数。

    public Cell(int row,int col){
        this.row = row;   //将参数列表中的row赋值给类中的成员变量cow
        this.col = col;
    }
    

    3.1.1)this的用法

    • this.成员变量:访问成员变量
    • this.方法名():调用方法
    • this():调用构造方法

    3.2)默认的构造方法

    • 任何一个类都必须含有构造方法
    • 如果源程序中没有定义,编译器在编译时将为其添加一个无参的空构造方法,即为默认的构造方法
    • 当定义了构造方法后,Java编译器将不再添加默认的构造方法了
    class Sum{
        int x,y;
        Sum(int x,int y){
            this.x = x;
            this.y = y;
        }
    }
    
    
    public class Test{
        public static void main(String[] args){
            Sum s = new Sum();                //编译错误,当定义了构造方法Sum(int x,inty){..}之后,编译器不再提供默认的构造方法了
        }
    }
    

    3.3)构造方法的重载

      为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),方法的参数不同,称之为构造方法的重载。一个构造方法可以通过this关键字调用另外的一个重载构造方法。

    class Sum{
        int x,y;
        Sum(){
            this.x = 0;
            this.y = 0;
        }
        Sum(int x){
            this.x = x;
            this.y = x;
        }
        Sum(int x,int y){
            this.x = x;
            thix.y = y;
        }
    }
    
    //以上构造方法重载可以通过this.调用构造方法来进行重载,如下所示
    
    class Sum{
        int x,y;
        Sum(int x,int y){
            this.x = x;
            this.y = y;
        }
        Sum(int x){
            this(x,x);
        }
        Sum(){
            this(0,0);
        }
    }
    

      

    2.引用类型数组

    1)数组是对象

    • 在Java中,数组属于引用数据类型
    • 数组对象在堆中存储,数组变量属于引用类型,存储数组对象的地址信息,指向数组对象
    • 数组的元素可以看成数组对象的成员变量(只不过类型全部相同)

    2)引用类型数组的声明

    • 数组元素可以是任何类型,包括引用类型

     

     3)引用类型数组的初始化

    • 引用类型数组的默认初始值都是null
    • 如果希望每一个元素都指向具体的对象,需要针对每一个数组元素进行“new”运算。
    //1.先声明再赋值
    Emp[] e = new Emp[3];
    e[0] = new Emp("Tom",26);
    e[1] = new Emp("Jerry",28);
    e[2] = new Emp("Andy",30);
    
    //2.声明的同时赋值
    Emp[] e = new Emp[]{
        new Emp("Tom",26),
        new Emp("Jerry",28),
        new Emp("Adny",30)  
    };
    

     

    4)数组的类型是基本类型数组

    • 数组的元素可以为任意类型,也包括数组类型
    int[][] arr = new int[3][];  //arr指向一个数组,该数组有三个元素,每个元素都是int类型数组,长度分别是2,1,3。
    arr[0] = new int[2];
    arr[1] = new int[1];
    arr[2] = new int[3];
    
    arr[0][0] = 1;
    arr[0][1] = 2;
    arr[1][0] = 3;
    arr[2][0] = 4;
    arr[2][1] = 5;
    arr[2][2] = 6;
    arr[2][3] = 7;
    

    案例1:遍历数组类型的数组

    public class Test {
    	public static void main(String[] args) {
    		int[][] arr = new int[3][];
    		arr[0] = new int[2];
    		arr[1] = new int[1];
    		arr[2] = new int[3];
    		arr[0][0] = 1;
    		arr[0][1] = 2;
    		arr[1][0] = 3;
    		arr[2][0] = 4;
    		arr[2][1] = 5;
    		arr[2][2] = 6;
    		for(int i=0;i<arr.length;i++){
    			for(int j=0;j<arr[i].length;j++){
    				int x = arr[i][j];
    				System.out.println(x);
    			}
    		}
    	}
    }
    
    /*
    运行结果:
    1
    2
    3
    4
    5
    6
    */
    

     

  • 相关阅读:
    BZOJ4383 : [POI2015]Pustynia
    BZOJ4382 : [POI2015]Podział naszyjnika
    BZOJ4381 : [POI2015]Odwiedziny
    BZOJ4380 : [POI2015]Myjnie
    BZOJ4378 : [POI2015]Logistyka
    BZOJ3424 : Poi2013 Multidrink
    BZOJ4367 : [IOI2014]holiday假期
    BZOJ4369 : [IOI2015]teams分组
    BZOJ4421 : [Cerc2015] Digit Division
    BZOJ1315 : Ural1557Network Attack
  • 原文地址:https://www.cnblogs.com/jmwm/p/6921032.html
Copyright © 2011-2022 走看看