Java——类和对象8

代码块

代码块的概念以及分类

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块

构造代码块也叫实例代码块

public class MyDate {
    public int year;
    public int month;
    public int day;

    public void setDay(int year,int month,int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
    {
        System.out.println("实例代码块——定义在类的内部,和构造方法同级");
    }
    public void printDay(){
        System.out.println(year+"-"+month+"-"+day);
    }

实例代码块优先于构造方法执行,因为编译完成之后,编译器会将实例代码块中的代码拷贝到每个构造方法第一条语句前。(先静态,再实例,再不带参数的构造方法)

静态代码块 

 使用static定义的代码块成为静态代码块。一般用于初始化静态成员变量。

  •  静态代码不管生成多少个对象,其只会执行一次。
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的,Java代码在经过编译器编译之后,如果要运行必须要先经过类加载子系统加载到JM中才能运行。
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并,最终放在生成的<>方法中,该方法在类加载时调用,并且只调用一次。

总结:static可以修饰成员变量,也可以修饰成员方法,也可以修饰代码块。分别变成静态的成员变量,静态成员方法,静态代码块。

内部类

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。在Java中,可以将一个类定义在另一个类或另一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。

public class OutClass {
    class InnerClass{
        
    }
}
//OutClass是外部类
//InnerClass是内部类

定义在class类名{}外的,即使是在一个文件里,都不能称为内部类。

内部类和外部类共用一个Java源文件,但是经过编译之后,内部类会形成单独的字节码文件。

内部类可以在一个类的哪些位置进行定义?

public class OutClass {
    //成员位置定义:未被static修饰——》普通内部类:
    class InnerClass{
        
    }
    //被static修饰——》静态内部类
    static class InnerClass2{
        
    }
    public void method(){
        //方法中也可以定义内部类——局部内部类(几乎不用):
        class InnerClass5{
            
        }
    }
}

根据内部类定义的位置不同,一般可以分为以下几种形式:

1.成员内部类(普通内部类和静态内部类)

2.局部内部类(不谈修饰符)匿名内部类

成员内部类

在外部类中,内部类定义位置与外部类成员所处的位置相同,因此称为成员内部类。

普通内部类:未被static修饰的成员内部类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值