先上实例

public class TestStatic {
public static String staticString = "this is a static String"; //静态变量
public String instanceString = "this is a instance String";//实例变量
//静态方法
public static void staticMethod(){
System.out.println("this is a static method");
}
//实例方法
public void instanceMethod(){
System.out.println("this is a instance method");
}
}
public class Main {

    public static void main(String[] args){
TestStatic testStatic = new TestStatic(); TestStatic.staticMethod();//直接通过类名访问静态方法
System.out.println(TestStatic.staticString);//直接通过类名访问静态变量 testStatic.instanceMethod();//通过实例化对象 访问 实例方法
System.out.println(testStatic.instanceString);//通过实例化对象 访问实例变量
}
}

1.静态变量与静态方法,上面TestStatic.java中

java中的变量有静态变量和实例变量,实例变量要类实例化后才真正存在,通过对象.变量名访问,如上面代码中的testStatic.instanceString。静态变量不需要实例化就存在,可以通过类名.变量名访问,如上面的TestStatic.staticString

静态方法和实例方法,无论哪种方法在内存中都只有一份。不同的是

a.实例方法必须通过实例化对象来使用如上面代码中的testStatic.instanceMethod(),静态方法是可以直接通过类名直接使用,如上面代码中的TestStatic.staticMethod()

b.静态方法可以有自己的自己的局部变量,只能访问静态变量和静态方法,实例方法则没有这种限制。实例如下

public class TestStatic {
public static String staticString = "this is a static String"; //静态变量
public String instanceString = "this is a instance String";//实例变量
//静态方法
public static void staticMethod(){
int temp;//可以有自己的局部变量
staticString = "test";//可以访问静态成员变量
testStatic();//可以访问静态方法
//instanceMethod();//不能访问实例方法
//instanceString = "";//不能使用实例变量
System.out.println("this is a static method");
}
//实例方法
public void instanceMethod(){
System.out.println("this is a instance method");
}
public static void testStatic(){
//用于测试
}
}

2.静态代码段

static{
int x;//只在本块有效
//静态代码段
}

a. 静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面

b.静态代码块里面的变量都是局部变量,只在本块内有效

c.静态代码块会在类被加载时自动执行,而无论加载者是JVM还是其他的类

d. 一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行

e.静态代码块只能访问类的静态成员,而不允许访问实例成员

3.java中的初始化顺序

JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

初始化顺序:先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码(变量定义等)--->初始化父类构造函数--->初始化子类非静态代码(变量定义等)--->初始化子类构造函数

类只有在使用New调用创建的时候才会被JAVA类装载器装入创建类实例时,首先按照父子继承关系进行初始化类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法类消除时候,首先消除子类部分,再消除父类部分

java静态变量、静态方法和静态代码段的更多相关文章

  1. C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序 ...

  2. java静态类、静态方法、静态代码块,静态变量及实例方法,实例变量初始化顺序及内存管理,机制

    1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行 ...

  3. java:构造方法:无参构造/有参构造 this static关键字 静态变量 静态方法 代码块 封装 静态常量。

    /*构造方法是一种特殊的方法,专门用于构造/实例化对象,形式:[修饰符] 类名(){ }构造方法根据是否有参数分为无参构造和有参构造*/public class Dog {               ...

  4. linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】

    转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yea ...

  5. Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序

    //据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...

  6. java 静态变量&静态方法

    1. 静态变量是static修饰的成员变量(类变量),若无static修饰,则是实例变量.静态变量是一种全局变量,它属于某个类,不属于某个对象实例,是在各对象实例间共存.   访问静态变量直接通过类名 ...

  7. Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序

    直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...

  8. Java的外部类和内部类+静态变量和非静态变量的组合关系

    看的李刚<疯狂java讲义>,里面讲内部类的地方感觉有点散而且不全,看完之后还是不十分清楚到底怎么用,于是自己写了个程序测试了一下.看如下代码,即可知道外部类和内部类+静态成员和非静态成员 ...

  9. 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性

    在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的 ...

  10. 1.7Oob 静态变量静态方法

    1)静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员 2)如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量. 3)静态方法中不能直接调用非静态方法 ...

随机推荐

  1. 阿里 Java面试 知识点

    摘自: http://blog.csdn.net/wtyvhreal/article/details/45291835 =================================== 基础知识 ...

  2. HttpClient特性

    Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且 ...

  3. HTML5和CSS3的能量究竟是怎样的?

    Web设计师可以使用HTML4和CSS2.1完成一些很酷的东西.我们可以在不使用陈旧的基于table布局的基础上完成文档逻辑结构并创建内容丰富的网站.我们可以在不使用内联<font>和&l ...

  4. 萝卜家园32位和64位Win7系统Ghost版

    新萝卜家园32位Win7系统Ghost版Sp1,官方旗舰版采用Windows7 SP1简体中文旗舰版32位(MSDN官方发布正式版原版ios镜像)制作,并能够完美自动激活,采用自由天空驱动包,解决部分 ...

  5. 使用TypeScript如何提升JavaScript编程效果?

    TypeScript是个什么鬼?和JavaScript有什么关系? TypeScript是由微软开发的一种可快速入门的开源的编程语言,是JavaScript的一个超集,且向这个语言添加了可选的静态类型 ...

  6. jquery中的mouseenter实现理解

    说在前面:首先说一下两者之间的区别,假设当前元素为element,mouseover事件具有冒泡特性,也就是说无论鼠标是从别的元素移动到element或者是从element的子元素移动到element ...

  7. Fix: Compile project encounter undefined reference to“xxx”error

    Need to add all the new cpp files to jni/Andriod.mk folder:

  8. [转]SQLServer 2008以上误操作数据库恢复方法——日志尾部备份

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  9. Eclipse 4.6 Neon, could not create the java virtual machine

    下了eclipse 4.6,打开报错:could not create the java virtual machine. a fatal exception has occurred. 命令行用 e ...

  10. 问题记录-Fragment导包不同导致无法自动转型

    代码如下 public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle save ...