day 12 static使用规则、final关键字、接口

1.static使用规则

1.1 静态属性和静态方法在类加载时被存放到方法区,不创建对象也可以使用
1.2 非静态属性和方法必须在创建对象后,通过对象调用
1.3 静态只能使用静态,非静态没有限制(因为使用非静态时,对象已经创建成功)
在这里插入图片描述
1.4 测试–记录一个类创建对象的次数

public class AbstractClass {
private static int count=0;
public void getCount(){
System.out.println(“已经创建了”+count+“个对象”);
}
//在构造方法中使count++,每创建一个对象,构造方法使用一次,count+1;
public AbstractClass() {
count++;
}
}

//测试类
public class Test {
public static void main(String[] args) {
AbstractClass abstractClass=new AbstractClass();
abstractClass.getCount();
}
}

2.final关键字

1.最终的,final修饰的变量无法再次修改
2.被final修饰的变量一定要初始化,初始化之后无法再次修改
3.对于某些确定不变的变量,使用final关键字,比如圆周率PI

3.被final修饰的东西,有什么属性:

4.被final修饰的方法,无法被子类重写
5.被final修饰的类,无法被子类继承,
6.使用final修饰的对象,地址无法修改,即对象恒指向一个固定的对象/内存空间
7.使用final修饰的对象,其中的属性可以修改
	 final Father father=new Father("张三",45);
        //使用final修饰的对象,地址无法修改,即对象恒指向一个固定的对象/内存空间
//       father=new Father("李四",45);
        //使用final修饰的对象,其中的属性可以修改
        father.name="李四";
8.final也可以修饰形参,但是形参在方法内部无法修改

4.被final修饰的变量,何时初始化

4.1 可以执行初始化操作的顺序 :

  static优先 - 成员变量 - 构造代码块 - 构造方法

4.1.1 static优先:

可以在静态成员变量声明时初始化 也可以在静态代码块中初始化 – 按顺序执行

static修饰的final的变量 -- 初始化时间点

    1. 在static的final修饰的变量声明的时候
    static final int n5 = 50;

   2. 在类中被static修饰的大括号内
   类中被static修饰的大括号  -- 静态代码块
    static final int n6;
    static {
        n6 = 60;
    }

4.1.2 普通成员变量的初始化时机

    1. 在声明的地方可以进行初始化操作
    final int num = 10;

   2. 在直接写在类当中的大括号内,可以进行初始化操作
    直接写在类当中的一对大括号 - 就叫构造代码块
    final int n2;
    {
        n2 = 20;
    }

   3. 在构造方法 (有参构造可以,无参构造也可以)中,也可以进行初始化操作
    final int n3;

    public FinalDemo2(){
        n3 = 30;
        n4 = 40;
    }

    final int n4;

    public FinalDemo2(int x, int y) {
        n3 = x;
        n4 = y;
    }

4.2 总结

 关于final修饰的变量的初始化的时间节点:
       1. 对于静态的来说:
          静态变量声明处 -->  静态代码块当中
       2. 对于一般的成员变量来说:
          成员变量声明处  ---> 构造代码块当中  --> 构造方法中

5.接口

5.1 定义

  接口就是全部是抽象方法的抽象类(JDK1.8之后允许有普通方法)

5.2接口方法

  接口中的方法默认被public abstract修饰 ,即默认公开的,抽象的

5.3 接口变量

1.接口中的成员变量,默认被public final static 修饰,公共的,最终的,最终的,称作公开的静态常量
2.接口中的成员变量属于接口,初始化后无法修改

5.4 接口的实例化

1.接口无法直接实例化,只能借助普通子类实例化
   接口可以使用内部类实例化
InterfaceDemo interfaceDemo=new InterfaceImplement();

2.普通的类实现接口,用implements表示,子类实现接口中所有的抽象方法
3.ctrl+i ,快捷键显示重写的接口抽象方法、实现的抽象方法
  ctrl+o,快捷键重写抽象类抽象方法

5.5 接口的继承和实现

1.继承
	 接口可以被接口继承 
	  接口可以多继承,即一个接口可以继承多个父类接口
	  
2.实现
	1.接口可以被普通类实现
	  普通子类可以实现多个接口
	2.接口可以被抽象类实现

*方框:类
椭圆:接口
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值