`
ticojj
  • 浏览: 157571 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中 static与final 小解

    博客分类:
  • java
阅读更多

---------2012-5-7----------
static是静态修饰符。
在程序中,所有的变量或代码在编译时,都会由系统分配内存来存储。而所谓的静态就是指,该内存被分配后会一直存在,直到程序退出,内存才会释放该空间(程序在运行,内存一直存在)。
普通情况下,若访问类的成员变量或成员函数,都需要先实例化。但若用static定义该成烟,就无需此情况了。

//以下就是无需实例化的情况
class A{
static name ;
static void fuck_you(){
  .......
}
}

class B{
A.name;
A.fuck_you();
}

//以下为说明静态变量属于全局变量
class TStatic{
static int i;

public TStatic(){
   i = 4;
}

public TStatic(int j){
   i = j;
}

public static void main(String args[]){
   TStatic t2 = new TStatic(10);
   TStatic t1 = new TStatic();
   sysout(t2.i);
   sysout(t1.i);
   sysout(t2.i);
}
}
结果都为4 。所有对象共享一个内存,呵呵‘
//static 用处
比如班级人数是变化的。 可以static count;
比如基本工资是变化的,但是工厂N多人是统一的基本工资。 可以static int base_salary ;
进行get set方法。老板可以set ,其他员工就可以get。(需考虑到屏蔽员工Set端口)




--------我这人健忘,以下为以前写的。当时理解了,可现在我又忘记了-----------------




以下全部都是理解后copy,下面是我自己来说句话了:
static定义变量,属于全局性,所有人都可引用;
static定义程序块,会被优先加载出来;
static定义方法,该类不需要生成对象,该类就可以直接调用该方法(例如上面那个程序示例)。

final定义变量,不可改变其值;

final定义方法,方法在子类中不能被重写;
final定义类,该类不能被继承。




java中
方法或变量被定义为static时,会被优先访问。

静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:
class Simple{
static void go(){
System.out.println("Go...");
}
}
public class Cal{
public static void main(String[] args){
Simple.go();
}
}


.static 属于全局,也就是类的属性 和方法,换句话说 一个类,不管有多少个实例,却只有一个全局变量
class B {static int a=0;}
B b1=new B();..................;B bn=new B();
b1~bn 都是类B的实例,每个实例都共享 变量a,a是全局变量,属于类B的属性,每个实例都能引用变量a,
加入执行b1.a=1;后 那么b2.a,b3.a,b4.a......bn.a 都等于1了,

static 方法也是类似的

需要注意的是 静态属性和方法属于类方法,加载类后,就已经存在静态属性和方法,实例是需要用new构造出来后 才会有引用
根据先后顺序,就有以下两条规则
1、非静态的方法可以调用静态的或者非静态的属性和方法;
2、静态的方法不可以调用非静态的属性和方法,因为非静态的还不一定存在,只能先构造出来后,再通过实例引用
例如 在main方法中 可以直接调用static 的方法,调用非static方法 需要先构造出类的实例,通过实例才能调用



static是静态修饰关键字,可以修饰变量和程序块以及类方法:当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存;修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化;当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。
final可以修饰变量、方法及类,当你定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值;当你定义一个方法时,改方法在子类中将不能被重写;当你修饰一个类时,该类不能被继承。




static如果用这个修饰你女朋友就意味着你女朋友是所有人的女朋友。
final如果用这个修饰你女朋友那就是意味着她已经变成你老婆了,你甩不掉了。只给你一次初始化机会。



------------------------------static 执行顺序
class UseStatic {
  static int a = 3;
  static int b;
  static void meth(int x) {
  System.out.println("x = " + x);
  System.out.println("a = " + a);
  System.out.println("b = " + b);
  }
  static {
  System.out.println("Static block initialized.");
  b = a * 4;
  }
  public static void main(String args[]) {
  meth(42);
  }
  }


  1.  一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,
    2   接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。
    3.  然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。
  注意:在一个static 方法中引用任何实例变量都是非法的。
  下面是该程序的输出:
  Static block initialized.
  x = 42
  a = 3
  b = 12

---------------------
看帖要回复啊!!!!
分享到:
评论

相关推荐

    java中final和static的区别

    Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。下面是 final 关键字的各种用法: 1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成...

    java中final与static的用法

    在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...

    java中final和static讲解及实例

    java中final和static讲解及实例

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

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

    static与final的异同

    在Java编程语言中,`static`和`final`都是关键字,它们用于定义不同的特性,但同时也有一些相似之处。下面我们将详细探讨这两个关键字的区别和用法。 首先,`static`关键字是用来声明类级别的变量或方法,这意味着...

    Java编程中static和final关键字的陷阱.pdf

    Java编程中static和final关键字的陷阱.pdf Java编程中static和final关键字的陷阱是Java开发中两个重要的关键字,但是它们的使用也存在一些陷阱,需要开发者注意掌握。 static关键字可以用于修饰属性、方法和类。...

    java中final和static的总结

    在Java编程语言中,`final` 和 `static` 是两个非常重要的关键字,它们分别具有不同的含义和用法,但都对代码的结构和行为产生深远影响。本文将深入探讨这两个关键字,并结合实际示例来解释它们的应用场景。 首先,...

    Java中static、this、super、final用法简谈

    Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...

    Java中static、this、super、final用法

    在Java编程语言中,`static`, `this`, `super`, 和 `final` 是四个非常重要的关键字,它们分别代表不同的概念并具有特殊的用法。 一、`static` `static` 关键字用于声明类级别的成员(变量或方法),这意味着它们...

    static、this、super、final的JAVA用法

    Java 中 static、this、super、final 的用法 静态方法(static method)是一种特殊的方法,它可以在不需要创建对象的情况下被调用。Java 中的静态方法使用 static 关键字来修饰,例如 public static void main...

    JAVA(static、finalの使用).doc

    ### JAVA中的`final`关键字详解 在JAVA编程中,`final`关键字扮演着至关重要的角色,它赋予程序员控制代码的可变性和可继承性的能力。本文将深入探讨`final`关键字在不同场景下的应用,包括如何使用`final`定义常量...

    java中static作用

    "Java 中 static 作用" static 是 Java 语言中一个关键字,表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态代码块。在 Java 语言中,没有全局变量的概念,但是可以使用 static 来实现...

    Java关键字final、static使用总结

    在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...

    final和static用法详解JAVA

    Java 中的 final 和 static 关键字详解 final 关键字是 Java 中的一种访问修饰符,用于修饰类、方法和变量,以确保它们不能被修改或继承。下面是 final 关键字的详细解释: 1. final 类 final 类不能被继承,也...

    final关键字和static_用法

    ### Java中的final关键字详解 #### 一、final的概述与用途 `final`关键字在Java中扮演着重要的角色,它通常被用来表示“不可变”的特性。`final`可以用来修饰类、方法以及变量,其核心目的是为了保护数据的安全性...

    Java中static、this、super、final用法.doc

    在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static**: 静态关键字`static`用于声明类级别的变量和方法,即静态变量和静态方法。静态变量...

    Java中的Static块与静态方法

    本文将深入探讨Java中的静态块与静态方法,解析它们的区别、联系以及执行顺序,帮助读者更全面地理解`static`关键字在Java中的运用。 ### 静态方法 静态方法是通过`static`关键字声明的,它属于类而不属于类的任何...

    java中static属性学习

    ### Java中的Static属性详解 #### 一、引言 在Java编程语言中,`static`关键字扮演着重要的角色。它允许我们创建与类关联而非特定实例关联的数据成员和方法。本文将详细介绍`static`属性的基本概念、静态成员变量...

Global site tag (gtag.js) - Google Analytics