`
lichen0921
  • 浏览: 81185 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java回归线之Static修饰符

    博客分类:
  • Java
阅读更多

static 修饰符

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 
1、静态变量 
 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 
 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问。 
 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。
  静态变量和实例方法,它们的字节码都位于方法区内  
2、静态方法 
 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。 
3、静态代码块 
 静态代码块是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块(类被初始化的时候,仅仅调用一次 ),如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
  如果类中有静态代码块,它将会先执行静态代码块,然后执行构造方法如果父类中有静态代码块,它将会先执行父类中的静态代码块,执行子静态代码块 然后依次执行父类的构造方法和子类的构造方法
  
因此,static的用途很广泛:static变量可以用作缓存;static方法可以当做工具方法;static代码块可以执行一些初始化操作。

      下面是一个缓存的例子:
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
* 使用 LinkedHashMap 创建 LRU cache. 
*/
public class LRUCache {
  private static int cacheSize = 0;
  private static float loadFactor = 0.75f; // default
  private static LinkedHashMap map = new LinkedHashMap(cacheSize, loadFactor, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
      return size() > LRUCache.this.cacheSize; // return false;
    }
  };

  private LRUCache(int cacheSize){
    this.cacheSize=cacheSize;
  }
  
  public static LRUCache newInstance(){
    LRUCache cacheMap=new LRUCache(100);
    return cacheMap;
  }
  
  public synchronized void clear() {
    map.clear();
  }

  public synchronized Object get(Object key) {
    return map.get(key);
  }

  public synchronized void put(Object key, Object value) {
    map.put(key, value);
  }

  public synchronized Object remove(Object key) {
    return map.remove(key);
  }

  public synchronized int size() {
    return map.size();
  }

  public synchronized Collection values() {
    return map.values();
  }
  public static LinkedHashMap getMap() {
    return map;
  }

  public static void setMap(LinkedHashMap map) {
    LRUCache.map = map;
  }

  public static void main(String[] args) {
    // testing
    int size = 3;
    LRUCache cache = new LRUCache(size);
    cache.put(new Integer("1"), "1");
    cache.put(new Integer("2"), "2");
    cache.put(new Integer("3"), "3");

    String value = (String) cache.get(new Integer(1));
    System.out.println(value);
    System.out.println("Testing ...");
//    cache.put(new Integer("4"), "4");
    Object[] values = cache.values().toArray();

    for (int i = 0; i < values.length; i++) {
      value = (String) values[i];
      System.out.println(value);
    }
  }
}
 

分享到:
评论

相关推荐

    Java修饰符使用整理(含实例)

    Java 修饰符使用整理 Java 修饰符是 Java 语言中的一种基本语法元素,用于控制访问权限、继承关系、抽象类和静态成员变量等方面。Java 修饰符可以分为两大类:访问修饰符和非访问修饰符。访问修饰符包括 public、...

    Java访问修饰符

    "Java 访问修饰符详解" Java 访问修饰符是 Java 编程语言中的一种重要机制,它控制着类、方法和变量的访问权限。访问修饰符可以分为四种:public、protected、private 和缺省(无访问修饰符)。 public 访问修饰符...

    理解java中的类的各种权限修饰符

    本文将详细探讨Java中的五种权限修饰符:`public`、`protected`、`default`(也称为包访问权限)、`private`以及`static`修饰类的情况,并通过实例来展示这些修饰符的具体应用。 #### 1. Public - **概述**: - `...

    java常用的修饰符

    Java修饰符是编程中至关重要的概念,它们用于定义类、接口、变量...理解并熟练运用这些修饰符是成为Java开发高手的关键步骤之一。在实际编程中,应根据需求选择合适的访问级别和行为特性,以实现高效、安全的代码设计。

    java修饰符介绍

    在Java编程语言中,修饰符是用来限制或指定代码元素(如类、方法、变量)的访问权限、特性或行为的关键词。以下是对标题和描述中提及的Java修饰符及其相关知识点的详细介绍: 1. 类的访问控制修饰符: - **public*...

    java修饰符

    Java还支持非访问控制修饰符,如`static`、`final`、`abstract`、`volatile`和`synchronized`等,它们不直接影响成员的可见性,而是用于控制成员的行为特性,如静态绑定、不可变性、抽象化、线程同步等。 ##### ...

    第6章 Java语言中的修饰符.ppt

    Java语言中的修饰符是编程语法中的重要组成部分,它们用于定义类、接口、变量和方法的特性,从而控制访问权限、实现抽象概念、确保不可变性以及优化代码结构。本章将详细阐述Java中的主要修饰符。 首先,我们讨论...

    java访问权限修饰符public.doc

    java 访问权限修饰符详解 在 Java 语言中,访问权限修饰符是指用来限定类、成员变量和方法的可访问范围的关键字。访问权限修饰符分为四种:public、protected、friendly 和 private。每种修饰符都有其特定的访问...

    JAVA访问修饰符大归纳

    根据 JAVA 访问修饰符的特性和使用范围,我们可以将其分为三类:修饰符类的访问修饰符、属性的访问修饰符和方法的修饰符。 一、修饰符类的访问修饰符 修饰符类的访问修飾符共有四种:默认、public、abstract 和...

    Java static修饰方法

    在Java编程语言中,`static`关键字是一个非常重要的修饰符,它有多种用途,但最常见的是用来修饰类的方法和变量。在这个主题中,我们将深入探讨`static`修饰方法的概念、作用以及它如何影响Java程序的执行。 首先,...

    Java修饰符总结

    在Java中,某些修饰符可以组合使用,如`public static`、`protected final`等,以达到更精细的控制效果。例如,`public static`方法表示该方法是公共的且与类实例无关,而`protected final`变量则表示受保护的且不可...

    Java软件开发实战 Java基础与案例开发详解 6-5 static修饰符 共13页.pdf

    ### Java软件开发实战:Java基础与案例开发详解之Static修饰符 #### 6.5 Static修饰符 在Java中,`static`关键字用于声明与类而不是与实例相关的变量、方法或代码块。这一特性使得静态成员能够被类本身直接访问,...

    针对Java中的修饰符总结

    Java中的非访问修饰限定符有三种:abstract、final和static。 1. abstract:抽象的,不能被实例化,用于修饰抽象类和抽象方法 2. final:最终的,不能被继承、重写或修改 3. static:静态的,属于类的,不能被实例...

    java修饰符的使用.pdf

    Java 中的类和方法的修饰符是 Java 语言的基础知识之一。Java 程序在定义类时,除了使用 class 关键字标识之外,还可以在 class 之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非...

    Java修饰符demo

    本文将深入探讨Java修饰符的基础知识,包括访问修饰符、非访问修饰符以及它们在实际编程中的应用。 首先,我们来看访问修饰符。在Java中,有四种主要的访问修饰符: 1. **public**:公共访问修饰符,允许任何地方...

    java面向对象之final修饰符.docx

    【Java面向对象之final修饰符】 Java中的final关键字在面向对象编程中扮演着重要的角色,它主要用于修饰类、变量和方法,确保它们在程序运行过程中不可改变或不可重写。以下是对final修饰符的详细解释: 一、final...

    关于Java中各种修饰符与访问修饰符的说明

    Java是一种面向对象的编程语言,其中修饰符和访问修饰符是控制代码访问权限和行为的重要元素。本篇文章将详细介绍Java中的各种修饰符和访问修饰符。 1. **类的访问修饰符** - `public`:任何类都可以访问声明为`...

    继承和接口和java访问权限修饰符总结.doc

    static 修饰符是指在 Java 中用来修饰类、方法和变量的关键字。static 修饰符可以使得方法或变量在类加载时就被初始化,并且可以被所有对象共享。 六、final 修饰符 final 修饰符是指在 Java 中用来修饰类、方法和...

    java常用修饰符.doc

    本文主要分析了Java中常见的访问修饰符(public、private、protected、friendly/default)以及非访问修饰符(final、abstract、static、native)。我们将通过具体的例子和解析深入理解这些修饰符的作用。 首先,...

    java修饰符使用很给力

    Java修饰符在编程中起着至关重要的作用,它们用于控制类、接口、变量和方法的访问权限以及实现其他特性。本文将深入探讨Java中的访问修饰符及其应用。 首先,我们来了解一下类的访问修饰符: 1. **public**:公共...

Global site tag (gtag.js) - Google Analytics