Java自由块(静态和非静态)(转载)

java中的自由块分为两种:

静态块和非静态块

静态块:

 public class Test {
2     static int x = 10;
3     //静态块:静态块的执行时机是在class文件装载的时候;静态块只会执行一次
4     //多个静态块的时候,按出现顺序执行
5     static{
6         x+=5;
7     }
8 }

非静态块:

 public class Test {
2     //非静态块:每次初始化一个对象,都会导致一次非静态块的执行;在构造函数执行之前执行
3     //继承关系:父类的非静态块->父类的构造函数->自己的自由块->自己的构造函数
4     {
5         System.out.println("before");
6     }
7 }

测试demo:

 public class Test {
 2
 3     static int x = 10;
 4     //静态块:静态块的执行时机是在class文件装载的时候;静态块只会执行一次
 5     //多个静态块的时候,按出现顺序执行
 6     static{
 7         x+=5;
 8     }
 9     public static void main(String[] args) {
10         new Test();
11         System.out.println(x);
12     }
13     //静态块
14     static {
15         x/=3;
16     }
17     public Test(){
18         System.out.println("构造函数");
19     }
20     //非静态块:每次初始化一个对象,都会导致一次非静态块的执行;在构造函数执行之前执行
21     //继承关系:父类的非静态块->父类的构造函数->自己的自由块->自己的构造函数
22     {
23         System.out.println("before");
24     }
25 }

控制台输出:

before
构造函数
5
时间: 2024-10-04 05:44:20

Java自由块(静态和非静态)(转载)的相关文章

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

内部类访问外部类的变量必须是final吗? 如下:class A{int i = 3;public void shout(){ class B{public void shout1(){System.out.println(i);} }B b=new B();b.shout1();} public static void main(String [] args){A a=new A();a.shout();} }可正常输出3,证明可以访问类的变量i,但改为下面的方式:class A{public

静态与非静态的使用与区别

静态变量.静态方法.静态代码块.非静态变量及非静态方法的简单介绍 转载自:http://xixinfei.iteye.com/blog/1256085 静态变量 静态变量是类中的一种特殊变量,他在运行是可以说是从属于类,也就是说由该类定义生成的所有对象共用同一个静态变量,内存中只有一个版本.这对于要求在程序运行过程中,只有一个对象副本存于内存非常重要,如在实现单例模式时,为了实现只有一个类对象存于内存中,我们把内对象定义为一个静态变量:为了确保这个执行过程中,只有一个Connection对象村与

C# 关于静态与非静态的那点小事

所谓静态与非静态,无非就是在声明的时候多用了一个"static". 那么静态与非静态有什么区别呢? 1.对于非静态的成员,包括方法,字段,属性.调用的时候需要用实例化的对象来调用.(new出来的.) 而对于静态成员,调用的时候则需要使用类名去调用. 这就引申出一个问题,可不可以用静态类来实例化对象呢?答案当然是否定的,因为,实例化对象的目的,就是要用实例化的对象来调用属性,方法或字段.对于静态的类来说,      是用类名来调用的,所以对于静态类来说,完全不需要实例化一个对象.也就无法

03.静态和非静态的区别

静态和非静态的区别 方法,字段,属性都可以被static修饰. (1).在非静态类中,即可有实例(非静态)成员,可以有静态成员. 静态成员和非静态成员在调用上有什么不一样呢? (1.1)非静态成员(实例成员)必须被实例化对象之后,的对象名来调用. 对象名.实例成员名; (1.2)静态成员必须被定义它的类的类名来调用. 类名.静态成员名;      //注意,如果要在定义静态方法的类的内部使用静态 方法,我们可以省略类名.直接写. (1.3).静态方法可以访问静态成员,但是静态方法不可以访问非静态

关于静态与非静态之具体总结

花费了些功夫,差点儿相同搞明确了: 大家会看到有些地方不停反复出现--那就是你要找的东西 本文參考多处,详细出处就不写了. 静态和非静态: 字段.函数成员的声明中含static修饰符时是静态成员,否则是非静态成员(实例成员): 数据成员能够分静态变量.非静态变量两种. 静态成员属于类,而非静态成员(实例成员)属于对象. 对于类的数据成员来说.假设是静态的,那么他将是类的一部分,为全部实例共享,假设是非静态的.则每一个实例有一份考贝. 类的非静态成员属于类的实例全部,每创建一个类的实例都在内存中为

静态与非静态的异同

转载至-http://bbs.51cto.com/thread-1025127-1.html 静态类 vs 普通类静态类与普通类的区别有以下几点:1)静态类无法实例化而普通类可以:2)静态类只能从System.Object基类继承:普通可以继承其它任何非static和非sealed类,但也只能继承一个类:3)静态类不能继承接口:普通类可以继承多个接口:4)静态类只能包含静态成员:普通类可以包含静态和非静态成员:5)静态类不能作为字段,方法参数和局部变量使用:普通类可以;静态类的意义:可以用静态类

关于静态与非静态之详细总结

花费了些功夫,差不多搞明白了: 大家会看到有些地方不停重复出现--那就是你要找的东西 本文参考多处,具体出处就不写了. 静态和非静态: 字段.函数成员的声明中含static修饰符时是静态成员,否则是非静态成员(实例成员): 数据成员可以分静态变量.非静态变量两种. 静态成员属于类,而非静态成员(实例成员)属于对象.对于类的数据成员来说,如果是静态的,那么他将是类的一部分,为所有实例共享,如果是非静态的,则每个实例有一份考贝. 类的非静态成员属于类的实例所有,每创建一个类的实例都在内存中为非静态成

《静态与非静态之间的调用问题》

1 //静态与非静态之间的调用问题. 2 public class StaticDemo 3 { 4 /* 5 此处演示了,静态的方法(此处是main方法)不能直接调用非静态的方法,可以通过创建该类对象来调用 6 public void info() 7 { 8 System.out.println("简单的info方法!"); 9 } 10 public static void main(String[] args) 11 { 12 StaticDemo s = new Static

第十七节:易混淆的概念(静态和非静态、拆箱和装箱)

一. 静态和非静态 二. 拆箱和装箱 1 ! 作       者 : Yaopengfei(姚鹏飞) 博客地址 : http://www.cnblogs.com/yaopengfei/ 声     明1 : 本人才疏学浅,用郭德纲的话说"我是一个小学生",如有错误,欢迎讨论,请勿谩骂^_^. 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留下你的评论,加我QQ:604649488 (备注:评论的博客名) 原文地址:https://www.c

20151024_001_C#基础知识(静态与非静态的区别,值类型和引用类型,堆和栈的区别,字符串的不可变性,命名空间)

1:我们把这些具有相同属性和相同方法的对象进行进一步的封装,抽象出来类这个概念. 类就是个模子,确定了对象应该具有的属性和方法. 对象是根据类创建出来的. 2:类:语法 [public] class 类名 { 字段; 属性; 方法; } 写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字new 实例化类===创建类 this:表示当前这个类的对象. 类是不占内存的,而对象是占用内存的. 结构是面向过程的,类是面向对象的,之前没有面向对象的时候