Java教程

[JAVA]方法的重载、this、static关键字和静态初始化块

本文主要是介绍[JAVA]方法的重载、this、static关键字和静态初始化块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

方法的重载(overloading)

  • 同一个类中的不同方法可以有相同的方法名,但参数列表不同,方法内容也可以不同,就叫做方法的重载
  • 参数的类型、参数的数量、参数的顺序只有任有一个不同,就说明参数列表不同。参数列表也叫做参数签名
  • 方法的重载可以减少方法的种类,可以使同一方法(方法名)在不同的场景下发挥不同的作用
  • 方法重载的规则
    • 方法名相同
    • 参数列表不同
    • 返回值类型可以相同也可以不相同
    • 若仅有返回值类型不同则不能称为方法的重载

例如:

class Hello{
	public Hello() {

	}
	public Hello(String s){
		System.out.println(s)
	}
}

方法中的可变参数
意为在该方法中,参数的数量是可变的(可为 0),不管有多少个参数都可以成功调用该方法,但参数的类型不可变,在定义中是什么类型则增加的参数就必须是什么类型,用**参数类型+…**使用
可变参数实质上是定义了一个数组用来存放参数
例如:

class Hello{
	public void func(String... s){
		System.out.println(s.length);
	}
}

注:可变参数必须位于参数列表的最后,故一个方法只能有一个可变参数


可变参数对方法重载的影响
在方法的重载中,程序在满足参数列表的同时会优先选择没有可变参数的方法
例如:

class Hello{
	public static void main(String[] args){
	helloworld("张三");  //选择只有一个参数的方法(1
	helloworld("张三","李四");  //选择正好两个参数的方法(2
	helloworld("张三","李四","王五");  //选择有可变参数的方法(3
	}

	public static void helloworld(String s){
		System.out.println("hello " + s);
	}

	public static void helloworld(String s1, String s2){
		System.out.println("hello " + s1 + s2);
	}

	public static void helloworld(String... s){
		System.out.println("hello ");
	}
}

this关键字

  • 在普通方法中,this指向当前调用该方法的对象
  • 在构造方法中,this指向当前正要初始化的对象
  • 在构造方法中,通过this可以调用该类的其他构造器,用this(参数列表)调用 (此时该语句必须位于方法体中的第一句
  • this不能用于static方法

例如:

class Hello{
	String name;
	int num;

	public void func(){
		System.out.println(this.name + this.num);  //此时this指向调用该方法的对象
	}

	public Hello(){
	}

	public Hello(String name){
		this.name = name;  //此时this指向当前正要初始化的对象
	}

	public Hello(String name, int num){
		this(name);  //在构造器中通过this调用其他重载的构造函数,注意,该语句必须写在第一句
		this.num = num;
	}

static关键字

static属性:被所有对象共享,先于对象存在
static方法:先于对象存在

static属性

  • 此时该属性被称为静态变量
  • 静态变量隶属于类而不是对象,但对象仍可以访问(不推荐)
  • 静态变量在类被载入时被初始化,一同编译成字节码文件加载至方法区

static方法

  • 此时该方法被称为静态方法
  • 静态方法隶属于类而不是对象,但对象仍可以调用(不推荐)
  • 静态方法在类被在载入时一同编译成字节码文件加载至方法区
  • 在静态方法中不可以访问非静态的成员变量,因为在调用该方法时不会将对象的引用传递给它
  • 在静态方法中不可以使用this关键字,因为this永远指向对象而不指向类

例如:

class Hello{
	public static void main(String[] args){
		Student student = new Student("张三");
		System.out.println(Student.count);  //通过 类名.变量名 直接访问静态变量
		System.out.println(student.count);  //可以用对象访问静态变量,但不推荐
		Student.sayHello();  //通过 类名.方法名 直接调用静态方法
		Student.sayHello();  //可以用对象调用静态方法,但不推荐
	}

	class Student{
		static int count;
		String name;
		public Student(String name){
		this.name = name;
		}
		static void sayHello(){
		System.out.println("Hello");
		}  
	}
}

代码块与静态代码块

代码块

  • 代码块在实例化对象,调用构造方法之前执行
  • 若有多个代码块,则按顺序全部执行
  • 可以利用代码块对对象进行初始化,避免重载构造方法时的重复代码

静态代码块

  • 静态代码块在类被加载时执行
  • 因为类只被加载一次,所以不管利用该类生成多少个对象,静态代码块都只执行一次
  • 若有多个静态代码块,则按顺序全部执行
  • 经常用来初始化类
  • 静态代码块中不能访问非静态成员变量
  • 从祖先类(Object)向下依次执行静态代码块,直到本类的静态代码块为止
这篇关于[JAVA]方法的重载、this、static关键字和静态初始化块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!