static关键字

发布时间:2024年01月23日
一、使用static关键字修饰的方法的调用方式

调用方式1:如果是在当前类的static方法中,则直接调用

调用方式2:如果是在其他类的static方法中,则需要通过类名.方法()调用

备注1:普通方法(设有使用static关量字修饰的方法)允许调用static修饰的方法

备注2:static修饰的方法(静态方法)不允许调用普通方法

?

package com.xn.Sat;

//static关键字
//
public class Sat03 {
	public static void main(String[] args) {
		dosth();
		//Test2.dosth;
	}

	public static void dosth(){
		//dowork();
	}
	public void dowork() {
		dosth();
	}
}
二、静态方法和普通方法之间的调用关系总结:

静态方法“允许”调用静态方法

普通方法“允许”调用静态方法其它普通方法

?

package com.xn.Sat;
//静态方法和普通方法之间的调用关系总结:
//静态方法“允许”调用静态方法
//普通方法“允许”调用静态方法其它普通方法

public class Sat04 {
	public static void main(String[] args) {
		//调用静态方法
		Father.dosth();
		
		//调用普通方法(实例方法)
		Father f=new Father();//创建对象(实例)
		f.dowork();//调用普通方法
		//f.dosth();调用静态方法(不推荐)
	}
}
class Father{
	//静态方法
	public static void dosth() {
		//静态方法中不允许调用普通方法
		//this.dowork();
	}
	//普通方法(实例方法)
	public void dowork() {
		//普通方法中允许调用静态方法
		dosth();
	}
}
三、static关键字修饰的静态代码块的执行顺序

静态代码块(先父类、再子类)=>父类构造代码块=>父类构造方法=>子类构造代码块=>子类构造方法

?

package com.xn.Sat;
//static关键字修饰的静态代码块
//执行顺序
//静态代码块(先父类、再子类)=>父类构造代码块=>父类构造方法=>子类构造代码块=>子类构造方法

public class Sat05 {
	//主函数所在的类必须被加载
	static {
		System.out.println("Sat05的静态代码块");
	}
	public static void main(String[] args) {
//		Person p1=new Person();
//		Person p2=new Person();
		User u1=new User();
		User u2=new User();
	}
}
//父类
class Person{
	//静态代码块:类被"加载"时,静态代码块自动执行
	static {
		System.out.println("Person父类静态代码块1执行ing....");
	}
	static {
		System.out.println("Person父类静态代码块2执行ing....");
	}
	
	//构造代码块:每次调用构造方法前,构造代码块自动执行
	{
		System.out.println("Person父类构造代码块执行ing....");
	}
	public Person(){
		System.out.println("Person父类无参构造方法执行ing....");
	}
	
}
//子类
class User extends Person{
	static {
		System.out.println("User子类静态代码块1执行ing....");
	}
	
	{
		System.out.println("User子类构造代码块执行ing....");
	}
	
	public User(){
		System.out.println("User子类无参构造方法执行ing....");
	}
}

eg1

package com.xn.Sat;
//static 关键字修饰的静态变量
public class Sat06 {
	public static void main(String[] args) {
		//普通成员变量:通过实例对象
		Counter v1=new Counter();
		v1.value++;
		
		Counter v2=new Counter();
		v2.value++;
		v2.value++;
		v2.value++;
		System.out.println("v1的value="+v1.value);
		System.out.println("v2的value="+v2.value);
		//静态成员变量:可以通过实例对象或类名
		Counter c1=new Counter();
		Counter c2=new Counter();
		c1.count++;
		c2.count++;
		c2.count++;
		c2.count++;
		System.out.println("c1的count="+c1.count);
		System.out.println("c2的count="+c2.count);
	}
}

class Counter{
	//成员变量
	int value=0;//普通成员比那辆(通过实例)
	static int count=0;//静态成员变量(通过实例或类名)
}

eg2

package com.xn.Sat;

public class Sat07 {
	public static void main(String[] args) {
		
		Coupon coupon1=new Coupon();
		Coupon coupon2=new Coupon();
		Coupon coupon3=new Coupon();
		
		System.out.println("创建Coupon优惠券对象的个数为:"+Coupon.count);
		System.out.println("优惠券1的编号为:"+coupon1);//预期输出1001
		System.out.println("优惠券2的编号为:"+coupon2);//预期输出1002
		System.out.println("优惠券3的编号为:"+coupon3);//预期输出1003
	}
}
//优惠券
class Coupon{
	private int id;//优惠券编号
	private static int idval=1000;
	public  static int count=0;
	
	
	public Coupon(){
		id=++idval;
		count++;
	}
	@Override
	public String toString() {
		return String.valueOf(id);
	}
	
}

文章来源:https://blog.csdn.net/m0_74002833/article/details/135719275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。