详解java中staitc关键字
一、static定义
static是静态修饰符意思,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,万物皆对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的。
static声明的静态变量可以直接通过类名调用!
class Demo{
public static void main(String[] args)
{
Person p = new Person();
System.out.println(p.country); //1、新建对象调用
System.out.println(Person.country); //2、通过类名直接调用
}
}
class Person{
static String country = "china";
}
二、static特点
由此我们得出static的特点。
a、static是一个修饰符,用于修饰成员。
b、static修饰的成员被所有的对象共享。
c、static优先于对象存在,static成员随着类的加载就已经存在。
d、static修饰成员多一种调用方式--通过类名调用。
三、成员变量和静态变量区别?
1.两个变量的生命周期同
成员变量随对象创建存在,随对象回收而释放。
静态变量随类的加载而存在,同样也随着类而消失。
2、调用方式
成员变量只能被对象调用。
静态变量能被对象调用,还可以被类名调用。
3、内存中存储位置不同。
成员变量存储在堆内存中。
静态变量存储在方法区(共享数据区)的静态区。
四、静态使用注意事项
1、静态方法只能访问静态成员。
2、静态方法中不可以用this或super关键字。
3、主函数都是静态的。
class Demo{
public static void main(String[] args)
{
Person.show();
}
}
class Person{
static String country = "china";
String name = "jinfulin";
public static void show()
{
System.out.print(country); //正确
//System.out.print(name); //错误
}
}
五、什么时候使用静态?
1、静态成员
分析对象中所有的成员变量的值都是相同的。
2、静态函数
不需要初始化就能直接访问(该函数没有访问到类的特有数据)。
还是上面那个人的例子,下面这个show方法没有调用特有数据,所以定义成静态的更好。
class Demo{
public static void main(String[] args)
{
Person.show();
}
}
class Person{
static String country = "china";
String name = "jinfulin";
public static void show()
{
System.out.print("哈哈~");
}
}
六、特殊用法--静态代码块
随着类的加载而执行,而且只执行一次。
作用:用于类的初始化。
class Demo{
public static void main(String[] args)
{
new Person().show();
new Person().show();
}
}
class Person{
static
{
System.out.println("haha....");
}
void show()
{
System.out.println("哈哈~");
}
}
如上:结果为一次haha,两次哈哈
ps:在执行顺序上,静态代码块>构造代码块>构造函数
最后,以上就是java中static的用法,static不仅上编程时候难理解的地方,也是面试爱考的地方,以后我们的学习必定要更加的细化,不仅要明白如何做出,还要知道如何做好。
最新文章
- HttpClient post json,可以是数组
- NGUI使用教程(2) 使用NGUI创建2D场景而且加入标签和button
- windows下更改mysql数据储存物理目录
- 【转】nagios使用带url的check_http检测主机
- ASP.NET 使用Session,避免用户F5刷新时重复提交(转)
- 【转】Linux中的特殊权限粘滞位(sticky bit)详解
- Kubernetes---pod--重启策略
- laravel 图片验证码
- UGUI自定义组件之Image根据Text大小自动调整
- linux 源码安装PHP
- 深入浅出 SVG
- 转-软件测试人员在工作中如何运用Linux
- [网络流]Farm Tour(费用流
- VB改写C#
- 【接口】【面试题】http协议相关面试题
- Java多线程-----匿名内部类创建线程
- Android build.gradle
- Proximal Algorithms
- Java-Runoob-高级教程-实例-字符串:06. Java 实例 - 字符串查找
- Visual Studio 2017 安装过程问题解决