`
yuwenlin2008
  • 浏览: 127559 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中的static关键字

阅读更多
静态变量静态方法
static关键字基本用法:
1.被static修饰的变量为静态变量,通过类名.变量名可以直接访问。
2.被static修饰的方法为静态方法,通过类名.方法名可以直接访问。
静态变量和静态方法属于类自身,被类对象实例共享。
有些人容易混淆的一个问题:静态方法能不能引用非静态资源?静态方法里面能不能引用静态资源?非静态方法里面能不能引用静态资源?比如就以这段代码为例,是否有错?
public class StaticTest {
    
    private int i;

    public static void main(String[] args) {
        //i = 1;    //编译报错,不能引用非静态的变量
    }

}
 很明显有编译错误,静态方法不能引用非静态的变量。

静态资源属于类,但是是独立于类存在的。从JVM的类加载机制的角度讲,静态资源是类初始化的时候加载的,而非静态资源是类new的时候加载的。类的初始化早于类的new,比如Class.forName(“xxx”)方法,就是初始化了一个类,但是并没有new它,只是加载这个类的静态资源罢了。所以对于静态资源来说,它是不可能知道一个类中有哪些非静态资源的;但是对于非静态资源来说就不一样了,由于它是new出来之后产生的,因此属于类的这些东西它都能认识。所以上面的几个问题答案就很明确了:

1、静态方法能不能引用非静态资源?不能,new的时候才会产生的东西,对于初始化后就存在的静态资源来说,根本不认识它。

2、静态方法里面能不能引用静态资源?可以,因为都是类初始化的时候加载的,大家相互都认识。

3、非静态方法里面能不能引用静态资源?可以,非静态方法就是实例方法,那是new之后才产生的,那么属于类的内容它都认识。

 

静态代码块
public class A
{
    private static int a = B();
    
    static
    {
        System.out.println("Enter A.static block");
    }
    
    public static void main(String[] args)
    {
        new A();
    }
    
    public static int B()
    {
        System.out.println("Enter A.B()");
        return 1;
    }
}
 这段代码运行结果为:
Enter A.B()
Enter A.static block
 由此得第一个结论:静态资源的加载顺序是严格按照静态资源的定义顺序来加载的。这和周志明老师《深入理解Java虚拟机:JVM高级特性与最佳实践》中类初始化中的说法“<clinit>()方法是由编译器自动收集类中所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的”是一致的。
再看一个例子:
public class A
{
    static
    {
        c = 3;
        //System.out.println(c);		//编译报错,不能使用,未定义
    }
    
    private static int c;
}
 从这个例子得出第二个结论:静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。PS:一般我们也不会这样写代码。
最后一个小例子:
public class A
{
    static
    {
        System.out.println("A.static block");
    }
    
    public A()
    {
        System.out.println("A.constructor()");
    }
}
 
public class B extends A
{
    static 
    {
        System.out.println("B.static block");
    }
    
    public B()
    {
        System.out.println("B.constructor()");
    }
    
    public static void main(String[] args)
    {
        new B();
        new B();
    }
}
 执行这段代码,输出结果为:
A.static block
B.static block
A.constructor()
B.constructor()
A.constructor()
B.constructor()
 这个比较好理解,这个例子得出第三个结论:静态代码块是严格按照父类静态代码块->子类静态代码块的顺序加载的,且只加载一次
 
static修饰类
static修饰的类为静态内部类,比如单例设计模式,有一种方式就可以用静态内部类来实现。
 
import static
这个比较冷门,一般用于导入静态常量或方法的包。

 

 

 

转自:http://www.cnblogs.com/xrq730/p/4820992.html

<audio controls="controls" style="display: none;"></audio>

0
0
分享到:
评论

相关推荐

    Java中static关键字用法总结[借鉴].pdf

    Java 中 static 关键字用法总结 Java 中的 static 关键字是一个非常重要的概念,它可以用来定义静态方法、静态变量和静态块。在 Java 中,静态方法通常在一个类中定义,它们可以在不创建类对象的情况下被调用。静态...

    java中static关键字用法详解

    java中static关键字用法详解 Java中的static关键字是一个非常重要的概念,它在Java编程中扮演着非常重要的角色。本文将详细介绍Java中static关键字的用法,包括静态变量、静态方法和静态代码块等几个方面。 静态...

    浅谈Java中static关键字的作用

    Java 中 static 关键字的作用 Java 中的 static 关键字是一个非常重要的概念,它有多种用途,本文将详细介绍 static 关键字在 Java 中的作用。 成员变量 在 Java 中,static 关键字可以修饰成员变量。静态变量...

    java视频 static关键字

    在Java编程语言中,`static`关键字是一个非常重要的修饰符,它有多种用途,涉及到类、对象以及变量和方法的生命周期。本视频教程详细讲解了`static`关键字在Java中的应用及其背后的原理。 首先,我们要理解`static`...

    Java中static关键字的作用和用法详细介绍

    在Java编程语言中,`static`关键字是一个非常关键的元素,用于定义类的静态成员,包括静态变量、静态方法和静态初始化块。这些静态元素在类的整个生命周期中只存在一个实例,并且与类本身相关联,而不是类的任何特定...

    static关键字详解

    static关键字详解: 内容摘要: 一、static关键字定义属性 二、static属性与非static属性还有一个最大的区别,所有的非static属性必须产生实例化对象之后才可以访问,但是static属性不受实例化对象的控制,也就是 说...

    java中final关键字和static关键字详细用法

    Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...

    18.static关键字.zip

    18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static关键字.zip18.static...

    Java之static关键字

    Java开发之static关键字的讲解,废话不多说,直接上代码 一、模板类,里面包括:成员变量、静态变量、普通代码块、静态代码块、普通方法、静态方法、构造函数、静态内部类(包括:成员变量、静态变量、普通代码块、...

    java中带static关键字的程序内存分析

    在Java编程语言中,`static`关键字扮演着重要的角色,它影响着类和对象的内存分配方式。理解`static`关键字对于深入理解Java程序的内存管理至关重要。在本文中,我们将详细探讨`static`关键字在Java程序内存分析中的...

    Java 程序显示类中 Static 关键字的用法.docx

    "Java 程序显示类中 Static 关键字的用法" Java 中的 static 关键字是 Java 语言中一个非常重要的概念,它主要用于内存管理。静态关键字用于共享给定类的相同变量或方法。用户可以将静态关键字应用于变量、方法、块...

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    Java面向对象程序设计static关键字.pptx

    Java面向对象程序设计中,static关键字是一个非常重要的概念,它有很多特点和作用,本文将对static关键字的特点、作用和使用场景进行详细的解释。 static关键字的特点 首先,static关键字可以用来修饰变量、方法和...

    Java中的static关键字共3页.pdf.zip

    在Java编程语言中,`static`关键字扮演着至关重要的角色,它是Java类和对象特性的一个核心组成部分。`static`关键字可以应用于变量、方法和代码块,以赋予它们不同的特性和功能。在这里,我们将深入探讨`static`...

    java实现根据关键字查找所在文件夹的文件

    在Java编程语言中,实现根据关键字查找文件夹内包含该关键字的文件是一项常见的任务,尤其在数据处理、日志分析或者文件管理系统中。这个功能可以帮助用户快速定位到含有特定信息的文件,提高工作效率。以下是一个...

    Duanxx的Java学习:关键字Static详解

    关键字Static就是为了满足上面提到的两种特殊情况而诞生的。当某一个变量或方法被声明为Static的时候,这个变量或方法就不再和任何一个类的实例对象绑定,即便没有创建任何一个实例对象,也可以方位Static的变量或者...

    Java静态static关键字原理详解

    Java静态static关键字是Java语言中一个非常重要的概念,它可以修饰成员变量和成员方法,使其具有特殊的特性。在本文中,我们将详细介绍Java静态static关键字的原理和应用。 一、静态变量 静态变量是指使用static...

    Java下static关键字用法详解

    Static关键字可以修饰什么?  从以下测试可以看出, static 可以修饰:  1. 语句块  2. 成员变量(但是不能修饰局部变量)  3. 方法  4. 接口(内部接口)  5. 类(只能修饰在类中的类, 即静态内部类)  6. ...

    关于static关键字的总结

    "关于static关键字的总结" static 关键字是 Java 语言中一个非常重要的概念,它可以用来修饰变量、方法、内部类和代码块等。下面我们将详细介绍 static 关键字的由来、作用和用法。 一、static 关键字的由来 在 ...

Global site tag (gtag.js) - Google Analytics