热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【java】关键字、代码块、接口、枚举学习笔记

主要内容1关键字2代码块3接口4枚举1Java中的关键字1.1static关键字用一句话说就是:可以直接通过对象.的形式使用,不用new实

主要内容

1 关键字

2 代码块

3 接口

4 枚举


1 Java中的关键字


1.1 static关键字

用一句话说就是:可以直接通过对象.的形式使用,不用new实例化调用
在这里插入图片描述


  • static关键字 :
    • 静态的意思 , 可以修饰变量 , 也可以修饰方法 , 被static修饰的成员 , 我们叫做静态成员
  • static特点 :
    • 静态成员被所在类的所有对象共享
    • 随着类的加载而加载 , 优先于对象存在
    • 可以通过对象调用 , 也可以通过类名调用 , 建议使用类名
  • public class Student {String name;int age;static String school;public void show() {System.out.println(name + "---" + age + "---" + school);}
    }
    /*static关键字的特点 :1 静态成员被该类的所有对象的进行共享2 静态成员可以通过类名调用 , 也可以通过对象进行调用 , 推荐使用类名3 静态成员随着类的加载而加载 , 优先于对象存在*/
    public class StudentTest {public static void main(String[] args) {Student.school = "清华大学";Student s = new Student();s.name = "张三";s.age = 23;s.show();Student s2 = new Student();s2.show();}
    }

  • static关键字的注意事项
    • 静态方法中只能调用静态成员
    • 非静态方法中可以调用任何成员
    • 静态方法中不能存在this关键字

1.2 final关键字

在这里插入图片描述


  • final关键字 : 翻译中文代表最终的意思 , 是java的一个关键字 也是一个修饰符 , 可以修饰类 , 可以修饰方法 , 也可以修饰变量

  • final关键字修饰的特点

    • final修饰的类 : 不能被继承 , 没有子类(太监类)
    • fina修饰的方法 : 不能被重写
    • final修饰的变量
      • 基本数据类型 : 值不能改变
      • 引用数据类型 : 地址不可发生改变 , 对象的属性可改变
      • 注意 :
        • 被final修饰的变量 , 我们叫做自定义常量 , 命名规范 : 每个字母需要大写 , 多个单词之间用下划线分割
        • final修饰成员变量需要注意初始化时机的问题 , 1) 直接赋值 , 2) 在构造方法执行完毕前赋值
  • package com.itheima.final_demo;/*final的特点final修饰的类 , 不能被继承, 也就是没有子类final修饰的方法 , 不能被重写final修饰的变量基本数据类型 : 值不可以发生改变引用数据类型 : 地址不可发生改变 , 对象的内容可以发生改变注意 :1 被final修饰的变量 , 我们叫做自定义常量 , 命名规范 : 每个字母需要大写 , 多个单词之间用下划线分割2 final修饰成员变量需要注意初始化时机的问题1) 直接赋值2) 在构造方法执行完毕前赋值*/
    public class FinalDemo1 {public static void main(String[] args) {// final修饰的基本数据类型变量 , 值不能被修改
    // final int num = 10;
    // num = 20;
    // System.out.println(num);final int[] arr = {1, 2, 3, 4, 5};// final修饰的引用数据类型 , 地址不可改发生改变// arr = new int[3];// final修饰的引用数据类型 , 对象中的内容可以发生改变arr[0] = 100;}
    }// final修饰的类 , 不能被继承, 也就是没有子类
    //final class Person {
    //
    //}class Person {// final修饰的方法 , 不能被重写public final void eat() {}
    }class Student extends Person {// final修饰成员变量需要注意初始化时机的问题// 要么直接赋值 , 要么在构造方法执行完毕前赋值// final int num = 10;final int num;public Student() {num = 100;}// @Override
    // public void eat() {
    // super.eat();
    // }
    }


1.3 Java中的权限修饰符

在这里插入图片描述


  • public – protected – 默认的 – private

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXHKRPAC-1653405452208)(\img\image-20210331215542736.png)]

    package com.itheima.permissions_demo1;/*public -- protected -- 默认的 -- private*/
    public class Fu {public void method1() {}protected void method2() {}void method3() {}private void method4() {}// 同一个包中同一个类public void show(){method1();method2();method3();method4();}}
    ===================================================package com.itheima.permissions_demo1;public class Test {// 同一个包中 , 无关类public void show(){Fu f = new Fu();f.method1();f.method2();f.method3();// f.method4();}
    }
    ====================================================
    package com.itheima.permissions_demo1;public class Zi extends Fu {// 用一个包中 , 有子类父关系public void show(){method1();method2();method3();// method4();}
    }

    package com.itheima.permissions_demo2;import com.itheima.permissions_demo1.Fu;public class Test {// 不同包中 , 无关类public void show(){Fu f = new Fu();f.method1();// f.method2();// f.method3();// f.method4();}
    }======================================package com.itheima.permissions_demo2;import com.itheima.permissions_demo1.Fu;public class Zi extends Fu {// 不同包中 , 有子类父关系public void show(){method1();method2();// method3();// method4();}
    }


2 代码块


2.1 构造代码块

在这里插入图片描述


  • 构造方法块 : 用一对大括号表示, 定义在类中方法外
  • 执行时机 : 每次构造方法执行前, 都会执行构造代码块
  • 作用 : 抽取构造方法中共性内容

package com.itheima.code_block;
/*构造代码块*/
public class Student {final int NUM;{NUM = 10;System.out.println("构造代码块...");}public Student() {System.out.println("空参构造...");}public Student(int a) {System.out.println("有参构造...");}
}class StudentTest {public static void main(String[] args) {Student s = new Student();Student s2 = new Student(10);}
}

2.2 静态代码块


  • 静态代码块 : 在一对大括号前加上static关键字 , 定义在类中方法外

  • 执行时机 : 随着类的加载而加载 , 只加载一次

  • 作用 : 一般用于给静态成员初始化

    package com.itheima.code_block.static_demo;
    /*静态代码块 :1 定义的位置 : 在一对大括号前加上static , 定义在类中方法外2 执行时机 ; 随着类的加载而执行, 只加载一次3 可以给类中的静态成员进行初始化数据*/
    public class Test {public static void main(String[] args) {new Student();new Student(10);}
    }

class Student {
static {
System.out.println(“静态代码块”);
}

public Student() {System.out.println("空参构造");
}public Student(int a) {System.out.println("有参构造");
}

}

### 2.3 局部代码块- 成员代码块 : 用一对大括号表 , 可以定义在任何的局部位置 , 方法中居多
- 执行时机 : 正常执行(从上往下依次执行)
- 控制变量的局部变量的声明周期​```java
package com.itheima.code_block.local_demo;
/*局部代码块 :1 位置 : 可以定义任何的局部的位置 , 方法中居多2 执行时机 : 正常执行(从上往下依次执行)3 作用 : 控制变量的生命周期 , 变量在使用完毕, 及时释放内存
*/
public class Test {public static void main(String[] args) {int num1 = 10;System.out.println(num1);// 局部代码块{int num2 = 20;System.out.println(num1);System.out.println(num2);}System.out.println(num1);
// System.out.println(num2);// 作用域不够 , 报错}
}

3 接口

在这里插入图片描述
在这里插入图片描述


3.1 接口的介绍


  • 接口 : 如果一个类中都是抽象方法 , 那么这个类应该是定义规则的类 , 我们应该把此类定义成接口,接口是一种引用数据类型
  • 作用 :
    • 用于定义规则
    • 程序的扩展性

3.2 接口的定义和特点


  • 定义接口的关键字使用interface
    • public interface 接口名{ … }
  • 类与接口之间的关系是实现关系 , 用关键字implements进行连接
    • public class 类名 implements 接口名 { … }
  • 接口不能实例化
  • 接口的子类我们叫做实现类
    • 要么重写接口中所有的抽象方法
    • 要么实现类是一个抽象类
  • 注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口,调用逗号分隔 , 还可以继承一个类的同时 , 实现多个接口

package com.itheima.interface_demo;public interface Inter {public abstract void show();public abstract void method();
}interface Inter2 {}

package com.itheima.interface_demo;public class InterImpl extends Object implements Inter ,Inter2{@Overridepublic void show() {}@Overridepublic void method() {}
}

package com.itheima.interface_demo;/*1 定义接口的关键字使用interfacepublic interface 接口名{ ... }2 类与接口的关系是实现关系 , 使用implements进行连接public class 类名 implements 接口名{ ... }3 接口不能实例化(不能创建对象)4 接口的子类,我们叫做实现类要么重写接口中所有的抽象方法要么这个实现类是一个抽象类注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口还可以继承一个类的同时 , 实现多个接口*/
public class InterfaceDemo1 {public static void main(String[] args) {// 接口不能实例化(不能创建对象)// Inter inter = new Inter();}
}

3.3 接口的成员特点


  • 成员变量 : 都是常量 , 默认修饰符 public static final
  • 构造方法 : 没有构造方法
  • 成员方法 : 只能是抽象方法 , 默认修饰符public abstract
    • 关于JDK8和JDK9版本对接口增加了一些方法新特性

package com.itheima.interface_demo;public interface Inter {// 是一个常量 , 默认修饰符 public static finalpublic static final int num = 10;// 不存在构造方法// public Inter(){}public abstract void show();public abstract void method();
}interface Inter2 {}

public class InterfaceDemo1 {public static void main(String[] args) {// 接口不能实例化(不能创建对象)// Inter inter = new Inter();// 成员变量被static修饰System.out.println(Inter.num);// 是一个常量 , 只能赋值一次// Inter.num = 20;}
}

3.4 接口的案例

package com.itheima.interface_demo.interface_test;public interface player {public abstract void play();public abstract void pause();public abstract void stop();
}

package com.itheima.interface_demo.interface_test;public class MP3 implements player {@Overridepublic void play() {System.out.println("MP3开始播放音乐");}@Overridepublic void pause() {System.out.println("MP3开始暂停");}@Overridepublic void stop() {System.out.println("MP3开始关闭音乐");}
}

package com.itheima.interface_demo.interface_test;public class MP4 implements player {@Overridepublic void play() {System.out.println("MP4播放音乐");}@Overridepublic void pause() {System.out.println("MP4暂停音乐");}@Overridepublic void stop() {System.out.println("MP4关闭音乐");}
}

package com.itheima.interface_demo.interface_test;
/*需求 :1 创建一个播放接口 player2 定义三个抽象方法 , 播放(play),暂停(pause),停止(stop)3 定义MP3类,MAP4类,手机类,实现接口,重写抽象方法*/
public class PlayerTest {public static void main(String[] args) {MP3 mp3 = new MP3();mp3.play();mp3.pause();mp3.stop();System.out.println("=============");MP4 mp4 = new MP4();mp4.play();mp4.pause();mp4.stop();}
}

3.5 接口中成员方法的特点


  • DK8版本之前 : 只能是抽象方法
  • JDK8版本 :
    • 默认方法
      • JDK8可以在接口中定义非抽象方法(带有方法体的方法) , 需要使用default进行修饰 , 其实就是默认方法
      • 作用 : 解决接口升级的问题
      • 格式 : public default 返回值类型 方法名(参数) { … }
      • 注意事项 :
        • 默认方法不是抽象方法 , 可以继承 , 也可以重写 , 重写需要去掉default关键字
        • public 可以省略 , default不能省略
        • 如果实现类实现了多个接口 , 有相同的方法声明 , 那么实现类必须重写该方法
    • 静态方法
      • JDK8可以在接口中定义静态方法 , 也是有方法体的方法
      • 作用 : 方便调用此功能
      • 格式 : public static 返回值类型 方法名(参数){ … }
      • 注意事项
        • 静态方法只能通过接口名调用 , 不能通过实现类名字和对象调用
        • public可以省略 , static不能省略
  • JDK9版本 :
    • 私有方法
      • JDK9中新增私有方法
      • 作用 : 抽取默认方法中共性内容
      • 格式 : private 返回值类型 方法名(参数){ … }
      • 注意 : 要想抽取静态方法中的共性内容 , 需要对私有方法加上关键字static

4 枚举

在这里插入图片描述


  • 枚举 : 当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型

  • 作用 : 更贴切 , 加见名之意

  • 定义 : public enum 枚举名{ … }

  • 使用 : 通过枚举类型名直接引用枚举项即可,例如Sex.BOY、Sex.GIRL
    注意 : 每个枚举项都相当于枚举的对象

  • 案例代码

    package com.itheima.enum_demo;public enum Sex {// 每一个枚举项都是枚举的对象GIRL("女孩"), BOY("男孩"), YAO;// 成员变量private String name;// 空参构造方法private Sex() {}// 有参构造方法private Sex(String name) {this.name = name;}// 成员方法public String getName() {return name;}
    }class Test {public static void main(String[] args) {System.out.println(Sex.GIRL.getName());System.out.println(Sex.BOY.getName());System.out.println(Sex.YAO.getName());}
    }

  • 枚举的本质 :

    • 枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行反编译查看
      • 枚举本质上就是最终类
      • 枚举项,就是枚举类的对象,而且是静态的常量。
      • 有私有的构造方法
      • 静态代码块
      • 继承了lang包下的Enum
  • 组成部分 :

    • 构造器,成员方法,成员变量等 , 但是定义的成分一定要在枚举项之后,而且最后一个枚举项必须要有分号结束。

推荐阅读
  • 在现代多线程编程中,Lock接口提供的灵活性和控制力超越了传统的synchronized关键字。Lock接口不仅使锁成为一个独立的对象,还提供了更细粒度的锁定机制,例如读写锁(ReadWriteLock)。本文将探讨如何利用ReentrantReadWriteLock提高并发性能。 ... [详细]
  • 本文章介绍了如何将阿拉伯数字形式的金额转换为中国传统的大写形式,适用于财务报告和正式文件中的金额表示。 ... [详细]
  • 设计模式笔记12:迭代器模式(Iterator Pattern) ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • 快速排序是基于分治策略的一种排序算法,其平均时间复杂度为O(n log n),在大多数情况下表现优于其他排序算法。本文将详细介绍快速排序的工作原理,并提供一个Java语言的具体实现。 ... [详细]
  • 本文详细探讨了Java中多线程的概念,包括并行与并发的区别,并通过具体实例展示了如何在Java中实现多线程操作,如通过继承Thread类、实现Runnable接口和使用Callable接口等方法。 ... [详细]
  • 快速排序是一种高效的排序算法,以其在多数情况下接近最优的性能而著称。本文将详细介绍如何在 Java 中实现快速排序,并分析其工作原理。 ... [详细]
  • 本文档提供了几个经典的Java编程示例,包括多线程处理、基本程序结构以及简单的逻辑运算,旨在帮助初学者更好地理解和掌握Java语言的核心特性。 ... [详细]
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • 深入理解Play Framework 1.2.7中的缓存机制
    本文探讨了Play Framework 1.2.7版本中提供的缓存解决方案,包括Ehcache和Memcached的集成与使用。文章详细介绍了缓存相关的类及其功能,以及如何通过配置选择合适的缓存实现。 ... [详细]
  • java学习日记对JFrame的操作
    设置背景图片、添加音乐、监控键盘、改变字体风格等等!importjava.applet.Applet;importjava.applet.AudioClip;importjava. ... [详细]
  • 本文探讨了在Android平台下编写和读取.JSON文件的方法,解决读取文件时遇到的字符间异常空格问题。 ... [详细]
  • 深入理解GoF设计模式之单例模式
    本文详细介绍了单例模式,这是一种确保类的实例在整个应用程序生命周期中始终保持唯一的创建型设计模式。文章不仅探讨了单例模式的基本概念和优势,还分析了其潜在的缺点,如违反单一职责原则。此外,文中提供了多种实现单例模式的方法,包括饿汉式、懒汉式、基于DCL的双重检查锁、静态内部类以及基于枚举的实现。 ... [详细]
  • 在上一期文章中,我们探讨了FastDev4Android项目中PullToRefreshListView组件的使用方法。本期将继续探讨该框架中的另一个重要组件——ACache数据缓存器,详细介绍其工作原理及如何在项目中有效利用。 ... [详细]
  • Java类加载详解(类的生命周期)
    https:www.cnblogs.comjhxxbp10900405.html类从被加载到虚拟机内存开始,到卸载出内存为止。解析阶段在某些情况下可以在初始化后再 ... [详细]
author-avatar
手机用户2502901925
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有