跟我一起学JAVAEE吧——JAVA_SE篇——day08上课笔记(static修饰符详解用法,接口看了就会用)

day 08

static修饰符

  • static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

  • 一旦使用了static修饰成员方法,那么这个就变成了静态方法,静态不属于对象,而是属于类

  • 如果没有static关键字,那么调用方法必须创建对象,然后通过对象使用,如果有了static关键字,那么不需要创建对象,通过类名可以调用

  • 静态不能访问非静态(因为在内存中是先加载静态内容,然后加载非静态)

  • 静态方法中不能使用this(this代表当前对象,谁调用代表谁,this在静态内容之后加载所以不能使用)

  • static变量

    • 一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量
    • 两者区别:对于静态变量在内存中只有一个拷贝,jvm只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问;对于实例变量,每创建一个实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响
  • 静态方法

    • 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态成员变量和成员方法
  • static代码块
    • 格式

      static{...}
      
    • 特点:当第一次用到这个类的时候,静态代码块执行唯一的一次,静态的内容优于非静态的,所以静态代码块比构造方法先执行

    • 用途:用来一次性对静态成员变量赋值

接口

  • Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

    扫描二维码关注公众号,回复: 11426702 查看本文章
  • 接口就是多个类的公共规范

  • 接口是一种引用数据类型,最重要的内容:抽象方法

  • 接口的特点:

    • 接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图
    • 一个接口就是描述一种能力或规范,比如USB规范,键盘,鼠标,U盘等只要遵守了USB规范,就能连接USB硬件接口进行数据传输
  • 不同的JDK版本,或许有些不一样

    • 如果是JDK7,接口的内容只能有
      • 常量
      • 抽象方法
    • 如果是JDK8,接口中的内容可以包含
      • 默认方法
      • 静态方法
    • 如果是JDK9,接口中还可以有
      • 私有方法
  • 格式:在class换成interface后,编译成的字节码文件仍然是.java->class

    	public interface 接口名称{
        
    	}
    
  • 接口中所有的方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来实现的,接口中的属性默认是public static final,抽象方法默认是public abstract

    	public interface In1{//声明一个接口in1
            int a=10;//public static final int a=10;
            void display();//public abstract void display();
        }
    
    	//实现类去实现接口
    	class TestClass implements In1{
            public void display(){
                System.out.println("实现了接口中的display方法");
            }
        }
    
    	//测试类利用Testclass实现接口
    	public ClassTest{
            public static void main(String[] args){
                TestClass t =new TestClass();
                t.display();
                System.out.println(a);
            }
        }
    

    实现了接口中的display方法

    10

  • 接口的使用

    • 和抽象类一样,不能直接创建对象
    • 需要一个实现类来继承接口
    • 接口的实现类是必须覆盖重写所有的抽象方法()
  • 注意事项

    • 接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
    • 这两个可以省略(public abstract)
    • 方法的三要素可以随意定义(方法名,参数列表,返回值)
  • 接口中的方法,

    • 接口中的默认方法:可以通过接口实现类对象直接调用
    • 接口中的默认方法:也可以被接口实现类进行覆盖重写
    • 接口中的抽象方法:可以被实现类重写并用对象调用
  • 使用接口时注意

    • 接口中没有静态代码块
    • 接口中没有构造方法
    • 一个类可以实现多个接口
    • 如果实现多个接口有重名的默认方法,必须重写
    • 一个类继承一个直接父类,实现了一个接口,其中的方法产生冲突,会优先使用父类的方法
  • 类和接口的继承以及实现

    • 类和类之间是单继承的,但是可以多重继承

    • 类和接口是可以多实现,一个类可以实现多个接口

    • 接口和接口之间是可以多继承的

  • 举例

    • 如果某个设备需要向电脑中读取或者写入东西,这些设备一般都是采用USB的规范与电脑连接的,只要带有USB功能的设备就可以插入电脑中使用,那么我们可以认为USB就是一种功能,这种功能能够做出很多的事情,其实USB就可以看做是一种标准,一种接口,只要实现了USB标准的设备我就认为你已经拥有了USB这种功能

    • 声明USB接口

      	public interface Usb{
              void read();
              void write();
          }
      
    • 写一个U盘类和键盘类,去实现usb接口

      	class Upan implements Usb{
              @override
              public void read(){
                  System.out.println("U盘正在通过usb功能读取数据");
              }
              @override
              public void write(){
                  System.out.println("U盘正在通过usb功能写入数据");
              }
          }
      
      	class Jpan implements Usb{
              @override
              public void read(){
                  System.out.println("键盘正在通过usb功能读取数据");
              }
              @override
              public void write(){
                  System.out.println("键盘正在通过usb功能写入数据");
              }
          }
      
    • 定义一个测试类

      public class MainTest{
          public static void main(String[] args){
              Upan upan=new Upan();//定义一个Upan的对象
              upan.read();//通过upan对象调用成员方法以实现接口方法
              upan.write();//实现write()方法
              Jpan jpan=new Jpan();
              jpan.read();
              jpam.write();
          }
      }
      

      U盘正在通过usb功能读取数据

      U盘正在通过usb功能写入数据

      键盘盘正在通过usb功能读取数据

      键盘盘正在通过usb功能写入数据

    • 重点 我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的;但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法

      //通过向上转型的方法
      public class MainTest{
          public static void main(String[] args){
              Usb upan=new Upan();//Usb接口类引用可以指向一个实现了Usb接口的对象
              upan.read();//通过upan对象调用成员方法以实现接口方法
              upan.write();//实现write()方法
              Usb jpan=new Jpan();
              jpan.read();
              jpam.write();
          }
      }
      

      U盘正在通过usb功能读取数据

      U盘正在通过usb功能写入数据

      键盘盘正在通过usb功能读取数据

      键盘盘正在通过usb功能写入数据

猜你喜欢

转载自blog.csdn.net/weixin_44115522/article/details/107521561
今日推荐