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

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

主要内容


1 关键字

2 代码块

3 接口

4 枚举

1 Java中的关键字


1.1 static关键字

用一句话说就是:可以直接通过对象.的形式使用,不用new实例化调用

image.png

  • 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关键字

da57c834b8d84af99c0cd8f7df91d2f6.png

  • 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中的权限修饰符

image.png

public – protected – 默认的 – private

image.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 构造代码块

image.png

  • 构造方法块 : 用一对大括号表示, 定义在类中方法外
  • 执行时机 : 每次构造方法执行前, 都会执行构造代码块
  • 作用 : 抽取构造方法中共性内容
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);// 作用域不够 , 报错
  }
}


相关文章
|
13天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
97 60
|
1天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
2天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
10 1
|
7天前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
32 4
|
13天前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
|
12天前
|
Java
Java基础(13)抽象类、接口
本文介绍了Java面向对象编程中的抽象类和接口两个核心概念。抽象类不能被实例化,通常用于定义子类的通用方法和属性;接口则是完全抽象的类,允许声明一组方法但不实现它们。文章通过代码示例详细解析了抽象类和接口的定义及实现,并讨论了它们的区别和使用场景。
|
12天前
|
Java 测试技术 API
Java零基础-接口详解
【10月更文挑战第19天】Java零基础教学篇,手把手实践教学!
16 1
|
17天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
29 2
|
Java
Java接口和抽象类
Java接口和抽象类
87 0
|
3月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
39 2
下一篇
无影云桌面