JAVA中static关键字使用

使用static关键字声明属性

在程序中使用static声明属性称作全局属性,也叫做静态属性。
使用static关键字声明的属性,在理解上可以将其看做一个公共属性,比如一个类Person,在实例化这个对象时,生成的对象中有一个属性country,而对于所有的实例的值都为China,那么我们可以将其定义为是static,这样我们就有了一个属于所有对象的属性,而且在生成很多对象之后,我们需要将这些对象的country属性修改为USA,如果是在以前我们需要对这些对象的属性一一修改,那么我们需要进行很多的操作才能完成这一个修改,我们在使用了static之后,我们想要修改它,只需要将这个属性修改掉就可以将所有对象的该属性修改,(这是由于它是属于大家的、共享的)。
在java中常用的内存区域:

  1. 栈内存空间,保存所有对象的名称(其实就是保存所有引用堆内存的地址)
  2. 堆内存空间,保存每个对象的具体属性内容。
  3. 全局数据区,保存static类型的属性。
  4. 全局代码区,保存所有的方法定义。
    现在有一个问题,如果我们的static属性是所有的对象共享的,可以通过对象访问的话,那么我们任何一个对象都可以将其修改,那是不是违反常理呢,例如:我们几个合伙人现在共有3000元资金,如果我们任何一个人由于一些事而私自挪用,那么对于所有人来说,在不知情的情况下,资金变了,那显然是不行的,对于这个资金而言,是大家共有财产,应该由大家共同去使用,那么这个大家就是我们在实现时候的类,类是指代所有对象的共有属性的集合,那么java中就由类去访问它比较合适,访问格式:
    类名.static属性
public class mystatic {
	public static void main(String[] args) {
		Person p1=new Person();
		p1.name="李四";
		p1.show();
		Person p2=new Person();
		p2.name="王五";
		p2.show();
		Person.country="USA";
		p1.show();
		p2.show();
	}
}
class Person{
	public static String country="China";
	public String name;
	public void show() {
		System.out.println(country+name);
	}
}

在这里插入图片描述
在运行结果中可以看出,在修改了country属性之后,连个对象的country属性值都发生了变化。

static关键字修饰方法

使用static关键字也是可以修饰方法的,它声明的方法有时也被称作类方法,因为该方法可以由类名直接调用,在方法中,非static声明的方法可以去调用static声明的属性或方法,但是static修饰的方法不能去调用非static声明的属性或方法。
**static是不能调用任何非static的东西,在程序中,所有的属性和方法必须在对象开辟堆内存之后才可使用,而static它是属于全局的,在对象未被实例化就可以被类名直接调用,这在时间上是很好解释的。比如:

public class mystatic {
	public static void main(String[] args) {
//		Person p1=new Person();
//		p1.name="李四";
//		p1.show();
//		Person p2=new Person();
//		p2.name="王五";
//		p2.show();
//		Person.country="USA";
//		p1.show();
//		p2.show();
		System.out.println(Person.country);
	}
}
class Person{
	public static String country="China";
	public String name;
	public void show() {
		System.out.println(country+name);
	}
}

在这里插入图片描述
从这个例子可以看出,并没有任何一个对象,但是我们可以访问static修饰的属性,也就是说static在程序中出现的时间要比普通属性早,并且它消亡的时间比普通属性晚。

静态导包

Java包的静态导入,用import static代替import静态导入包是JDK1.5中的新特性。
一般我们导入一个类都用 import com……ClassName;而静态导入是这样:import static com……ClassName.;这里的多了个static,还有就是类名ClassName后面多了个. ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,
而不必用ClassName.方法名的方式来调用。
好处:这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。
但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便.
例如:
在Java 5中,import语句得到了增强,以便提供甚至更加强大的减少击键次数功能,虽然一些人争议说这是以可读性为代价的。
这种新的特性成为静态导入。当你想使用static成员时,可以使用静态导入(在API中的类和你自己的类上,都可以使用该特性)。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值