函数名前加static与不加static的区别

引入

在定义函数时,前面有时会有static关键字,有时却没有,static关键字在定义函数时是有它的作用的。一般情况我们很少去给自定义方法用static修饰,防止变量或方法被滥用。


static修饰特点

  1. 加了static关键字的方法,不可调用该类中的非静态成员和非静态方法;顺便在这里提一句非静态成员变量和非静态方法,非静态成员方法可以调用非静态成员和静态成员,即非静态成员方法无限制(这里是指同一类下);
  2. 加了static关键字后,不需要生成示例对象就可以直接调用成员,也就是此时这个静态成员(不论是变量还是方法)被该类创建的对象共享
  3. 加了static关键字的函数中,不能使用super关键字对父类中的成员进行调用(与第一点对应);

代码示例

代码1(对应第1点)

public class Student {//定义的Student类
	public String name; //非静态成员变量
	public static int age; //静态成员变量
	public void show1() {
		
	}//非静态成员方法
	public void show2() {
		name = "Mye";
		age = 20;
		show1();
		show3();
	}//非静态成员方法调用非静态成员和静态成员
	public static void show3() {
		
	}//静态成员方法
	public static void show4() {
//		name = "Mye"; 无法调用,注释掉
		age = 20; 
//		show1(); 无法调用,注释掉
//		show2(); 无法调用,注释掉
		show3();
	}//静态成员方法调用静态成员变量和静态成员方法
}

代码2(对应第2点)

学生类

public class Student {  //学生类 包含姓名 年龄 学校
	public String name;
	public int age;
	public static String university; //学校是static修饰
//	static使该成员变量让所有对象共享
//	赋值方式发生改变 Student.university = "";
//	可以通过类名调用、对象名调用
	public void show() {
		System.out.println(name+" "+age+" "+university);
	}
}

main方法

public static void main(String[] args) {
		Student s1 = new Student();
		Student.university = "AYGXY";
		s1.name = "LQX";
		s1.age = 30;
		s1.show();
		Student s2 = new Student();
		s2.name = "FQY";
		s2.age = 33;
//		s2.university = "AYGXY";
		s2.show();
	}

输出结果

LQX 30 AYGXY
FQY 33 AYGXY

代码3(对应第3点)

父类

public class Fu {
	public int age =40;
	public Fu() {
		System.out.println("父类的构造方法!");
	}
}

子类(包含了main方法)

public class Zi extends Fu{
	public int age =20;
	public static int length;
//	定义一个静态成员用来测试
	public static void test01() {
		length=10;
//		可以使用静态成员length
//		System.out.println(super.age);//此处会报错 我们注释掉
//		静态函数不能使用super关键字调用父类成员
	}
	public void test02() {
		System.out.println(super.age);
//		非静态函数中可以使用super关键字调用父类成员
	}
	public static void main(String[] args) {
		Zi z = new Zi();
//		z.test01(); 此处会报错 我们注释掉
		z.test02();
	}
}

总结

 static一般多用于类的静态成员变量或方法的共享,能够在不创建类的对象的条件下,达到引用变量或者方法的目的;
 同一类下,static修饰的方法内,只能使用静态变量或方法;不同类下,如果通过静态方法使用非静态的就必须实例化对象,再通过对象进行访问,比如我们常见的在main方法中就是使用这种做法;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值