java基础的学习笔记-方法调用机制,可变参数,构造器,this关键字

方法调用机制原理在这里插入图片描述

方法重载(Overload)

java中允许同一个类中,多个同名方法存在,但要求形参列表不一致

注意事项和使用细节

  1. 方法名:必须相同

  2. 形参列表必须不同(形参类型或个数或顺序,至少有一个不同,参数名无要求)

  3. 返回类型无要求

可变参数

public int sum(int... nums)

int… 表示可以接收的是可变参数 类型是int 即可以接收多个int

使用可变参数时, 可以当作数组来使用 即nums可以当作数组

细节

  1. 可变参数的实参可以为数组
  2. 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
  3. 一个形参列表中只能有一个可变参数

例子

public class VarParameterExercise {
    
    
    public static void main(String[] args) {
    
    
        HspMethod hspMethod = new HspMethod();
        System.out.println(hspMethod.showScore("zzn", 90, 100));
    }
}

class HspMethod {
    
    
    public String showScore(String name, double... scores) {
    
    

        int res = 0;
        for (int i = 0; i < scores.length; i++) {
    
    
            res += scores[i];
        }
        return name +"的"+ scores.length + "门课成绩总分=" + res;
    }
}

作用域

  1. 在java编程中,主要的变量就是属性(成员变量)和局部变量

  2. 我们说的局部变量一般是指在成员方法中定义的变量

  3. java中作用域的分类

    全局变量:也就是属性,作用域在整个类体

    局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中{ … }

  4. 全局变量(属性)可以不赋值,因为有默认值,可以直接使用 tips:属性的默认值为int short byte long为0 double float 为0.0 char为 \u0000 boolean为false String为null

    局部变量必须赋值后,才能使用

    注意事项和使用细节

  5. 属性和局部变量可以重名,访问时遵循就近访问原则

  6. 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名

  7. 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁,即在一次方法调用过程中。

  8. 作用域范围不同

    全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)

    局部变量:只能在本类中对应的方法中使用

  9. 修饰符不同

    全局变量/属性可以加修饰符

    局部变量:不可以加修饰符

构造方法/构造器

构造方法又叫构造器,是类的一种特殊方法,它的主要作用是完成对新对象的初始化。意义在于:创建对象时,有多个初始化版本可供选择

基本语法:

[修饰符] 方法名 (形参列表){

​ 方法体;

}

说明

  1. 构造器的修饰符可以默认
  2. 构造器没有返回值
  3. 方法名和类名字必须一样
  4. 参数列表 和 成员方法一样的规则
  5. 构造器的调用,由系统完成

举例:

public class Constructor01 {
    
     

	//编写一个main方法
	public static void main(String[] args) {
    
    
		//当我们new 一个对象时,直接通过构造器指定名字和年龄
		Person p1 = new Person("smith", 80);
		System.out.println("p1的信息如下");
		System.out.println("p1对象name=" + p1.name);//smith
		System.out.println("p1对象age=" + p1.age);//80
	}
}

//在创建人类的对象时,就直接指定这个对象的年龄和姓名
//
class Person {
    
    
	String name;
	int age;
	//构造器
	//老韩解读
	//1. 构造器没有返回值, 也不能写void
	//2. 构造器的名称和类Person一样
	//3. (String pName, int pAge) 是构造器形参列表,规则和成员方法一样
	public  Person(String pName, int pAge) {
    
    //构造器
		System.out.println("构造器被调用~~ 完成对象的属性初始化");
		name = pName;
		age = pAge;
	}
}

注意事项和使用细节

  1. 一个类可以定义多个不同的构造器,即构造器重载(可以多个形参构造,也可以一个或者0个)
  2. 构造器和类名要相同
  3. 构造器没有返回值
  4. 构造器是完成对象的初始化,并不是创建对象
  5. 在创建对象时,系统自动的调用该类的构造方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k75IDkaG-1625566708358)(C:\Users\25394\AppData\Roaming\Typora\typora-user-images\image-20210706121611716.png)]

初始化类时会开辟一个对象

p是对象的引用或者说是对象名,其实不是对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DyumjWAi-1625566708362)(C:\Users\25394\AppData\Roaming\Typora\typora-user-images\image-20210706124405484.png)]

this关键字

java虚拟机会给每个对象分配this,this代表当前对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0SBGhWh-1625566708364)(C:\Users\25394\AppData\Roaming\Typora\typora-user-images\image-20210706132454881.png)]

this小结:简单的说,哪个对象调用,this就代表哪个对象

代码:

public class This01 {
    
     

	//编写一个main方法
	public static void main(String[] args) {
    
    

		Dog dog1 = new Dog("大壮", 3);
		System.out.println("dog1的hashcode=" + dog1.hashCode());
		//dog1调用了 info()方法
		dog1.info(); 

		System.out.println("============");
		Dog dog2 = new Dog("大黄", 2);
		System.out.println("dog2的hashcode=" + dog2.hashCode());
		dog2.info();
	}
}

class Dog{
    
     //类

	String name;
	int age;
	// public Dog(String dName, int  dAge){//构造器
	// 	name = dName;
	// 	age = dAge;
	// }
	//如果我们构造器的形参,能够直接写成属性名,就更好了
	//但是出现了一个问题,根据变量的作用域原则
	//构造器的name 是局部变量,而不是属性
	//构造器的age  是局部变量,而不是属性
	//==> 引出this关键字来解决
	public Dog(String name, int  age){
    
    //构造器
		//this.name 就是当前对象的属性name
		this.name = name;
		//this.age 就是当前对象的属性age
		this.age = age;
		System.out.println("this.hashCode=" + this.hashCode());
	}

	public void info(){
    
    //成员方法,输出属性x信息
		System.out.println("this.hashCode=" + this.hashCode());//这里的this就是谁调用info方法的那个对象
		System.out.println(name + "\t" + age + "\t");
	}
}

注意事项和使用细节

  1. this关键字 可以用来访问本类的属性,方法,构造器

  2. this用于区分当前类的属性和局部变量

  3. 访问成员方法的语法,this.方法名(参数列表)

  4. 访问构造器语法:this(参数列表);注意只能在构造器中使用

    如果访问构造器,必须放在第一条语句

  5. this不能在类定义的外部使用,只能在类定义的方法中使用

猜你喜欢

转载自blog.csdn.net/weixin_44199207/article/details/118526660