static关键字的使用

static(静态的)可以用来修饰属性,方法,*代码块(或者初始代码块)、*内部类


  一、static修饰属性(类变量)


  1.由类创建的所有对象,都公用这一个属性
  2.当其中一个对象对子属性进行修改,会导致其他对象对此属性的一个调用。vs实例变量(非static)各个独享拥有一套副本; 
  3.类变量随着类的加载而加载的,而且独一份
  4.静态的变量可以直接通过“类.类变量”的形式来调用
  5.类变量的加载是要早于对象的(加载类时变量就已经加载了)。所以当有对象以后,可以“对象.类变量”来加载类变量和调用,      反过来想通过"类.实例对象"来加载。
  6.类变量存在于静态域中(对于new出来的对象名这些存放在占空间中,对象中存放的内容在堆空间中,但是对于static来说会        单独创建一个静态域空间用于存放static定义的对象的内容)


 二、static修饰方法(类方法)


  1.随着类的加载而加载,在内存中也是独一份
  2.可以直接通过“类.类方法”的方式进行调用
  3.内部可以调用静态的属性或者静态的方法啊,而不能调用非静态的属性和方法,反之,非静态的方法可以调用静态的变量
      》》》》在静态方法中不能使用this和super关键字的
                      》1)对于this来说,this表示当前对象,因为在建造static时还没有创建对象,所以不可以使用this关键字
                      》2)对于super来说,是调用当前对象的父类的属性和方法,所以也不可以使用super关键字
 注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收的也比非静态的晚

三、static的一个应用

1、static的一个应用:在内存中可以实现“累加”的效果,因为静态变量在内存中独一份。

2、实例

package static_lxf;

public class TestAccount {
	public static void main(String[] args) {
		Account a1 = new Account("abd1323",1000.0); 
		Account a2 = new Account("abd1233",2000.0); 
		Account a3 = new Account("abd1623",3000.0); 
		Account a4 = new Account("abd1723",4000.0); 
		System.out.println(a1);
		System.out.println(a2);
		System.out.println(a3);
		System.out.println(a4);
	}

}

class Account {
	private int id;// 账户
	private String password; // 密码
	private double balance; // 余额
	@SuppressWarnings("unused")
	private static double rate = 0.05;// 利率
	@SuppressWarnings("unused")
	private static double minBalance = 1;// 最小账户余额
	private  int init = 1000; // 账户初始化

	public Account() {
		super();
	}
	/*普通属性,对象用完就销毁了,下次还是从初始值开始
	  在定义时会出现如果使用一般的方法定义的时候创建完就会消失,但是使用静态的将不会出现这样的结果
	 * */
	public Account(String password, double balance) {
		//init为static变量,独一份,每调用一次便加1;每次加一的数赋给id
		this.id = init ++ ;     
		this.password = password;
		this.balance = balance;
	}

	@Override
	public String toString() {
		return "Account [id=" + id + ", password=" + password + ", balance=" + balance + "]";
	}

}

四、static内存管理

实例

public class TestSportsMan {
	public static void main(String[] args) {
		SportsMan s1 = new SportsMan("金龙",23);
		SportsMan s2 = new SportsMan("银龙",23);
		s1.setName("花龙");
		s1.setNation("China");
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(SportsMan.nation);
		SportsMan.show1();
	}

}
class SportsMan{
	//实例变量(随着对象的创建才能被加载)
	String name;
	int age;
	//类变量
	static String nation;

	public SportsMan() {
		super();
	}
	
	
	public SportsMan(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}


	public SportsMan(String name, int age, String nation) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getNation() {
		return nation;
	}
	@SuppressWarnings("static-access")
	public void setNation(String nation) {
		this.nation = nation;
	}
	@Override
	public String toString() {
		return "SportsMan [name=" + name + ", age=" + age + ", nation=" + nation + "]";
	}
	
	public void  show() {
		show();
		System.out.println("我是来自中国的运动员");
	}
	public static void show1() {
		System.out.println("nation " + nation);
		System.out.println("我是一名优秀的运动员!");
	}
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值