• 局部代码块和构造代码块


    局部代码块

     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
    哇哇······

    
    

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

     
  • 相关阅读:
    linux 进程
    VFS dup ,dup2
    文件操作 之 各类函数
    文件系统之 stat与access
    xml文件
    Java学习笔记42(数据库连接池 druid连接池)
    java学习笔记41(数据库连接池 C3p0连接池)
    java学习笔记39(sql事物)
    java学习笔记38(sql注入攻击及解决方法)
    java学习笔记37(sql工具类:JDBCUtils)
  • 原文地址:https://www.cnblogs.com/mmlovejj/p/4438180.html
Copyright © 2020-2023  润新知