对static关键字的理解

作为一个初学者,在学习过程中,由于种种原因,一些基础的知识我们总是会忘记。当每次要用到时,又要百度搜集各种知识,大大降低学习效率。故记下这篇随笔,自己整理一下知识要点,方便以后查看。

static可用来修饰成员变量(静态变量),成员方法(静态方法)以及代码块(静态代码块)。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。相比较之下,非静态变量和方法依赖于对象,必须要实例化对象后才能够调用。

生命周期:当类被加载时,静态变量和静态方法就被加载到内存中,就是在内存中开辟一段内存地址用来保存静态变量和静态方法。一直到程序结束后才被释放。所以在静态方法或静态代码块不能直接(可以实例化后再引用)引用非静态变量和方法,也不能使用this和super关键字。

静态变量与实例变量的区别:对于静态变量来说,JVM在类加载的时候只为静态变量分配一次内存,以后的每次引用都不会再为其分配内存。而对于实例变量来说,每次new出一个对象,就分配一次内存。

静态代码块:在静态代码块中定义的变量不同于静态变量,它只在代码块中有效!

final static修饰:对于一个变量,如果一旦赋值就不可修改,并且可以通过类名访问,就可以用final static修饰。对于一个方法,如果要其不可被覆盖,并且可以通过类名访问,也可以用final static修饰。

执行顺序测试:测试静态代码块,main方法的执行顺序。

 1 public class Test {
 2 //    static {    编译错误
 3 //        a = 4;
 4 //        System.out.println(a);
 5 //    }
 6     private static int a = 0;
 7
 8     public static void main(String[] args) {
 9         a = 3;
10         System.out.println(a);
11     }
12
13     static {    //与main方法作比较
14         a = 1;
15         System.out.println(a);
16     }
17
18     static {    //与静态代码块作比较
19         a = 2;
20         System.out.println(a);
21     }
22 }

运行结果:

1

2

3

结果分析:静态代码块的执行顺序先于main方法,静态代码块之间以及和声明静态变量的执行顺序按其出现的先后顺序决定先后。

时间: 2024-10-29 19:05:39

对static关键字的理解的相关文章

java中static关键字的理解(转载)

static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

java中static关键字的理解

static关键字 解决两种问题 1.   只想为某特定域分配单一的存储空间,而不去考虑究竟要创建多少对象,甚至根本不创建任何对象 2.   希望某种方法不与包含它的任何对象关联在一起,也就是说,即使没有创建对象也能调用这个方法 当static作用于某个字段时,肯定会改变数据创建的方式,因为一个static字段对每个类时只有一份存储空间,而非static字段则是对每一个对象都有一个存储空间 和其他方法一样,static方法可以创建或使用其类型相同的被命名的对象,因此static方法常常被拿来做牧

static关键字的理解

#include<stdio.h> int counter(int i){ static int count=0;//编译时只运行一次 count=count+i; return count; } main() { int i,j; for(i=0;i<5;i++) { j=counter(i); printf("i:%d,j:%d\n",i,j); } }

Java Core - static关键字的理解

一.基本常识 二.关于main方法 我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了.因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问. 三.学习通道 https://www.cnblogs.com/dolphin0520/p/3799052.html https://www.cnblogs.com/dolphin0520/p/10651845.html 原文地址:https://www.cnblogs.com/2s

php的static关键字和全局变量

1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中:php的面向对象是基于面向对象的,不是纯粹面向对象的:也就是其可以面向对象编程,也可以不面向对象编程. 使用global定义全局变量,其放在内存的全局区/静态区中,在代码中其是放在class外面的. global $global_a; $global_a=8;//只能这样给全局变量赋值,否则会报错 //在函数中使用全局变量 function test(){ glob

关于 Java 中的 static 关键字

Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较深入地理解static. static 可以修饰: 变量(所谓 class variable) 方法(所谓 class method) 代码块(所谓 block) 内部类(所谓 nested class) 凡是被 static 修饰的这四种元素,都属于class的元素,即类的,而不是类的实例的. 1

static关键字以及字符串常量的理解

一.作用域.链接属性以及存储类型: 1.      作用域:常见作用域有代码块.文件.函数以及原型作用域(只适用于在函数原型中声明的参数名). 2.      链接属性: a)        链接可以将多个目标文件链接生成最后的目标文件.链接属性则是决定如何处理在不同文件中出现的标识符. b)        链接属性总共有三种:external(外部).internal(内部)以及none(无).默认情况下标识符一般是外部或者无属性,但是,通过static关键字,则可以改变标识符的属性,将外部属

C++中关键字的理解--Static

C++中关键字的理解---Static 目录:1.static缘起             2.static自我理解             3.static举例使用             4.总结 -------------------------------------------------------------------------------------------------- 1.static缘起         C语言是面向过程构架,多文件为单位的编码的优异之处在于保持不同

C static 关键字理解

今天来看一下这么一个程序. #include<stdio.h> int count =1; int fun(void) { static int count =10; return count--; } int main(void) { printf("global\t\tlocalstatic\n"); for(;count<=10;count++) printf("%d\t\t%d\n",count,fun()); return 0; } 运行