局部代码块和构造代码块

局部代码块

 1 package com_package2;
 2
 3 public class Person3Demo {
 4     public static void main(String[]args)
 5     {
 6         Person3 p = new Person3();
 7         p.speak();
 8         Person3 p1 = new Person3("hejinjin",23);
 9         p1.speak();
10         Person3 p2 = new Person3("hejinjin");
11         p2.speak();
12         Person3 p3 = new Person3(238);
13         p3.speak();
14         p1.show();
15         {
16
17             int x = 10;
18         }
19         System.out.println("x="+x);
20
21     }
22
23
24 }

像这种的会出现错误,int x= 10是局部代码块,所以x只在大括号之内有用,除了这个大括号,x将不再起作用,局部代码块是写在main函数里面的。

构造代码块和局部代码块不同,构造代码块是写在类里面的。

package com_package2;

public class Person4 {
    private int age;
    private String name;
    {
        System.out.println("伴随着创建对象而执行,对象创建一次执行一次");

    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    Person4()
    {
        System.out.println("haha");
    }
    Person4(String name)
    {
        this.name = name;

    }
    Person4(String name,int age)
    {
        this.name = name;
        this.age = age;
        System.out.println("heihei");
    }
    public void speak()
    {

        System.out.println("name="+this.name+" "+"age"+this.age);
    }
}
package com_package2;

public class Person4Demo {
    public static void main(String[]args)
    {
        Person4 p = new Person4();

        Person4 p1 = new Person4("hejinjin",23);
        p1.speak();

    }

}

伴随着创建对象而执行,对象创建一次执行一次
haha
伴随着创建对象而执行,对象创建一次执行一次
heihei
name=hejinjin age23

注意观察结果:会发现,伴随着创建对象,这种构造代码块执行,创建一次对象就执行一次构造代码块!

构造代码块:可以给所有对象进行初始化

构造函数:是对对应的对象进行初始化。

 

举一个例子来说:每一个婴儿生下来都会哭,如果

写一个类:

package com_package2;

public class Person4 {
    private int age;
    private String name;
    Person4()
    {

        System.out.println("haha");
        cry();

    }
    Person4(String name,int age)
    {
        this.name = name;
        this.age = age;
        cry();
    }
    Person4(String name)
    {
        this.name = name;
        cry();
    }
    public void speak()
    {

        System.out.println("name="+this.name+"age="+this.age);
    }
    public void cry()
    {
        System.out.println("哇哇······");
    }
}
package com_package2;

public class Person4Demo {
    public static void main(String[]args)
    {
        Person4 p  = new Person4();
        p.speak();
        Person4 p1 = new Person4("hejinjin",34);
        p1.speak();
        Person4 p2 = new Person4("hejinjin");

    }
}

haha
哇哇······
name=nullage=0
哇哇······
name=hejinjinage=34
哇哇······

在这里也就是说,每次创建对象的时候都,为了让婴儿哭,那么在每个构造方法里面都要调用一次cry()函数,这样岂不是非常麻烦,所以构造代码块将改变这种现状



package com_package2;

public class Person4 {
    private int age;
    private String name;
    {
    System.out.println("哇哇······");
    }
    Person4()
    {

        System.out.println("haha");
        //cry();

    }
    Person4(String name,int age)
    {
        this.name = name;
        this.age = age;
        //cry();
    }
    Person4(String name)
    {
        this.name = name;
        //cry();
    }
    public void speak()
    {

        System.out.println("name="+this.name+"age="+this.age);
    }
    //public void cry()
    //{

    //}
}
package com_package2;

public class Person4Demo {
    public static void main(String[]args)
    {
        Person4 p  = new Person4();
        p.speak();
        Person4 p1 = new Person4("hejinjin",34);
        p1.speak();
        Person4 p2 = new Person4("hejinjin");

    }
}

哇哇······
haha
name=nullage=0
哇哇······
name=hejinjinage=34
哇哇······


结果是一样的,构造代码块的作用也就在这里。但是构造代码块一定记得加大括号

 
时间: 2024-10-06 15:50:46

局部代码块和构造代码块的相关文章

静态代码块,构造代码块,局部代码块演示

public class Test{ static int num; static int numObj;//记录有多少个对象产生! static{//静态代码块, 是用来给类进行初始化的! //num = 10; ++num; num *=12;//没有进入静态代码块之前,num的初始化值是0 System.out.println(num); //main(null);//静态代码块中可以调用main, 想一想也是, 大家都是静态的嘛! } //先执行构造代码段, 然后指行构造函数 {//这叫

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

//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行"public class CodeBlock01{ public static void main(String[] args){ { int x=3; System.out.println("1,普通代码块内的变量x="+x); } int x=1; System.out.println("主方法内的变量x="

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

//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” 1 2 public class CodeBlock01{ 3 public static void main(String[] args){ 4 5 { 6 int x=3; 7 Syst

Java静态代码块、构造代码块、构造方法的执行顺序

Java静态代码块.构造代码块.构造方法的执行顺序 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法

父类,子类,静态属性,静态代码块,构造代码块,构造函数,执行顺序

1 package demo; 2 //父类 3 public class FatherClass { 4 5 private static String strFather="父类静态属性----1"; 6 7 static{ 8 System.out.println("父类静态代码块----1"); 9 } 10 11 { 12 System.out.println("父类构造代码块----3"); 13 } 14 15 public Fat

java-普通代码块、构造代码块和静态代码块的区别。

//执行顺序:优先级从高->低:静态代码块->main方法->构造代码块->构造方法. 1.普通代码块.(按顺序执行便可) 2.构造代码块.(直接在类中定义,且没有加static关键字的代码块称为构造代码块.构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数.) 3.静态代码块. //静态代码块:在java中使用static关键字声明的代码块.静态块用于初始化类,为类的属性初始化.每个静态代码块只会执行一次.由于JVM在加载类时会执行静态

关于java中普通代码块、构造代码块与静态代码块

1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现”{普通代码的执行语句}“的就称为普通代码块. *普通代码块执行顺序由他们在代码中出现的次序决定--“先出现先执行” * */ { System.out.println("这里是普通代码块A"); } //new A(); { System.out.println("这里是普通代码块B"); } } 执行结果:这里是普通代

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

//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 <span style="font-size:12px;">//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行" public class CodeBlock01{ public static

10、代码块、构造代码块、静态代码块及main方法之间的关系

1.普通代码块: 在方法或语句中出现在{}之间的类容就称为普通代码块,简称代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”,即顺序执行. 1 /*下面第一个类时合法的,而且下面的这两个类的运行顺序是一模一样的,但一般没人这么写*/ 2 public class Test { 3 { 4 System.out.println("1"); 5 } 6 int x=1; 7 System.out.println("2"); 8 { 9