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

java静态方法、非静态代码块{}、静态代码块static{}(转)

 
阅读更多

转自:http://www.cn-java.com/www1/?uid-694384-action-viewspace-itemid-84972

 

static方法就是没有this的方法。在static方法的内部不能调用非静态方法和变量,反过来是可以的。 
    一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。 
两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 

静态方法 
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2) 

使用类的静态方法时,注意: 
a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 
b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生(this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用)。 


(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: 
fun() 

   static int i=0;//非法。 

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如: 
static 


(4)非静态代码块 
eg: 

Java代码 复制代码 收藏代码
  1. public class TestStaticCon {   
  2.     public static int a = 0;   
  3.   
  4.     static {   
  5.         a = 10;   
  6.         System.out.println("父类的非静态代码块在执行a=" + a);   
  7.     }   
  8.        
  9.     {   
  10.         a = 8;   
  11.         System.out.println("父类的非静态代码块在执行a=" + a);   
  12.     }   
  13.   
  14.     public TestStaticCon() {   
  15.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法   
  16.         System.out.println(a);   
  17.         System.out.println("父类无参构造方法在执行a=" + a);   
  18.     }   
  19.   
  20.     public TestStaticCon(String n) {   
  21.         System.out.println(n);   
  22.         System.out.println(a);   
  23.   
  24.     }   
  25.   
  26.     public static void main(String[] args) {   
  27.         TestStaticCon tsc = null;   
  28.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");   
  29.         tsc = new TestStaticCon();   
  30.     }/*Output:  
  31.            父类的非静态代码块在执行a=10  
  32.            !!!!!!!!!!!!!!!!!!!!!  
  33.            父类的非静态代码块在执行a=8  
  34.            a在父类带参构造方法中的值:10  
  35.            8  
  36.            8  
  37.            父类无参构造方法在执行a=8  
  38.            */  
  39.   
  40. }  
  1. public class TestStaticCon {  
  2.     public static int a = 0;  
  3.   
  4.     static {  
  5.         a = 10;  
  6.         System.out.println("父类的非静态代码块在执行a=" + a);  
  7.     }  
  8.       
  9.     {  
  10.         a = 8;  
  11.         System.out.println("父类的非静态代码块在执行a=" + a);  
  12.     }  
  13.   
  14.     public TestStaticCon() {  
  15.         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法  
  16.         System.out.println(a);  
  17.         System.out.println("父类无参构造方法在执行a=" + a);  
  18.     }  
  19.   
  20.     public TestStaticCon(String n) {  
  21.         System.out.println(n);  
  22.         System.out.println(a);  
  23.   
  24.     }  
  25.   
  26.     public static void main(String[] args) {  
  27.         TestStaticCon tsc = null;  
  28.         System.out.println("!!!!!!!!!!!!!!!!!!!!!");  
  29.         tsc = new TestStaticCon();  
  30.     }/*Output: 
  31.            父类的非静态代码块在执行a=10 
  32.            !!!!!!!!!!!!!!!!!!!!! 
  33.            父类的非静态代码块在执行a=8 
  34.            a在父类带参构造方法中的值:10 
  35.            8 
  36.            8 
  37.            父类无参构造方法在执行a=8 
  38.            */  
  39.   
  40. }  

分享到:
评论

相关推荐

    java静态代码块与非静态代码块参照.pdf

    Java 静态代码块与非静态代码块详解 Java 中的代码块可以分为静态代码块和非静态代码块两种,两者的执行时机和作用域不同。本文将通过实例代码和详细解释,阐述 Java 静态代码块与非静态代码块的区别和应用场景。 ...

    java静态代码块与非静态代码块.doc

    Java 静态代码块与非静态代码块 Java 中的静态代码块和非静态代码块是两个重要的概念,它们在 Java 中的应用非常广泛。下面我们来详细介绍这两个概念。 静态代码块 静态代码块是 Java 中的一种特殊的代码块,它是...

    Java的静态代码块、非静态代码块、构造函数

    Java编程语言中,静态代码块、非静态代码块和构造函数是面向对象设计的重要组成部分,它们在类的初始化和对象创建过程中起到关键作用。本文将深入探讨这些概念,以及它们在实际开发中的应用。 首先,我们来理解静态...

    java中的static变量,方法,代码块

    2. 对象创建时,先执行类中的非静态代码块,再调用构造函数。 通过上述分析,我们可以清楚地看到`static`关键字在Java中是如何被运用的,及其在变量、方法和代码块管理上的独特优势。理解这些概念,对于编写高效、...

    static静态变量使用@Value注入方式.md

    正确的做法是使用一个非静态的方法,并在这个方法中通过`@Value`注解来接收配置文件中的值,然后将这个值赋给静态变量。这样可以确保Spring能够在Bean的生命周期内正确处理`@Value`注解,同时还能保持静态变量的功能...

    java 静态非静态 字段方法 子类父类构造_初始化顺序!

    java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...

    静态代码块

    静态代码块与实例代码块(非静态代码块)的主要区别在于它们的执行时机以及作用范围。 - **执行时机**:静态代码块在类加载时执行,而实例代码块则是在创建对象时执行。 - **作用范围**:静态代码块作用于整个类的...

    Java静态代码块作用及执行顺序解析

    在继承关系中,静态代码块的执行顺序是:父类静态代码块 -> 子类静态代码块 -> 父类非静态代码块 -> 父类构造方法 -> 子类非静态代码块 -> 子类构造方法。 静态代码块和静态方法的区别在于:静态代码块是自动执行的...

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    5. 最后,执行当前类的非静态代码块(如果有)。 这个过程确保了对象在被创建之前,其类的静态属性和父类的静态属性已经被正确初始化。同时,通过构造方法链确保了父类的状态在子类状态之前完成初始化。 在实际...

    Java static静态初始快

    1. **执行顺序**:静态初始化块在非静态初始化块之前执行。当类第一次被加载时,JVM会按照它们在源代码中的顺序执行静态初始化块。 2. **类加载机制**:Java类的加载是懒加载的,即只有在类被首次使用时,JVM才会...

    Java中的静态变量、静态方法与静态代码块

    而非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。  静态变量  可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。  静态变量有两种情况:  ● 静态...

    java-静态变量方法块

    在Java编程语言中,静态变量、静态方法、静态代码块以及非静态变量和非静态方法是核心概念,它们对于理解和编写Java程序至关重要。下面将详细解释这些概念,并通过实例程序来阐述它们的使用和内存管理。 首先,静态...

    Java中的static静态代码块的使用详解

    - 对象创建:非静态代码块执行,然后是对应的构造方法。 6. **应用场景:** 静态代码块常用于初始化静态数据结构,配置类,或者一次性执行的设置操作,如日志配置、数据库连接池初始化等。 总之,Java中的静态...

    Java中的static关键字

    静态代码块的定义:不包含在任何方法体中,当类被加载时,自动执行静态代码块,而且只被执行一次,它的作用是:经常用于实现类属性的初始化。 在 Java 中,类装载器把一个类装入 Java 虚拟机中,要经过三个步骤来...

    Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    构造代码块是类中定义的非静态代码块,它们在每次创建类的新实例时执行。构造代码块的作用是在构造方法之前执行一些初始化操作,且它的执行优先于构造方法。在`CodeBlock02`类中,可以看到构造代码块在构造方法之前...

    什么是静态(static)什么是静态方法,静态变量,静态块

    静态方法不能访问非静态成员,因为非静态成员在没有实例的情况下不存在。它们通常用于工具方法或与类的状态无关的操作,如计算、比较等。 ```java public class MathUtils { public static int add(int a, int b) ...

    java技术:java中static作用详解

    3. **静态代码块(Static Blocks)**: - 静态代码块是一组在类中定义的静态语句块,它在类加载时执行,且只会执行一次。 - 静态代码块可以用来初始化静态变量,执行一些类级别的初始化操作。 - 静态代码块按照...

    java 静态块实例块构造器调用

    静态块是Java类中用于初始化静态变量的代码块。它们在类加载时执行,且只执行一次。无论创建多少个类的实例,静态块只会被执行一次。这是因为在Java中,类的静态成员是与类相关的,而非类的实例。 ```java public ...

    java中final和static的区别

    4. 用 private 修饰的 static 成员变量和成员方法,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很...

    静态方法同步 与 非静态方法同步

    在Java中,同步是通过`synchronized`关键字实现的,它用于确保同一时间只有一个线程可以执行特定代码块。这有助于维护数据的完整性,特别是在多个线程可能同时修改同一对象的情况下。 1. 静态方法同步: 静态方法是...

Global site tag (gtag.js) - Google Analytics