`
hz_chenwenbiao
  • 浏览: 994455 次
  • 性别: 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 静态非静态 字段方法 子类父类构造_初始化顺序!

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

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

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

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

    MarkDown文档,大家应该都知道,@Value注解可以给类中的非静态变量注入值,但是给静态变量注入值则会有警告,结果是失败的,本文档说明了如何使用@Value注解给类的静态变量赋值

    Java开发技术大全(500个源代码).

    invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 ...

    1this,tostring类的继承.rar

    因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    在这是junit测试单元类我就不提交了,在main()方法中有几个小测试,有兴趣自己玩吧. 这个工具类目前主要有25种正规表达式(有些不常用,但那时才仔细深入的研究了一下正规,写上瘾了,就当时能想到的都写了): 1....

    Java中this与super的区别

    要注意的是this只能在类中的非静态方法中使用, 静态方法和静态的代码块中绝对不能出现this。this也可作为构造函数来使用。在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针, 而...

    java三大特性说明

     对于由final static共同修饰的变量,赋值的机会有两个,一是在声明的时候,二是在静态代码块中,两次机会有且只能有一次被选择.   继承:  允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承...

    Java常见面试题整理出来了

    2.Java 虚拟机的运行时数据区有几块?线程私有和线程共享区域有哪些? ①程序计数器:线程私有,当前县城执行的字节码的行号指示器。 ② 虚拟机栈: 线程私有, 存放基本数据类型、 对象引用和 ret

    springboot项目打成jar包后无法获取static下的静态资源文件的问题分析

    主要介绍了springboot项目打成jar包后无法获取static下的静态资源文件的问题分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    java基础案例与开发详解案例源码全

    6.5.3 静态代码块169 6.5.4 单态模式170 6.6 final修饰符171 6.7 abstract修饰符172 6.8 接口173 6.8.1 接口的定义及实现174 6.8.2 接口中的常量174 6.8.3 接口的多重实现174 6.9 本章练习175 第7章 7.1 面向对象的...

    JAVA面试题最全集

    静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法? 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally 51.Object类(或者其子类)的finalize()方法在什么情况下被调用? 52....

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.3.12 静态方法何以为“静态” 314 11.4 变量的修饰符 316 11.4.1 变量方法皆成员 317 11.4.2 变量的访问控制符 317 11.4.3 使用private修饰类的成员变量 318 11.4.4 使用private,然后呢? 320 11.4.5 变量...

    Java并发--final关键字.docx

    类变量可以再声明变量的时候直接赋初始值或者在静态代码块中给类变量赋初始值;而实例变量可以在声明变量的时候给实例变量赋初始值,在非静态初始化块中以及构造器中赋初始值。 类变量有两个时机赋初始值,而实例...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    (每分钟 90 转),当前传动装置是第 5 个齿轮。再面向对象的程序设计中,这些数据应放在 变量中。自行车的行为:刹车,改变步度和换档。在面向对象的程序设计中,这些行为用方 法实现。 在 OOP 技术中,对象充当了...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.3.12 静态方法何以为“静态” 314 11.4 变量的修饰符 316 11.4.1 变量方法皆成员 317 11.4.2 变量的访问控制符 317 11.4.3 使用private修饰类的成员变量 318 11.4.4 使用private,然后呢? 320 11.4.5 变量...

    java实现源码转补码-Java-Cheatsheet:Java笔记备忘单,侧重于基础知识和有用的面试技巧

    java实现源码转补码目录 变量范围 当地的 实例 类/静态 在方法、构造函数或块中声明 在类中声明,但在方法/块之外 与实例相同,但使用static关键字 进入区块时创建,退出区块时销毁 在创建对象时创建 ( new )。 当为...

    Java面试宝典-经典

    13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有什么不妥之处? 13 17、请说出作用域...

    Java面试宝典2010版

    13、是否可以从一个static方法内部发出对非static方法的调用? 12 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 13 16、下面的代码有什么不妥之处? 13 17、请说出作用域...

Global site tag (gtag.js) - Google Analytics