[java]static关键字的四种用法,java中static关键字有什么作用
如何解决写爬虫IP受阻的问题?立即使用。
(推荐教程:java入门)
一、static关键字的特点:
P86 《Java编程思想》页上有这样一段话:
虽然这段话只是说明了静态方法的特殊性,但是可以看出,static关键字的基本功能,一句话,描述为:
不用创建对象就可以方便地进行调用(方法/变量)。
显然,static关键字修饰的方法或变量不需要依赖对象进行访问,只要加载类,就可以通过类名进行访问。
Static是一个修饰符,用来修改类的成员方法和变量。此外,可以编写静态代码块来优化程序性能。
(视频教程推荐:java视频教程)
1.静态修饰成员方法
静态修改的方法一般称为静态方法。因为静态方法可以在没有任何对象的情况下被访问,所以静态方法不存在这个问题,因为它没有附加到任何对象。既然没有对象,就没有这个。而且由于这个特性,类的非静态成员变量和非静态成员方法都不能在静态方法中访问,因为这两个非静态成员方法/变量都必须依赖于特定的对象才能被调用。
但是,需要注意的是,虽然不能在静态方法中访问非静态成员方法和变量,但是可以在非静态成员方法中访问静态成员方法/变量。例如:
在上面的代码中,因为print2方法是独立于对象而存在的,所以可以通过类名直接调用。
如果可以在静态方法中访问非静态方法/变量,那么如果main方法中有以下语句:
my object . print 2();
这个时候没有对象,str2根本不存在,所以会有矛盾。方法也是如此。因为不能预测print1方法中是否访问非静态成员变量,所以禁止在静态成员方法中访问非静态成员方法。
对于非静态成员方法,访问静态成员方法/变量显然是无限制的。
因此,如果要调用方法而不创建对象,可以将此方法设置为static。我们最常见的静态方法是main方法。至于为什么main方法一定是静态的,现在清楚了。因为程序在执行main方法时不创建任何对象,所以只能通过类名来访问。
2.静态修改成员变量
静态修改变量也称为静态变量。静态变量和非静态变量的区别在于,静态变量由所有对象共享,并且在内存中只有一个副本。当且仅当类第一次被加载时,它才会被初始化。非静态变量归对象所有,创建对象时初始化,有多个副本,每个对象拥有的副本互不影响。
静态成员变量的初始化顺序根据定义的顺序进行初始化。
3.静态修饰代码块
static关键字在形成静态代码块以优化程序性能方面也起着重要的作用。静态块可以放在类中的任何地方,一个类中可以有多个静态块。当第一次加载类时,每个静态块将按照静态块的顺序依次执行,并且只执行一次。
静态块可以优化程序性能,因为它的特点是:当类第一次被加载时,它只被执行一次。如下所示:
类别人员{
私人日期出生日期;
公众人物(出生日期){
this . birth date=birth date;
}
boolean isBornBoomer() {
date start date=date . value of( 1946 );
date end date=date . value of( 1964 );
返回birth date . compare to(start date)=0 birth date . compare to(end date)0;
}
}isBornBoomer用于判断一个人是否出生于1946-1964年,每次调用isBornBoomer都会生成startDate和birthDate两个对象,造成空间浪费。如果改为以下形式,效率会更高:
类别人员{
私人日期出生日期;
私有静态日期startDate,endDate。
静态{
start date=date . value of( 1946 );
end date=date . value of( 1964 );
}
公众人物(出生日期){
this . birth date=birth date;
}
boolean isBornBoomer() {
返回birth date . compare to(start date)=0 birth date . compare to(end date)0;
}
}所以很多情况下,一些只需要执行一次的初始化操作会在静态代码块中执行。
:
二、static关键字的误区
1.与C/C中的static不同,Java中的static关键字不会影响变量或方法的作用域。在Java中,只有private、public和protected关键字可以影响访问权限。例子如下:
错误,声明static关键字不会更改变量和方法的访问权限。
2.虽然静态方法没有这个,但是我们可以在非静态方法中通过这个访问静态方法成员变量。如下所示:
公共类测试{
静态int值=11;
公共静态void main(String[] args) {
新测试()。print value();
}
私有void printValue() {
int value=22
system . out . println(this . value);
}
}输出结果是:11
这里表示当前对象,所以如果new Test()调用printValue,当前对象就是new Test()生成的对象。而静态变量是被对象享用的,所以printValue中this.value的值无疑是11。printValue方法内部的值是一个局部变量,根本不能与之关联,所以输出11。记住:虽然静态成员变量独立于对象,但并不意味着不能通过对象访问它们。所有静态方法和变量都可以通过对象访问(只要权限足够)。
3.在C/C中,static关键字可以作用于局部变量,但在Java中不允许使用static修改局部变量。这是Java语法的规则。
更多编程知识请访问:编程教学!上面这个java静态关键字的作用是什么?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。