JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍

JAVA面向对象之代码块与继承

代码块分类

局部代码块
作用:限制变量生命周期
书写位置:在方法中
构造代码块
开发中很少使用
书写位置:类中  方法外
调用时机:如果你有构造代码块 系统会帮你调用 帮你在创建对象时调用
静态代码块(一定是被static修饰)
依赖类 随着类的加载而加载
注意:只加载一次(系统只创建一次 不管你调用多少对象)
应用场景:U盘装载驱动程序(第二次插入U盘,不会再加载驱动程序)
         加载驱动(数据库驱动 JDBC)
同步代码块(多线程)
这里暂时不做介绍 后续给予说明

代码示例

public class Demo24 {
           //第三代码块
    {
         int a = 10;
         System.out.println(a);
         System.out.println("我是Demo24构造代码块");
    }
    public static void main(String[] args){
        Person2 person = new Person2();
        person.name = "张三";
        person.age = 15;
        person.sayHi();
        System.out.println("我是main函数中得普通方法");
        {
            System.out.println("我是局部代码块");
        }
        Person2 person1 = new Person2("李四",22);
    }
}
class Person2{
    String name;
    int age;
    //第一个代码块
    static {
          System.out.println("我是person类的静态代码块");
    }
    //第二个代码块
    {
        //每一个对象 都会调用同一个方法 这时可以使用
           sleep();
           System.out.println("我是构造代码块");
    }
    public Person2(){
           System.out.println("我是无参数的构造方法");
    }
    public Person2(String name, int age){
          this.name = name;
          this.age = age;
          System.out.println("我是有参数的构造方法");
    }

    public String getName(){
            return name;
    }
    public void setName(){
            this.name = name;
    }
    public int getAge(){
            return age;
    }
    public void setAge(int age){
             this.age = age;
    }

    public void sayHi(){
           System.out.println("姓名:" + name + "年龄:" + age);
    }

     public void sleep(){
          System.out.println("睡觉");
     }
}

运行结果
我是person类的静态代码块
睡觉
我是构造代码块
我是无参数的构造方法
姓名:张三年龄:15
我是main函数中得普通方法
我是局部代码块
睡觉
我是构造代码块
我是有参数的构造方法
姓名:李四年龄:22
解释
当程序运行时 会先加载Demo01.class文件,进入.class文件后,会寻找静态代码块,如果没有,会继续寻找构造代码块,由于没有
Demo24类的实例对象,所有构造代码块与构造方法均不会执行,如果另外新建一个类,Demo25,在Demo25类中建立Demo24类的实例
对象,Demo24类中的构造代码块与构造方法便会执行,之后会首先寻找main函数,找到main函数后,(局部代码块定义在方法中,在该
方法中并没有优先级)会首先遇到Person2类,遇到Person2 person = new Person2();这时会加载Person2类,
加载Person2.class文件,静态代码块与静态方法和静态属性一样,会随着类的加载而加载,存放在方法区的静态区,与对象无关,所
以在加载Person2.class文件时,会将static代码块一同加载,所有会输出'我是Person类的静态代码块',之后需要new一个对象,
继续执行Person2类中的代码,执行时,会先寻找有没有构造代码块(构造代码块存放在类中方法外,优先级高于构造方法);发现有构
造代码块,即先执行构造代码块,构造代码块中有sleep方法,故先执行sleep方法,打印'睡觉',之后执行下一句,打印'我是构造代码
块',构造代码块执行之后,会执行相应的构造方法(有参或者无参),构造代码块优先于构造方法执行,与构造代码块的位置无关,new
对象的时候没有传递参数,所有这里调用无参构造方法,打印'我是无参数的构造方法',之后回到Demo01函数,对对象中的变量进行赋
值,赋完值后,调用对象的sayHi方法,打印
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值