先上实例

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. Loadrunner:安装LR11时提示缺少vc2005_sp1_with_atl_fix_redist

    [问题现象] 安装LR11时提示缺少vc2005_sp1_with_atl_fix_redist: [解决办法] 手动安装缺少的组件,LR安装包中已自带该组件,为何不自动捕捉异常去获取该自带的组件去安 ...

  2. C++著名程序库的比较和学习经验 (转)

    转自:http://www.open-open.com/lib/view/open1328670468108.html 内容目录: 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介 ...

  3. Heavily reliance on forensic tools is risky

    We could take advantage of forensic tools to examine and analyze the evidence, but heavily reliance ...

  4. Android 按键式事件

    1. package com.fish.helloworld; import android.app.Activity; import android.graphics.Color; import a ...

  5. Android IOS WebRTC 音视频开发总结(四三)-- 诚信交易案例分享

    本文主要记录一些诚信交易的案例(两个陌生人之间没有合同,没有订金,没有讨价还价,完全靠诚信完成的交易), 特别纪录下来并不是因为金额有多高,而是因为在现在这种社会要完成这样的交易太难,特别是像咨询这种 ...

  6. javaSE第十六天

    第十六天    140 1:List的子类(掌握)    140 (1)List的子类特点    140 (2)ArrayList    141 A:没有特有功能需要学习    141 B:案例    ...

  7. ASP.NET MVC5 第4章

    参考资料<ASP.NET MVC5 高级编程>第5版 第4章 模型 本章所探讨的模型是要显示.保存.创建.更新和删除的对象. 基架指使用 MVC 提供的工具为每个模型对象的标准索引构建.创 ...

  8. javscript处理XML DOM(待续)

    1.加载并解析XML文件 function loadXMLFile(url){ var xmldoc if(window.ActiveXObject){ xmldoc = new ActiveXObj ...

  9. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(五)-- Filter

    在上一篇里,介绍了中间件的相关内容和使用方法.本篇将介绍Asp.Net Core MVC框架的过滤器的相关内容和使用方法,并简单说明一下与中间件的区别. 第一部分.MVC框架内置过滤器 下图展示了As ...

  10. wamp+zendstudio12+xDebugger环境搭建

    1.网上找到Wampserver,下载即可,一路安装即可,安装好后打开浏览器输入http://localhost即可看到有没有安装成功 比如我的是这样的,就说嘛wampserver安装成功了 wamp ...