方法与方法重载

方法与方法重载

成员方法

类成员主要包含两部分:成员方法和成员变量。
1.带参数的方法
例:每个人都有不同的工作理念,在Person类中定义工作的方法,并通过参数接收工作理念。
分析:带参数的work()方法可以接受用户输入的内容。创建work()方法时定义的参数叫形式参数,简称形参。调用方法时传入的参数叫做实际参数,简称实参。

public class PersonP{//定义“人”类
	public String name;
	public String gender;
	public int age;
	//无参数的工作方法
	public void work(){
		Systeml.out.println(this.name+"的工作理念:干活挣钱有饭吃");
	}
	//带参数的工作方法
	public void work(String contect){
		System.out.println(this.name+"的工作理念:"+contect);
	}
}

例:在Person类中定义工作的方法,并返回工作理念。
分析:work()方法要求返回工作理念,可以定义其返回类型为String。

public class Person{//定义“人”类
	public String name;
	public String gender;
	public int age;
	//有返回值的无参方法
	public String work(){
		return"实现自身价值和理想!";
	}
}
//以上为Person类定义代码,以下为调用代码
public class PersonTest{
	public static void main(String args[]){
		Person hanbing=new Person();
		hanbing.name="寒冰";
		hanbing.gender="女";
		hanbing.age=22;
		String contect=hanbing.work();//将work()方法的返回值赋值给变量contect
		System.out.println(hanbing.name+"的工作理念:"+contect);
	}
}

2.方法重载
(1)方法重载的定义
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数。
例:定义一个不带参数的work()方法,再定义一个带参数的work()方法,然后观察二者之间的区别。

public class Person{
	public String name;
	public String gender;
	public int age;
	//无参数的工作方法
	public void work(){
	System.out.pringtln(this.name+"的工作理念:干活挣钱有饭吃");
	}
	//带参数的工作方法
	public void work(String contect){
		System.out.println(hanbing.name+"的工作理念:"+contect);
	}
}

(2)方法重载的特点
在同一个类中。
方法名相同。
参数的个数或类型不同。
方法的返回值不能作为判断方法之间是否构成重载的依据。
(3)方法重载的使用
例:调用工作的方法。
当work()方法形成方法重载后,hanbing对象后面使用“.”时,会提示有两个work()方法可供选择,且在弹出的代码智能提示中给出返回类型和参数的信息。

//省略Person类定义的代码
public class PersonTest{
	public static void mian(String args[]){
		Person hanbing=new Person();
		hanbing.name="寒冰";
		hanbing.gender="女";
		hanbing.age=22;
		hanbing.work();//调用无参方法
		hanbing.work("实现自身价值和理想");//调用重载的有参方法
	}
}

(4)方法重载的优点
方法重载其实是对原有方法的一种升级,可根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类调用方法的代码。

成员变量

1.成员变量作用域
类中的属性,也就是直接在类中定义的变量称作成员变量,它定义在方法的外部。
在下面的代码中,Person类中的name、gender既不属于eat()方法,也不属于work()方法,而属于Person类本身的属性,它们是Person类的成员变量。

    public class Person {
        public String name;
        public String gender;
        public int age;
        public void eat(String name) {
            System.out.println(this.name + "邀请" + name + "共进晚餐");
        }
        public void work() {
            int age = 18;
            System.out.println(this.name + age + "岁的工作理念:干活挣钱有饭吃");
        }
        public void work(String contect) {
            System.out.println(this.name + "岁的工作理念:" + contect);
        }
        public void showDetails() {
            System.out.println("姓名是:" + this.name + ",性别为:" + this.gender + ",年龄是:" + this.age);
        }
}

成员变量可以在声明时赋初始值。
2.局部变量作用域
局部变量就是定义在方法中的变量。
分析:
work()方法中的变量age就是局部变量。
提示:虽然成员变量age和局部变量age的名称一样,但表示的却不是同一个变量。一般情况下,局部变量在使用前需要赋值,否则会编译出错。
3.成员变量和局部变量的区别
总的来说,使用成员变量和局部变量时需要注意以下几点。
(1)作用域不同。局部变量的作用与仅限于定义它的方法,在该方法外无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它, 如果访问权限允许,还可以在类外部使用成员变量。
(2)初始值不同。对于成员变量,如果在类定义中没有给它赋予初始值,java会给它一个默认值,基本数据类型的值为0,引用类型的值为null。但是Java不会给局部变量赋予初始值,因此局部变量必须要定义并赋值后再使用。
(3)在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。
(4)局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
4.数据类型
在Java中,变量的类型分为两种:一种是基本数据类型,另一种是引用数据类型。
Java中的引用数据类型包括3种:类、数组和接口。
例:对比基本数据类型和引用数据类型的区别。

public class Person {
   public int age;
}
//以上为Person类定义代码,以下为调用代码
public class Test{
    public static void main(String[] args) {
        //基本数据类型
        int num1=11;
        int num2=num1;
        System.out.println("num1等于:"+num1);
        num2=22;
        System.out.println("把num1赋给num2后,修改num2的值,"+"num1等于:"+num1);
        //引用数据类型
        Person person1=new Person();
        person1.age=11;
        Person person2=person1;
        System.out.println("person1.age等于:"+person1.age);
        person2.age=22;
        System.out.println("把person1对象赋给person2对象后,修改person2的age属性,"
        +"person1.age等于:"+person1.age);
    }
}

分析如下:
int为基本数据类型,当初始化num1并赋值后,将num1赋给num2,然后修改num2的值,运行后发现num1的值没变。
class为引用数据类型,当实例化person1对象并对其属性赋值后,将person1对象赋给person2对象,然后修改person2的值,运行后发现person1的属性值发生了变化。
对于基本数据类型,不同的变量会分配不同的存储空间,并且存储空间种存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。
对于引用数据类型,赋值是把原对象的引用(可理解为内存地址)传递给另一个引用。对数组而言,当用一个数组名直接给另一个数组名赋值时,相当于传递了一个引用,此时,这两个引用指向同一个数组,也就是指向同一内存空间。
同理,基本数据类型和引用数据类型在传递参数时,同样会有这样的区别。

构造方法

Java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法。
1.构造方法的定义
构造方法的主要作用是进行一些数据的初始化。

[访问修饰符]方法名([参数列表]){
	//省略方法体的代码
}

构造方法没有返回值。
默认构造方法没有参数,因此参数列表可选。
构造方法的方法名与类名相同。
例:为Person类定义一个构造方法。

publid class Person{
	public string name;
		public Person(){
			this.name="寒冰";
	}
}

该例所示的Person的构造方法的作用是当有Person类的对象创建时,将这个对象的name属性设置为“寒冰”。
当开发人员没有编写自定义构造方法时,Java会自动添加默认构造方法,默认构造方法没有参数。
如果自定义了一个或多个构造方法,则Java不会自动添加默认的构造方法。
2.构造方法重载
例:使用构造方法重载和一般方法重载等技术实现信息的输出。

public class Person {
    public String name;
    public String gender;
    public int age;

    public Person() {
        this.name = "寒冰";//无参构造法
    }

    public Person(String name) {
        this.name = name;//带参构造法
    }

    public void work() {
        System.out.println(this.name + "的工作理念:干活挣钱有饭吃");
    }

    public void work(String contect) {
        int age = this.age;
        System.out.println(this.name + age + "岁的工作理念:干活挣钱有饭吃");
    }
}
//以上为Person类定义代码,以下为调用代码
public static void main(String[] args) {
    Person guset =new Person("寒冰");//选择Person的带参构造方法创建对象
    System.out.println("大家好,欢迎"+guset.name+"来到地球村");
    Scanner input=new Scanner(System.in);
    System.out.println("请选择您的性别:(1、男 2、女)");
    switch (input.nextInt()){
        case 1:
            guset.gender="男";
            break;
        case 2:
            guset.gender="女";
            break;
        default:
            System.out.println("操作错误");
            return;
    }
    System.out.println("请输入您的年龄:");
    guset.age=input.nextInt();
    guset.work();//调用无参work()方法
    System.out.println("请输入您的工作理念:");
    String contect=input.next();
    guset.work(contect);//调用有参work()方法
}

this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量,指向调用这个方法的对象。
this使用举例如下:
(1)使用this调用成员变量,解决成员变量和局部变量的同名冲突。

public void setName(String name){
	this.name=name;//成员变量和局部变量同名,必须使用this
}

(2)使用this调用成员方法。

public void play(int n){
	health = health-n;
	this.print();//this可以省略,直接调用print()方法
}

(2)使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。

public Penguin(String name,String sex){
	this.name=name;
	this.sex=sex;
}
public Penguin(String name,int health,int love,String sex){
	this(name,sex);
	this.health=health;
	this.love=love;
}

因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值