首页 / JAVA / java static作用盘点
java static作用盘点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java static作用盘点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2131字,纯文字阅读大概需要4分钟。
内容图文
java的static关键字和C++还是有较大差别的。
static不可以修饰局部变量
和C++有出入。C++还有静态全局变量,java没有全局变量这中说法,因为所有语句包括定义语句都必须写在类或者接口或者方法内,而方法也必须写在类或者接口内。
修饰成员变量
package school;
public class School {
static String name;
public static void main(String[] arg) {
System.out.println(School.name);
}
}
静态方法或者静态属性,独立于对象,所以可以直接通过类名.的方式访问或者调用。事实上,在类内部,类名都可以省略(没有被局部变量覆盖的话)。
虽然static方法或者属性不属于对象,但也可以通过对象.的方式来访问。这和C++也是一致的。
修饰方法
1、静态方法没有this引用,即不可以使用this来访问对象成员,所以导致了规则2。
2、重点:静态方法不能访问非静态成员(包括属性和方法),main方法也不例外。但是非静态方法是可以访问静态方法或者静态属性的。
静态代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。下面看个例子:
class Person{
private Date birthDate;
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
Date startDate = Date.valueOf("1946");
Date endDate = Date.valueOf("1964");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好:
class Person{
private Date birthDate;
private static Date startDate,endDate;
static{
startDate = Date.valueOf("1946");
endDate = Date.valueOf("1964");
}
public Person(Date birthDate) {
this.birthDate = birthDate;
}
boolean isBornBoomer() {
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}
因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
总结
- 修饰的属性所有对象都只有一个值,这一点和C++一致。
- static不可以修饰局部变量。
- static没有this和super引用
- static虽然没有this,但是对象里可以通过this来访问static方法或者属性,这和可以通过对象.的形式来访问本质是一样的。
内容总结
以上是互联网集市为您收集整理的java static作用盘点全部内容,希望文章能够帮你解决java static作用盘点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。