黑马程序员——javase进阶——day02——关键字,接口,代码块,枚举

news2024/11/15 19:33:23

目录:

  1. Java中的关键字
    1. static关键字
    2. final关键字
    3. Java中的权限修饰符
  2. 代码块
    1. 构造代码块
    2. 静态代码块
  3. 接口
    1. 接口的介绍
    2. 接口的定义和特点
    3. 接口的成员特点
    4. 接口的案例
    5. 接口中成员方法的特点
  4. 枚举
  5. 随堂小记
    1. 继承
    2. 方法重写
    3. 抽象类
    4. 模板设计模式
    5. static
    6. final
    7. 权限修饰符
    8. 接口
    9. 回顾上午内容:
      1. static关键字
      2. final关键字
      3. 权限修饰符号
      4. 接口
      5. 代码块
      6. 选择语句:
      7. 枚举

1.Java中的关键字

static关键字
  • 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内存图解

  • static关键字的注意事项

    • 静态方法中只能调用静态成员

    • 非静态方法中可以调用任何成员

    • 静态方法中不能存在this关键字

 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();
//    }
}
Java中的权限修饰符
  • public -- protected -- 默认的 -- private
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.代码块

构造代码块
  • 构造方法块 : 用一对大括号表示, 定义在类中方法外

  • 执行时机 : 每次构造方法执行前, 都会执行构造代码块

  • 作用 : 抽取构造方法中共性内容

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);
    }
}

 

静态代码块
  • 静态代码块 : 在一对大括号前加上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.接口

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

  • 作用 :

    • 用于定义规则

    • 程序的扩展性

接口的定义和特点
  • 定义接口的关键字使用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{
    @Override
    public void show() {
    }

    @Override
    public void method() {
    }
}
package com.itheima.interface_demo;

/*
    1 定义接口的关键字使用interface
      public interface 接口名{ ... }
    2 类与接口的关系是实现关系 , 使用implements进行连接
      public class 类名 implements 接口名{ ... }
    3 接口不能实例化(不能创建对象)
    4 接口的子类,我们叫做实现类
        要么重写接口中所有的抽象方法
        要么这个实现类是一个抽象类

    注意 : 类与接口的关系是实现关系 , 一个类可以实现多个接口
    还可以继承一个类的同时 , 实现多个接口

 */
public class InterfaceDemo1 {
    public static void main(String[] args) {
        // 接口不能实例化(不能创建对象)
        // Inter inter = new Inter();

    }
}
接口的成员特点
  • 成员变量 : 都是常量 , 默认修饰符 public static final

  • 构造方法 : 没有构造方法

  • 成员方法 : 只能是抽象方法 , 默认修饰符public abstract

    • 关于JDK8和JDK9版本对接口增加了一些方法新特性

package com.itheima.interface_demo;

public interface Inter {
    // 是一个常量 , 默认修饰符 public static final
    public 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;
    }
}
接口的案例
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 {
    @Override
    public void play() {
        System.out.println("MP3开始播放音乐");
    }

    @Override
    public void pause() {
        System.out.println("MP3开始暂停");
    }

    @Override
    public void stop() {
        System.out.println("MP3开始关闭音乐");
    }
}
package com.itheima.interface_demo.interface_test;

public class MP4 implements player {
    @Override
    public void play() {
        System.out.println("MP4播放音乐");
    }

    @Override
    public void pause() {
        System.out.println("MP4暂停音乐");
    }

    @Override
    public void stop() {
        System.out.println("MP4关闭音乐");
    }
}
package com.itheima.interface_demo.interface_test;
/*
   需求 :
   1  创建一个播放接口 player
   2  定义三个抽象方法 , 播放(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();
    }
}

 

接口中成员方法的特点
  • 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

  • 组成部分 :

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

5. 随堂小记

继承
//什么是继承?
让一个类继承另一个类就是继承。使用关键字:extends进行继承

    
//继承解决程序中什么问题?(核心)
1. 继承可以建立类与类之间的关系
2. 继承可以提高程序中代码的复用性(子类在继承父类后,就可以直接使用父类中的非私有成员)    

    

//继承怎么使用?(核心)
public class 父类{
    
}
public class 子类 extends 父类{
    
}


//继承在使用中的注意事项
1、继承只能单一继承(不支持多继承),允许多层次继承
2、不能继承父类中私有的成员
3、继承中成员的访问原则:就近原则(子类有中,就使用子类自己的,子类中没有,去父类中找)
4、子类对象在初始化时,需要先初始化父类对象(只有父类初始化完成,子类才可以访问父类中的成员)
    问题:子类怎么做到在创建对象时,先把父类初始化?
    答案:子类的构造方法中,默认第一行都有隐藏代码super()//调用父类无参构造方法
方法重写
//什么是方法重写?
子类中存在和父类中一模一样的方法,称为:方法重写


//方法重写解决程序中什么问题?
当父类中的方法,不能满足子类的需求,子类可以重写父类中的方法
    

//方法重写怎么使用?
public class 父类{
    public void method(String name){
        
    }
}
public class 子类 extends 父类{
    @Override //和父类一模一样的方法
    public void method(String name){
        
    }
}    


//方法重写在使用中的注意事项
1. 不能对父类中的私有方法进行重写
2. 子类中的方法必须和父类中的方法一模一样    
抽象类
什么是抽象类?


//抽象类解决程序中什么问题?
1. 当某个不希望被创建对象,可以使用abstract修饰为抽象类(仅仅只是做为父类使用)
2. 当某些方法无法书写具体的方法体代码时,把这些方法修饰为抽象方法,书写在抽象类中    


//抽象类怎么使用?
public abstract class 抽象类名{
    
}


//抽象类在使用中的注意事项
1、抽象类不能实例化(不能创建对象)
2、抽象类比普通类多了一个抽象方法(普通类可以书写的内容,都可以书写在抽象类中)
   抽象类中可以书写构造方法(目的:为了保障子类对象创建成功) 
3、抽象类中的所有抽象方法,在子类中都要重写(另一种:子类也做为抽象类) 
模板设计模式
//模板设计模式解决程序中什么问题?
当程序中有固定的执行流程了,但流程中的某个或某些点,在不确定时,就可以使用模板设计模式
    
    
//模板设计模式的使用
public abstract class 模板设计模式的抽象类{
    public void 固定执行流程的方法(){
        //1、固定流程格式
        
        //2、固定流程格式
        
        
        //3、不确定(定义为抽象方法)
        
        //4、不确定(定义为抽象方法)
        
        //5、固定流程格式 
        
        //6、不确定(定义为抽象方法)
    }
    
    public abstract 返回值类型 抽象方法();//3、不确定(定义为抽象方法)
    
    public abstract 返回值类型 抽象方法();//4、不确定(定义为抽象方法)
    
    public abstract 返回值类型 抽象方法();//6、不确定(定义为抽象方法)
}    
static

什么是static?

static是java语言中的修饰符关键字
用来修饰:成员变量、成员方法

static解决程序中的什么问题?

当程序中的某个数据需要共享时使用static修饰

static怎么使用?

public class Student{
    //成员变量
    private String name;
    private static String city;//静态成员变量
    
    //静态成员方法
    public static void method(){
        
    }
}

//通过类名访问静态内容(静态的私有成员变量不能访问)

static在使用中的注意细节

1、静态内容是随着类的加载就存在了(早于对象创建)
2、静态内容通常是使用: 类名.成员变量     类名.成员方法()
3、静态方法中只能访问静态成员(静态变量、静态方法)
4、静态方法中不能使用this关键字
5、非静态方法中可以直接访问:静态成员

JVM内存划分:

  1. 方法区

    • 是由N多个不同功能的小区域组成的

      • 静态区域:存放静态内容

      • 非静态区域:存放非静态内容

      • 字符串常量池:存放字符串常量

  2. 寄存器

  3. 本地方法区

final

final是什么?

final是java语言中的修饰符关键字
用来修饰:类、变量、方法    
    
final关键字的含义:最终的、不可改变的    

 final解决程序中什么问题?

1、当某个变量不允许修改数据值时,可以使用final修饰变量
2、当某个方法不允许被子类重写时,可以使用final修饰方法
3、当某个类不允许被继承时,可以使用final修饰类。  举例:String类

final怎么使用?

public final class 类名{
    
    private final int COUNT=100;
   
    public final void method(){
       
   } 
}

final在使用中的注意细节

final和abstract不能共存使用
权限修饰符

权限修饰符是什么?

权限修饰符是java语言中的关键字,用于修饰:类、变量、方法
权限修饰符:private 、public 、protected、默认(什么都不写)

权限修饰符号解决什么问题?

限制程序中的访问权限(类的访问权限、变量的访问权限、方法的访问权限)

权限修饰符怎么使用?

//类(权限:公开的 [没有限制])
public class 类{
    //成员变量(私有权限:本类中使用)
    private String name;
    
    //默认权限(权限:当前包下的任意类)
    void show(){
        
    }
    
    //protected(权限:子类)
    protected void method(){
        
    }
}

从小到大排序:
1. private //访问范围: 仅现本类中访问
2. 默认     //访问范围: 只能在同一个包下的类
3. protected  //访问范围: 同一个包下的任意类 或 不同包下的子类 
4. public     //访问范围 :没有限制

权限修饰符在使用中的注意细节?

//方法重写时:保障子类中重写访问的访问权限必须 >= 父类中方法的权限

在开发中经常会使用或开发:工具类

  • 工具类的特点:

    1. 不能被继承

    2. 不能让其他类创建对象

    3. 提供静态方法

//final保障 :工具类不能被继承
public final class 工具类{
    
    //不能让其他类创建对象
    private 工具类(){}
    
    //给外部提供:静态方法
    public static 返回值 静态方法(...){
        
    }
}

 问题:在一个类中可以书写哪些内容?

public class 类{
    //成员变量:静态、非静态
    
    //成员方法:静态、非静态、抽象
    
    //构造方法
    
    //代码块
    
}

代码块:

{
    
}

代码块划分:

  • 静态代码块 //开发中使用最多

    • 书写位置:在类中方法外(和成员变量、成员方法属于同一级)

      • 在构造代码块上添加:static

    • 特点:随着类的加载,执行1次静态代码块(类只会被加载1次)

    • 作用:用于对静态成员数据进行初始化

  • 构造代码块

    • 书写位置:在类中方法外(和成员变量、成员方法属于同一级)

    • 特点:在每个构造方法执行前,都会先执行构造代码块

    • 作用:当类中多个构造方法中有共性内容时,可能抽取到构造代码块

  • 局部代码块

    • 书写位置:写在方法体中

    • 特点:在方法执行时,才会调用

    • 作用:用于作用域

接口

接口的作用:制定规则

制定规则的两种方案:

  1. 定义类,类中书写抽象方法(不建议使用。 类只能单一继承)

  2. 定义接口, 接口中书写抽象方法(接口好处:可以多实现)

接口的定义:

public interface  接口名{
     //抽象方法
}

 

接口的特点:

  1. 接口不能实例化(不能创建对象)

  2. 接口中没有构造方法(接口只能通过子类来实现对象创建)

  3. 接口可以多实现( 一个类可以实现多个接口[解决类只能单一继承的问题] )

按照接口中定义的规则开发子类: 编写接口实现类

public class 接口实现类 implements 接口{
    //重写接口中所有的抽象方法
} 

 接口的多实现:

public class 接口实现类 implements 接口1 , 接口2 , 接口3 {
    //重写所实现接口中所有的抽象方法
} 

在接口可以书写的内容:

public interface 接口名{
    
    //抽象方法
    
    //静态常量
    public static final int NUMBER = 10;
}

思考:静态常量在程序中做什么呢?

问题:生活中有没有一些数据是固定的,且值比较单一?
示例:性别(固定、且仅有2个值)

public interface Gender{
   public static final String BOY = "男";
   public static final String GIRL = "女";
}

//程序中需要给性别赋值
String sex  = Gender.BOY;
String sex = Gender.GIRL;

接口中的方法的升级:

  • 随着JDK版本的升级

    • 在jdk1.8版本中新增:默认方法、静态方法 //有方法体代码

    • 在jdk1.9版本中新增:私有方法 //有方法体代码

类和接口的概念:  

类和类之间的关系: 继承 (只能单一继承)
public 子类 extends 父类{
    
}

类和接口之间的关系:实现
public 子类 implements 接口{
    
} 
    
   
接口和接口之间的关系:继承 (允许多继承)
public 接口1 extends 接口2 {
    //问题:为什么接口可以多继承?
    //答案:接口中仅仅只是定义功能(没有功能的实现,子类要自己实现功能)
}

 

接口和抽象类的相同之处:

  1. 接口和抽象类, 都不能实例化(不能创建对象)

  2. 接口和抽象类,都具有抽象方法

  3. 接口和抽象类,都是做为父类型存在的

抽象类和接口的区别:

  1. 抽象类:除了抽象方法外,还具有成员变量、构造方法、非抽象方法

  2. 接口:除了抽象方法外,只有常量 (JDK8:默认方法、静态方法)(JDK9:私有方法)

回顾上午内容:  
static关键字
//static是什么?
static是java语言中的修饰符关键字。用来修饰:变量、方法
    
//static解决程序中的什么问题?
static可以让数据进行共享(多个对象可以使用同一个数据)
 
//static的使用
public class 类{
    //静态成员变量
    public static int count;
    //静态成员方法
    public static void method(){
        
    }
} 
通过类名访问:静态成员
类名.count = 100;
类名.method();

//static在使用中的细节
1. static修饰的内容是随着类的加载而存在的(早于对象的创建)
2. static修饰的内容是存储在方法区的静态区别下(仅此一份)
3. static修饰的静态方法中,只能访问静态成员
4. static修饰的静态方法中,不能使用this关键字
5. 非静态方法中可以访问:静态方法、静态变量
final关键字  
//final是什么?
final是java语言中的修饰符关键字。用来修饰:类、方法、变量
    
//final可以解决程序中什么问题?
final修饰的类:不能被继承
final修饰的方法: 不能被重写
final修饰的变量: 初始化值后不能改变其值(常量)
    
//final的使用
public final class 类名{
    //变量
    final String name="初始化值";
    
    //方法
    public final void method(){
        
    }
}
权限修饰符号
//权限修饰符解决什么问题?
限制程序中访问权限

//权限修饰符
private 、默认(什么都不写)、protected 、 public 
    
private  : 仅限本类中使用  
默认(什么都不写) : 同一个包下的任意类
protected  : 同一个包下的任意类 、 不同包下的子类
public    : 没有限制 
接口
//接口的作用:
制定规则 
    

//接口的定义(语法)
public interface 接口名{
    //抽象方法
    public abstract boolean login(String name, String password);
}    
    
//接口的实现(语法) 
public class 接口实现类 implements 接口名{
    //重写:抽象方法
    public boolean login(String name , String password){
        ......
            
        return boolean类型的值;    
    }
}

//接口的特点:
1、接口不能实例化(不能创建对象)
2、接口中没有构造方法
3、接口可以多实现(解决类只能单一继承的问题)
    实现类 可以在继承一个父类的情况下,还可以实现多个接口
    public class 子类 extends 父类 implements 接口A , 接口B{
        //重写所有抽象方法
    }
代码块
代码块:局部代码块、构造代码块、静态代码块
    
构造代码块作用:当类中构造方法里面有共性内容时,可以抽出到构造代码块中
             每次构造方法执行前,都会先执行构造代码块
    
静态代码块:
static{
    //特点:静态代码块是随着类的加载执行(执行1次)
    //作用:初始化数据(数据必须在创建对象之前就初始化完成)
}   
选择语句:
switch( 常量表达式 ){ //只能使用:byte、short、int、char、String、枚举
    case 常量值1:
        语句1;
        break;
    ...    
}
枚举
//什么是枚举
在java语言中,枚举是一种数据类型。枚举用来表示:固定且仅有几种取值范围的数据
例:性别
    
public interface Gender{
    public static final String BOY="男";
    public static final String GIRL="女";
}    
    
public class Student{
    private String name;
    private String sex;
    public Student(String name , String sex){
        this.name = name;
        this.sex = sex;
    }
}
Student stu = new Student("熊大", Gender.BOY);

Student stu = new Student("熊二", "男女");//不会报错
解决方案: 枚举类型


//枚举解决程序中的什么问题?
当程序中有数据是固定且只有几种取值范围时,使用枚举类型强制设置值的范围(赋值数据有保障)    
    

//枚举怎么使用?
public enum Gender{
    BOY , GIRL;
}
public class Student{
    private String name;
    //使用枚举类型
    private Gender gender;
    
    public Student(String name , Gender gender){
        this.name = name;
        this.gender = gender;
    }
}
Student stu = new Student("熊二", "男女");//报错。原因:性别类型必须是Gender枚举

Student stu = new Student("熊二", Gender.BOY);//正确(保障数据的合法有效性)

    
    

//枚举在使用中的注意细节
1. 枚举本质是一个类
2. 在枚举中除了可以书写:固定选项值外,还可以书写:成员变量、私有构造方法、成员方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】Docker网络模式和Cgroup资源限制

目录 一、Docker 网络实现原理 二、Docker 的网络模式 #网络模式详解: 第一种:host模式 第二种:bridge模式 第三种:container模式 第四种:none模式 第五种:自定义网络 三、Cgroup资源控制 第一种&a…

帆软数据决策系统——用户名或密码错误解决方案

今天在公司调试本地大屏效果效果,死活登录不上数据决策系统。 附上截图: 解决方案: 找到本地FineReport设计器的安装路径,例如:D:\commonsoftware\FineReport_11.0\setup\FineReport_11.0\webapps\webroot\WEB-INF\em…

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(4.1) —— 静态创建队列

前言 (1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。 (2&am…

一文深度解读多模态大模型视频检索技术的实现与使用

当视频检索叠上大模型Buff。 万乐乐|技术作者 视频检索,俗称“找片儿”,即通过输入一段文本,找出最符合该文本描述的视频。 随着视频社会化趋势以及各类视频平台的快速兴起与发展,「视频检索」越来越成为用户和视频平…

PyQtGraph 之PlotCurveItem 详解

PyQtGraph 之PlotCurveItem 详解 PlotCurveItem 是 PyQtGraph 中用于显示曲线的图形项。以下是 PlotCurveItem 的主要参数和属性: 创建 PlotCurveItem 对象 import pyqtgraph as pg# 创建一个 PlotCurveItem curve pg.PlotCurveItem()常用的参数和属性 setData(…

jQuery实现选择方法和保护信息方法

最近呢!一直在学习jQuery语法,也没时间发布文章,现在学的差不多了,先跟大家分享下学习感受吧!JavaScript学过后,再学习jQuery语法,应该是简单的,但我总是容易把它们搞混,…

day16打卡

day16打卡 104. 二叉树的最大深度 递归法时间复杂度:O(N),空间复杂度:O(N) class Solution { public:int maxDepth(TreeNode* root) {if(root nullptr) return 0;return 1 max(maxDepth(root->left), maxDepth(root->right));} };…

蓝牙----蓝牙消息传输_GATT服务发现

蓝牙消息传输_GATT服务发现 1.主机和从机GATT服务的发现2.通知的使用 1.主机和从机GATT服务的发现 GATT服务的发现由主机执行,一共三个阶段  1.处理交换 MTU 请求和响应,启动对 Simple Service 服务的发现。 if (discState BLE_DISC_STATE_MTU){// MT…

C语言之指针的地址和指向的内容总结(八十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Tomcat_项目部署局域网可访问方法

Tomcat_项目部署局域网可访问方法 前提假设tomcat已经正确安装部署,项目已经部署。 1. win+r运行ipconfig/all,查看wlan的IPv4地址。 2. 修改Tomcat配置文件Server.xml,修改以下两处为:以上查找本地IP地址。

动手学深度学习7 线性回归+基础优化算法

线性回归基础优化算法 1. 线性回归1. 模型1. 房价预测--一个简化的模型2. 拓展到一般化线性模型3. 线性模型可以看做是单层神经网络 2. 预测1. 衡量预估质量2. 训练数据3. 求解模型4. 显示解5. 总结 2. 基础优化算法1. 梯度下降2. 小批量随机梯度下降3. 总结练习 3. 线性回归的…

基于物联网设计的水稻田智能灌溉系统(STM32+华为云IOT)

一、项目介绍 随着科技的不断发展和人们生活水平的提高,农业生产也逐渐向智能化、高效化的方向发展。水稻作为我国主要的粮食作物之一,其生长过程中的灌溉管理尤为重要。传统的灌溉方式往往依赖于人工观察和控制,不仅效率低下,而…

【AD-阻塞卡顿感-捕捉功能】移动布线、移动元器件时有很强的阻塞卡顿感,移动不到想要的地方

现象如下: 解决办法: 出现这种问题是因为AD的捕捉功能设置不对,我这边设置的是全部选择,所以出现了这种阻塞卡顿感。把选项全部取消,阻塞感就消失了。 取消后的现象: 至于原理上为什么会这样&#xff0…

区块链技术在教育领域的应用:Web3教育变革

随着Web3时代的来临,区块链技术在各个领域都展现出了巨大的潜力,而在教育领域,区块链的应用正引领着一场教育变革。本文将深入探讨区块链技术在教育领域的创新应用,以及这一应用如何推动Web3时代的教育变革。 1. 学历和成绩的去中…

C语言实现归并排序算法(附带源代码)

归并排序 把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。 可从上到下或从下到上进行。 动态效果过程演示: 归并排序(Merge Sort)是一种分治算法,它将一个数组分为两个子数组,分别对这两个…

学习gin框架知识的小注意点

Gin框架的初始化 有些项目中 初始化gin框架写的是: r : gin.New() r.Use(logger.GinLogger(), logger.GinRecovery(true)) 而不是r : gin.Default() 为什么呢? 点击进入Default源码发现其实他也是new两个中间件,(Logger&…

单调性的应用

1单调性 应用场景&#xff1a;常应用于双指针的进一步优化问题中含义&#xff1a;针对指针 i 1 > i i1>i i1>i一定有 j 1 > j j1>j j1>j或者 j 1 < j j1<j j1<j这样我们就可以利用该性质对算法进行进一步优化&#xff0c;避免一些不必要的遍历…

基于卡尔曼滤波的平面轨迹优化

文章目录 概要卡尔曼滤波代码主函数代码CMakeLists.txt概要 在进行目标跟踪时,算法实时测量得到的目标平面位置,是具有误差的,连续观测,所形成的轨迹如下图所示,需要对其进行噪声滤除。这篇博客将使用卡尔曼滤波,对轨迹进行优化。 优化的结果为黄色线。 卡尔曼滤波代码…

微信小程序元素/文字在横向和纵向实现居中对齐、两端对齐、左右对齐、上下对齐

元素对齐往往是新学者的一大困惑点&#xff0c;在此总结常用的各种元素和文字对齐方式以供参考&#xff1a; 初始显示 .wxml <view style"width: 100%;height: 500rpx; background-color: lightgray;"><view style"width: 200rpx;height:100rpx;bac…

STM32CubeMX教程29 USB_HOST - 使用FatFs文件系统读写U盘

目录 1、准备材料 2、实验目标 3、USB概述 3.1、USB协议 3.2、USB设备 3.3、USB接口 3.4、硬件原理 4、实验流程 4.0、前提知识 4.1、CubeMX相关配置 4.1.0、工程基本配置 4.1.1、时钟树配置 4.1.2、外设参数配置 4.1.3、外设中断配置 4.2、生成代码 4.2.0、配…