精华内容
下载资源
问答
  • 所谓“块”,就是用{}所包含的代码段,它们在逻辑上常常是一个整体。...非静态初始化块主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。由于非静态成员不能在静态方法中...

    所谓“块”,就是用{}所包含的代码段,它们在逻辑上常常是一个整体。初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他类等功能。初始化块的执行顺序在构造方法之前,如果构造方法多次重载,此时可以考虑将构造方法中共通的代码提到初始化块中定义。

    非静态初始化块主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。由于非静态成员不能在静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非要创建对象才执行。`import org.junit.Test;

    public class EqualsTest {
    @Test
    public void test(){
    Print test1 = new Print();
    Print test2 = new Print();
    }
    }

    class Print{
    {
    System.out.println(“非静态代码块”);
    }
    static{
    System.out.println(“静态代码块”);
    }

    }`
    结果:

    静态初始化块与非静态初始化块有一定的区别,静态的初始化块比非静态初始化块执行要早,而且静态初始化块只执行一次,非静态的初始化块可执行多次。静态初始化块的执行时机需要注意,它在类加载器第一次加载类时调用,不一定非要创建对象,例如使用类名.静态方法名。

    展开全文
  • 执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。 ...

    众所周知在JAVA编程语言中有两种初始化块:

    • 静态初始化块
    • 非静态初始化块

    他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别

    静态初始化块

    定义:

            static{}

    执行优先级高于非静态的初始化块,它会在对象装载到系统的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

    执行优先级:1

    非静态初始化块

    定义:

            {}

    执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

    执行优先级:2

    package temp;
    
    public class TempStatic {
    	//自定义变量
    	public int num=0;
    	//创建的一个对象但是并没有实例化,我们把实例化交给非静态初始化块
    	public TempStaticOne temp;
    	//非静态初始化块
    	{
    		System.out.println("我是非静态初始化块..");
    		this.num=1;
    		this.temp = new TempStaticOne();
    	}
    	//静态初始化块
    	static{
    		System.out.println("我是静态初始化块...");
    	}
    	//构造函数
    	public TempStatic(){
    		System.out.println("我是构造方法..");
    	}
    	//自定义方法
    	public void Show(){
    		System.out.println("变量最终结果为:"+num);
    	}
    }
    

    执行结果:

    我是静态初始化块...
    我是非静态初始化块..
    我是非静态方法初始化对象的测试..
    我是构造方法..
    变量最终结果为:1

    转载于:https://my.oschina.net/u/2000675/blog/842480

    展开全文
  • 如果初始化块前有static关键字修饰,那么该初始块称为静态初始块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始块中,因此,静态初始块主要用于初始化静态变量和静态方法。静态初始块只调用一次,是在...

    静态初始块和非静态初始块有什么区别?

    非静态初始块主要用于对象的初始化操作,在每一次创建对象时都要调用一次,其执行顺序在构造方法之前。
    如果初始化块前有static关键字修饰,那么该初始块称为静态初始块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始块中,因此,静态初始块主要用于初始化静态变量和静态方法。静态初始块只调用一次,是在类被第一次加载到内存时,并非一定要创建对象才执行。
    静态初始块的执行顺序是在非静态初始块之前,因此比非静态初始块执行的要早。

    
    
    public class Tset01 {
    	public static void main(String[] args) {
    			T a=new T();
    			T a1=new T();
    	}
    }
    	class T{
    		{
    			System.out.println("非静态初始化块");
    		}
    		static {
    			System.out.println("静态初始化块");
    		}
    		public  T() {
    			System.out.println("无参的构造方法");
    		}
    		}
    
    
    ``
    
    
    展开全文
  • 1. 非静态 1.1 声明格式 修饰符 class 类名 { ... { //非静态代码的内容 ... } ... } 1.2 非静态代码中的代码什么时候执行 ①在每次创建对象的时候执行 ②比构造器早 测试代码: class MyClass { ...

    1 非静态代码块

    非静态代码块特点

    ①可以为实例变量(非静态的属性)初始化

    ②每次创建对象的时候,都会执行一次,且先于构造器执行

    ③若有多个非静态的代码块,那么按照定义的顺序从上到下依次执行

    ④代码块中既可以调用非静态的变量和方法,也可以可以调用静态的变量和方法

    测试代码:

    public class BlockTest {
        public static void main(String[] args) {
            MyClass my1 = new MyClass();
            //MyClass my2 = new MyClass("java");
        }
    }
    
    class MyClass {
        private String str;
    
        {
            System.out.println("非静态代码块1");
        }
    
        public MyClass() {
            System.out.println("无参构造");
        }
    
        public MyClass(String str) {
            this.str = str;
            System.out.println("有参构造");
        }
    
        {
            System.out.println("非静态代码块2");
        }
    }
    

    运行结果

    非静态代码块1
    非静态代码块2
    无参构造

    2 实例初始化

    实例初始化过程:创建对象时,为对象进行初始化的操作
    ①为成员变量显式赋值
    ②执行非静态代码块
    ③执行构造器

    Java编译器会把这三个部分的代码,合成一个叫做 <init>([形参列表]) 实例初始化方法
    即编译后的.class字节码信息中,是没有构造器这个概念。

    <init>([形参列表]) 实例初始化方法的代码就是由三个部分组成:
    ①成员变量显式赋值的代码
    ②非静态代码块中的代码
    ③构造器中的代码

    其中①和②按定义顺序依次执行,③最后执行。

    而且,有几个构造器,就会有几个实例初始化方法。那么当你创建对象的时候,调用对应的构造器时,其实执行的是对应的实例初始化方法 <init>([形参列表])

    代码示例:

    public class InitTest {
        public static void main(String[] args) {
            Demo d1 = new Demo();
            //Demo d2 = new Demo("java");
        }
    }
    
    class Demo{
    
        {
            System.out.println("非静态代码块1");
        }
    
        private String str = assign();//调用方法,为str进行显式赋值
    
        public Demo(){
            System.out.println("无参构造");
        }
        public Demo(String str){
            this.str = str;
            System.out.println("有参构造");
        }
    
        {
            System.out.println("非静态代码块2");
        }
    
        public String assign(){
            System.out.println("为成员变量赋值");
            return "hello";
        }
    }
    

    3 子类实例初始化

    (1)先执行父类的实例初始化方法

    它由三部分组成:

    1. 成员变量的显式赋值

    2. 非静态代码块

    3. 构造器

    (2)再执行子类的实例初始化方法

    它由三部分组成:

    1. 成员变量的显式赋值

    2. 非静态代码块

    3. 构造器

    super()或super(实参列表) 表面是调用父类的构造器,其实是调用父类对应的实例初始化方法

    super()或super(实例列表) 表面是在子类构造器的首行,其实是在子类实例初始化方法的首行

    代码示例:

    public class InitTest2 {
        public static void main(String[] args) {
            Son s = new Son();
        }
    }
    
    class Father {
        private String strFather = assignFather();
        
        {
            System.out.println("父类的非静态代码块");
        }
        
        public Father(){
            System.out.println("父类的无参构造");
        }
        
        public String assignFather(){
            System.out.println("父类的assignFather()");
            return "father";
        }
    }
    
    class Son extends Father {
        private String strSon = assignSon();
        
        {
            System.out.println("子类的非静态代码块");
        }
        
        public Son(){
            //super() ==> 调用父类的实例初始化方法,而且它在子类实例初始化方法的首行
            System.out.println("子类的无参构造");
        }
    
        public String assignSon(){
            System.out.println("子类的assignSon()");
            return "son";
        }
    }
    

    运行结果:

    父类的assignFather()
    父类的非静态代码块
    父类的无参构造
    子类的assignSon()
    子类的非静态代码块
    子类的无参构造

    子类为成员变量显式赋值方法重写父类显式赋值方法时,调用的子类重写的方法,代码示例:

    public class InitTest3 {
        public static void main(String[] args) {
            Son s = new Son();
        }
    }
    
    class Father {
        private String strFu = assign();
    
        {
            System.out.println("父类的非静态代码块");
        }
    
        public Father(){
            System.out.println("父类的无参构造");
        }
    
        public String assign(){
            System.out.println("父类的assign()");
            return "father";
        }
    }
    
    class Son extends Father {
        private String strSon = assign();
    
        {
            System.out.println("子类的非静态代码块");
        }
    
        public Son(){
            //super()  ==>调用父类的实例初始化方法,而且它在子类实例初始化方法的首行
            System.out.println("子类的无参构造");
        }
    
        public String assign(){
            System.out.println("子类的assign()");
            return "son";
        }
    }
    

    运行结果:

    子类的assign()
    父类的非静态代码块
    父类的无参构造
    子类的assign()
    子类的非静态代码块
    子类的无参构造

    展开全文
  • 静态域(也叫做类变量) 如果将域(成员变量)定义为static形式,这个域就叫做静态域  特点: 这个类的所有实例将共享这个静态域。 即使没有创建该类对象,这个静态域也存在。它属于类,不属于任何独立的对象...
  • 非静态代码和实例初始化方法 类的成员: (1)属性 (2)方法 (3) 构造器 类的第四成员:代码 作用:为属性初始化 一、非静态代码 1、语法格式: 【修饰符】 class 类名 【extends 父类】{ { 非静态的代码...
  • 初始化块(非静态)

    千次阅读 2009-07-12 10:29:00
    一:初始化块——非静态初始化块 变量的赋值,有两种常用的方式。 1:变量声明中赋值。 2:构造函数中赋值。 事实上,java提供了第三种机制——初始化块。 例如:class InitBlock { //构造函数赋值 public ...
  • 类的静态方法及初始化块

    千次阅读 2015-09-16 22:47:25
    类的静态方法和变量属于类,而不是类实例对象。 类的静态成员变量只存储一份数据供所有对象共用。 使用静态成员变量和方法可以实现多个对象之间的数据共享,而不会破坏封装(数据隐藏)的原则,这不但 保证了安全性...
  • 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。  2. 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!!  3. 一般用“类名.类属性/方法”来调用。(也可以...
  • 内容均为网上收集整理,供自己学习做笔记用 一,原理: ...反而非静态初始化块则不是这样的,每次new他都会执行一次,执行顺序先静态再非静态。 无论是静态或者是非静态,它们的执行顺序都会在构造方法.
  • ​ 1、为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化 ​ 2、对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享! ​ 3、一般用“类名.类属性/方法”来调用。(也...
  • 在Java中,有两种初始化块:静态初始化块和非静态初始化块。它们都是定义在类中,用大括号{}括起来,静态代码块在大括号外还要加上static关键字。 非静态初始化块(构造代码块): 作用:给对象进行初始化。对象一...
  • 静态代码非静态代码的区别

    千次阅读 2018-06-02 16:19:34
    摘自原文小结:1、静态代码是在类加载时自动执行的,非静态代码在创建对象自动执行的代码,不创建对象不执行该类的非静态代码。 顺序: 静态代码--》非静态代码--》类构造方法。2、在静态方法里面只能直接...
  • 1. 初始化块:  1) 在类中可以定义和方法平行的代码块,例如:public class A { { /* 初始化块 */ } ... },即直接用花括号括起来的代码块;  2) 这种代码块就是初始化代码块,用于给数据成员初始化,里面可以调用...
  • java中我们通常将static修饰的代码,称为静态代码,随类存在,仅在类初始化时执行一次,那么类在什么时候初始化,主要有以下六种:  1)创建类的实例,也就是new一个对象  2)访问某个类或接口的静态变量,...
  • 我们知道java中类的生命周期为装载、连接、初始化、使用和卸载五个过程,如下图所示:1.加载 我们编写一个java的源文件,经过编译后生成一个后缀名为.class的文件,这结合四字节码文件,java虚拟机就识别这种文件,...
  • Java构造器和初始化块

    2020-09-25 15:48:06
    静态初始化块 也叫类初始化块,属于类的静态成员,同样需要遵循静态成员不能访问非静态成员的规则。普通初始化块负责对对象执行初始化,类初始化块则负责对类进行初始化。类初始化时,系统执行静态初始化块静态...
  • 在Java笔试中,构造方法、实例初始化、静态初始化执行顺序,是一个经常被考察的知识点。  像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下)  运行下面的代码,输出的结果是... 1 class A { ...
  • JAVA初始化块简单讲解

    2019-04-28 08:22:38
    在学习JAVA初始化块的时候,初始化分为两种:初始化块、静态初始化块,那么接下来要讲的是它们有什么特点,有什么作用。 第一个要讲的是初始化块,初始化块是不使用static修饰的,初始化块的作用是初始化数据它和...
  •  被static修饰的属性称为静态属性,这类属性一个最本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问...
  • 1. 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。 2. 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!! 3. 一般用“类名.类属性/方法”来调用。(也可以通过...
  • static和final以及初始化

    千次阅读 2019-07-15 00:28:29
    在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。 说道用途就首先介绍static的特点: 当声明一个...
  • 构造代码给所有对象进行统一初始化,而构造函数给相应对象进行初始化, 如传递的参数类型不同,运行的构造函数不同,而代码是创建了对象后就直接运行,与参数无关且优先于有参数传递构造函数。 外如果构建的类...
  • 构造方法中,this 总是指向正要初始化的对象。  使用 this 关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法 中用,并且必须位于构造方法的第一句。  this 不能用于 static 方法中 static ...
  • (2)如果一段初始化代码对所有构造器完全相同,且无需接收参数,那就可以将其提取到非静态初始化代码块中; (3)实际上,经过编译后,非静态块已经添加到构造器中,且位于所有构造器代码的前面。 静态初始化块:...
  • Java初始化块和单例类

    2019-05-02 14:36:58
    Java初始化块和单例类 开发工具与关键技术:工具:myeclipse 技术: static,synchronized ...使用static修饰的是静态初始化块。 普通初始化块 (1) 初始化块相当于是对构造器的补充,用于创建对象时给对象的初...
  • 类的特点 类是对象的类型 具有相同属性和方法的一组对象的集合 属性——对象具有的各种特征,每个对象的每个属性都拥有特定值 方法——对象执行的操作 类是抽象的概念,仅仅是模板,比如说:“手机”对象是一个...
  • 问题:字段初始值设定项无法引用非静态字段、方法或属性的问题 下面代码出错的原因,在类中定义的字段为什么不能用? (1) public string text = test(); //提示 字段或属性的问题字段初始值设定项无法引用非静态...
  • 非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。 静态变量   可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 静态变量有两种情况:   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,001
精华内容 35,200
关键字:

属于非静态初始化块特点的是