8.9晨写

本文详细介绍了Java中的代码块(局部、构造和静态)、继承概念及其优势,以及静态关键字的使用。讲解了构造方法在继承中的访问规则,强调了子类构造方法默认访问父类无参构造的重要性,并给出了处理有参构造方法的解决方案。此外,还讨论了静态成员的特性,包括其加载时机和共享性质,以及在实际开发中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.9晨写

1.代码块

代码块:     使用{}括起来的内容
     分类:
          局部代码块,就是在方法定义中使用{}
                  {},作用:就是限定局部变量的生命周期;

           构造代码块:---在类的成员位置定义的{},它有特点:在执行构造方法之前,如果类中有构造代码块,
           优先执行构造代码块,作用:也可以给类的成员的数据进行初始化; (实际开发很少见到构造代码块)

           只要执行构造方法,如果存在构代码块,它必须优先执行,然后才是构造方法...

         静态代码块:
         类就加载一次,静态代码块也就执行一次!
              格式
                      static{ --->跟静态相关的都和类有关系,随着类的加载而加载;

                          里面书写代码

                      }

                     静态代码块,构造方法,构造代码块
                     优先级:静态代码块 > 构造代码块> 构造方法,而且每次执行构造方法之前,优先执行所有的构造构造代码块
package com.qf.code_09;

//定义一个Code类
class Code{
    //静态代码块
    static{
        int x = 1000 ;
        System.out.println(x );
    }

    //无参构造方法
    public Code(){
        System.out.println("code...");
    }
    //构造代码块:类的成员位置
    {
        int x = 100 ;
        System.out.println(x);
    }
    //构造代码块
    {
        int y = 200 ;
        System.out.println(y) ;
    }
    //有参构造方法
    public Code(String name){
        System.out.println("code"+name);

    }

    //静态代码块
    static{
        int y = 2000 ;
        System.out.println(y);
    }
}

//测试类
public class CodeDemo {
    public static void main(String[] args) {
        int x = 10  ;
        System.out.println(x);

        //局部代码块
        {
            int y = 20 ;
            System.out.println(y);
        }
       // System.out.println(y);
        System.out.println("----------------------------------------------") ;
        //通过无参构造方法创建Code类对象
        Code code = new Code() ;
        Code code2 = new Code("hello") ;
    }
}

2.继承

继承:
         将多个类的共性内容抽取出来,放在一个独立的类中,让这个独立的类和其他类产生一种关系
 "继承"---关键字 extends
         格式:
          class 父类名{
                 共性内容:姓名,年龄.....
                 提供公共的访问方法setXXX()/getXXX()
         }
          class 子类名 extends 父类名{}

          继承的好处:
              1)可以提高代码复用性
              2)可以提高代码的维护性,后期便于维护,针对子类和父类进行维护(子父关系明确)
              3)类与类产生的继承关系,是后面讲"多态"的前提条件;


              在Java中有一个开发原则 "低耦合,高内聚"(以后所有的Java设计模式都需要遵循这一个原则)
              耦合性:开发中是永远避免不了,可以降低(耦合:类和类的关系)
              内聚性:指的是某个类完成某个功能的一种能力; 尽量不要产生继承关系来完成一个功能,一个类能完成一个类完成;
              低耦合:降低耦合性,减少类和类的关系;
继承的特点:
          1)在Java语言中,类和的类的关系是一种继承关系,这个继承只能支持"单继承",不支持多继承
                  class 父{}
                  class 父2{}
                  class 子 extends 父,父2{} 多继承:不支持
                   class 子 extends 父{} :正常的语法格式
          2)类和类关系,虽然不支持多继承,但是层层单继承----> 多层继承
注意的问题:
      1.子类继承父类,对于非私有的成员,直接可以继承过来,但是如果私有成员,它可以通过公共的访问可以访问,但是直接访问的;
      2.被私有修饰的东西(成员变量/成员方法),只能在当前类访问的;
  在继承关系中,构造方法的访问问题(重点)
       子类继承父类,子类的所有构造方法都默认访问父类的无参构造方法
       为什么?子类继承父类,会用到父类的数据,需要让父类先进行初始化;   一个类初始化的---肯定需要执行构造方法的
    面试题:
           如果一个父类存在有参构造方法,没有无参构造方法,子类的所有构造会出现什么问题?出现了问题,怎么解决?
 
           子类的所有全部构造方法报错,为什么? 子类继承父类,子类的所有构造方法都默认访问父类的无参构造方法
 
                       方案1:
                             1)手动给出无参构造方法
 
                             2)假设,人家现在就不需要让你给出父类的无参构造方法;
                             就需要让子类的构造方法,显示的访问父类的有参构造方法
 
                             ----要使用关键字 super:代表父类空间标识(代表的父类对象的地址值引用!)
 
                             super() :访问父类的无参构造方法
                             super(xxx) :访问父类的有参构造方法
                             这些super一定是在子类构造方法中的第一句话
 
                            3)保证子类的所有的构造方法某一个构造方法,让父类初始化完毕即可;
                            先通过子类的无参构造方法里面---this(xxx):访问本类(子类)有参构造方法
                            在子类的有参构造方法的第一话:让父类初始化 super(xxx):间接访问父类的有参构造方法
 
               子类继承父类,一定要先执行父类的构造方法,初始化完毕之后;然后才能执行子类的构造方法---分层初始化

3.static

static关键字的特点:
      1)被静态修饰的随着类的加载而加载,优先于对象存在;
      2)不能和this共存;
      3)本身含义就是共享,共用;可以多个对象共享共用;
                  这也是告诉我们,什么将某个属性定义static
                 举例: 饮水机的水----共享,共用
                      自己水杯中的水---不行的

                    或者说:三个窗口同时出售100张电影票,  100张票被三个窗口共用;
      4)被静态修饰的成员变量或者成员方法(静态变量/静态方法) (掌握)
              访问的方式:
                      可以使用对象名来访问
                      但是,对于系统来说(jvm)静态的东西:变量/方法
                      都是类名直接访问;
                      类名.变量名;
                      类名.方法名()

                      上次用的java.lang.Math
                                  public static double random()
                                  Math.random() ;

      静态的使用场景适用于范围:(记忆的)
                  简单记忆:静态只能访问静态;

                          静态方法中只能访问静态变量
                          静态方法只能调用静态方法;
                          非静态方法皆可以访问静态的东西也可以访问非静态的东西;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值