Code
常用语法知识模糊点
00 分钟
2024-9-12
2024-9-18
tags
date
type
status
slug
summary
category
password
icon

常用知识语法模糊点

  • 类的属性和方法
    • 实例属性
      • 权限修饰符 数据类型 属性名 [= 初始值]
      • 一般而言,实例属性是针对每个类对象而言的,每个类对象可以有不同属性的值,用于表示对象的特有信息,独立状态
    • 类属性]
      • 权限修饰符 static 数据类型 属性名[ = 初始值 ]
      • 而类属性一般是针对所有类对象而言,一般是所有对象共用的某个值(一旦改变,所有使用者都使用新值)
      • 也常用于指定常量或者统计信息,全局配置信息
    • 类方法(静态方法)
      • 使用 static 关键字声明,属于类本身,而不是类的某个实例(对象)
      • 定义 权限修饰符 static 数据类型 方法名(参数列表)
  • 属性和变量的区别
    • 属性通过对象或类访问,用 getter 和 setter 来封装
    • 类的成员变量也叫属性
    • 局部变量和方法参数更多的是用于方法中
    • 除了基本的数据类型(四个:整型、浮点型、字符串型、布尔型)还有三种引用数据类型 类、数组、接口(都是引用传递,存储地址)
  • 继承
  • 方法重写 —— 核心概念就是保持框架和父类一致,但内部实现不同(多态的体现)
 
  • 接口
    • 关键字:interface
    • 都是抽象方法,Java8后 如果是默认方法和静态方法(内部需要提供实现)
    • 主要功能是实现代码的解耦
 
  • abstract抽象类
    • 抽象类是一个不能被实例化的类,它提供了共用的行为模板,并由子类实现具体功能。抽象类可以包含抽象方法和具体方法。
    • 抽象方法是没有具体实现的方法,必须在子类中实现。抽象方法不能被 staticfinalprivate 修饰。
    • 抽象类在实际开发中用于定义一个共用的接口或模板,让子类实现具体的业务逻辑。
    • 通过抽象类,开发团队可以更好地实现代码复用和灵活的设计。
  • final 关键字
    • final 变量:一旦被初始化后,值不能再修改。常用于常量定义(如 static final)。
    • final 方法:该方法不能被子类重写,通常用于保持方法行为不变。
    • final:该类不能被继承,常用于设计封闭和安全性高的类。
    • final 参数:参数传递后,不能在方法内部修改该参数的值。
  • super关键字
    • super 的主要作用有两个:
        1. 调用父类的构造方法
        1. 访问父类的成员变量和方法
      • 如果父类提供了无参构造方法,那么子类可以省略调用 super
    • private关键字
      • 一般我们将类的成员变量设置为 private这意味着这些变量只能在类内部访问。而为了提供受控的访问,我们使用 getset 方法来读取和修改这些私有变量。
    • set和get
      • get 方法用于获取(访问)类的私有成员变量的值。
      • set 方法用于修改类的私有成员变量的值。
      • 封装使得我们可以在不影响外部代码的情况下随时修改类的实现(比如添加新的验证逻辑)
    • tostring
      • toString 方法是 Java 中的一个特殊方法,它是 Object 类的一部分。所有类默认都继承了 toString 方法,用于返回对象的字符串表示。
      • 便于调试和打印对象信息:重写 toString 方法后,可以通过打印对象来快速查看对象的属性信息。
      • 更友好的输出:当需要将对象转换为字符串输出时,toString 方法可以提供清晰的格式化信息,尤其在日志记录或调试时非常有用。
    • static关键字
      • static 关键字类的成员(变量、方法、内部类、代码块)与类本身关联,而不是与类的实例关联。它表示这些成员属于类,而不是某个对象。
      • static 变量:属于类本身,所有对象共享同一个静态变量。
      • static 方法:属于类,可以通过类名直接调用,不能访问实例成员。
      • static 代码块:在类加载时执行一次,用于静态变量的初始化或类级别的初始化。
      • static 内部类:独立于外部类实例的内部类,可以直接创建它的对象而不需要外部类的实例。
      • 静态方法不能访问实例变量或调用实例方法:因为静态方法在类加载时就已经存在,而实例成员只有在对象创建后才存在。静态方法只能访问静态变量或调用其他静态方法。
      • 静态方法和静态变量可以通过类名直接访问:这是静态成员的特点,无需创建对象即可直接访问。
      • 静态变量共享:所有对象共享同一个静态变量,这意味着一个对象修改了静态变量的值,其他对象也会受到影响。
      • 静态代码块只执行一次:静态代码块只在类加载时执行一次,用于执行一次性的初始化操作。
     
    • Java的内存结构
        1. 用于存储方法中的局部变量对象的引用
            • 局部变量:包括方法中的参数和在方法内定义的变量,这些变量存储在栈中。
            • 对象引用:在栈中存储的并不是对象本身,而是对象在堆中的引用(即对象的内存地址)。
        1. 堆:所有使用 new 关键字创建的对象都会存储在堆中,包括实例变量和数组
        1. 是 Java 的内存区域之一,用于存储通过 new 关键字创建的对象。对象一旦被创建,就会存储在堆中,直到不再被引用(即,变得不可达),这时垃圾回收器会自动释放这些对象所占的内存
        1. 对象的生命周期:对象的生命周期比局部变量长得多,因为对象存储在堆中,只有当没有任何引用指向该对象时,才会被垃圾回收器回收。
          1. 方法区
        1. 存储与类和方法相关的数据,例如类的元数据静态变量常量
        2. 类的元数据:存储类的结构信息,如类名、方法、字段、接口等。
        3. 静态变量:静态变量在类加载时分配内存,存储在方法区内。
        4. 常量池:常量池用于存储编译时期生成的常量,比如字符串常量、数值常量等。
          • 运行时常量池:运行时常量池在类加载时加载,包含类的常量信息和方法的字节码信息。
          1. 静态域
              • 存储静态变量的地方,通常和方法区有关
              • 类加载时分配:当类被加载到 JVM 中时,静态变量就会被分配内存,且只初始化一次。
              • 共享性:所有该类的实例对象共享同一个静态变量,修改一个对象的静态变量,其他对象的静态变量也会被修改
          1. 简要理解:
            1. :存储局部变量和对象的引用,变量的生命周期与方法的执行时间一致。
            2. :存储通过 new 创建的对象,生命周期由垃圾回收器管理。(通过构造函数初始化 或者 this 形式也会放进来)
            3. 方法区:存储类的元数据、静态变量、常量池,类加载时分配内存。(如 static的存进这里)
            4. 静态域:存储静态变量,静态变量属于类,所有实例共享。(如 final的会存进到这里)
      • 匿名对象:没有使用引用,对象创建后,没有将引用赋值给任何一个变量(这里的变量指的是 非基本数据类型的变量,而是引用数据类型(类、数组、接口))
      • 可变参数
        • 语法:可变参数类型后面跟上 ...。例如:int... numbers 表示可以传递任意数量的 int 类型参数。
        • 在方法的参数列表中,可变参数必须是最后一个参数,避免歧义。
        • public class Calculator { // 可变参数方法:可以接收不定数量的整数 public int add(int... numbers) { int sum = 0; for (int num : numbers) { sum += num; } return sum; } public static void main(String[] args) { Calculator calc = new Calculator(); // 调用时可以传递任意数量的参数 System.out.println(calc.add(1, 2)); // 输出: 3 System.out.println(calc.add(1, 2, 3, 4, 5)); // 输出: 15 System.out.println(calc.add()); // 输出: 0 (没有参数传递) }}
      • 重载
        • 注意,和重写不同,重载得方法名称相同,参数列表不同(类型、个数或顺序),与 返回类型、访问修饰符、参数名称无关
      • this关键字
        • 主要用于引用当前对象
          • 它帮助我们在对象内部访问当前对象的成员(变量和方法),并可以用来消除歧义(如成员变量与局部变量同名)
          • 例如创建一个类对象 Person p =new Person(),然后里面调用this.name ,然后指的就是p的name
        • 作用:
          • 区分成员变量与局部变量
            • 当方法或构造函数中的参数名与类的成员变量名相同时,使用 this 来明确表示成员变量。
          • 在构造函数中调用另一个构造函数
            • 使用 this() 可以在一个构造函数中调用同一个类的另一个构造函数,避免重复代码。
          • 在方法中返回当前对象
            • 返回 this 允许链式调用,即通过一个对象调用多个方法。
          • 在内部类中访问外部类对象
            • 在非静态内部类中,可以通过 外部类名.this 来访问外部类对象。
      • 内部类
        • 实例内部类
          • 定义在另一个类内部的非静态类。它依赖于外部类的实例,可以访问外部类的所有成员(包括私有成员)
          • 必须通过外部类的对象来创建,这意味着在创建实例内部类之前,必须有一个外部类的实例。
          • 可以使用 this 关键字访问内部类和外部类的成员this 指向内部类实例,而 外部类名.this 指向外部类实例。
          • public class OuterClass { private String outerName = "OuterClass"; // 实例内部类 public class InnerClass { private String innerName = "InnerClass"; // 实例内部类的方法 public void printNames() { // 访问内部类的成员 System.out.println("Inner name: " + innerName); // 访问外部类的成员 System.out.println("Outer name: " + outerName); } } public static void main(String[] args) { // 创建外部类的实例 OuterClass outer = new OuterClass(); // 通过外部类实例创建内部类的实例 OuterClass.InnerClass inner = outer.new InnerClass(); // 调用内部类的方法 inner.printNames(); }}
          • 实例内部类的使用场景:
            • 封装逻辑:当内部类的行为与外部类密切相关时,实例内部类可以用于封装与外部类相关的逻辑。
            • 辅助类:可以将实例内部类用作外部类的辅助工具,专门处理外部类的某些功能,而不必暴露给外部的世界。
        • 静态内部类(静态嵌套)
          • 与外部类无关:静态内部类不需要外部类的实例就可以创建和使用,因此不依赖于外部类的对象。
          • 只能访问外部类的静态成员:由于静态内部类是静态的,它只能访问外部类的静态成员,不能访问非静态的实例成员。
          • 可以独立存在:可以直接通过 new 外部类名.内部类名() 来创建静态内部类对象,而不需要外部类的实例。
          • public class OuterClass { private static String outerStaticName = "StaticOuterClass"; private String outerName = "OuterClass"; // 静态内部类 public static class StaticInnerClass { private String innerName = "StaticInnerClass"; // 静态内部类的方法 public void printNames() { // 访问静态的外部类成员 System.out.println("Outer static name: " + outerStaticName); // 不能直接访问外部类的非静态成员 // System.out.println("Outer name: " + outerName); // 编译错误 // 访问静态内部类的成员 System.out.println("Inner name: " + innerName); } } public static void main(String[] args) { // 创建静态内部类的实例,不需要外部类的实例 OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass(); inner.printNames(); }}
          • 封装类的静态逻辑:当内部类的功能与外部类的实例无关时,使用静态内部类能够简化代码。
          • 外部类的静态工具类:静态内部类常用于实现某些与外部类相关的功能,但不依赖于外部类的对象,例如创建外部类的静态工具类或辅助类。
          • 设计模式中的应用:在设计模式(如单例模式、工厂模式等)中,静态内部类可以用于实现线程安全的懒加载等高级功能。
          • 当内部类的功能与外部类的实例无关时(如静态工具类),静态内部类是理想的选择。

      不常用的语法知识点

      • 添加鼠标的点击事件 addMouseListerner
      • 以图形为例
          1. 直线-Line
          1. 矩形-Rect
          1. 圆-Circle
          1. 使用swing绘制图形
      • IO流
          1. File
            1. 表示一个文件或文件夹类,不具备文件读取能力
            2. 构造方法
              1. File(String path)
            3. 常用方法
              1. createNewFile():创建新文件
              2. delete():删除文件
              3. exists():判断文件是否存在
              4. getName():获取名称
              5. getPath():获取路径
              6. isDirectory():是否为文件夹
              7. Length():文件内容的长度
              8. List():列举文件夹中的所有文件或文件夹
              9. getParent():获取当前文件的目录String类型
              10. getParentFile():获取当前文件的目录File类型
          1. 输入流
            1. 将文件内容读取到电脑中
            2. 字节流 —— InputStream 只能操作文本文件,不能操作多媒体文件
              1. FileInputStream
              2. BufferStream
              3. ObjectInputStream
            3. 字符流 —— Reader 什么都能读取,但是读取文件时,对中文的处理要特别注意
              1. FileReader
              2. BufferedReader
          1. 输出流
            1. 写入内容到文件中
            2. 字节流 —— OutputStream
              1. FileOutputStream
              2. BufferedOutputStream
              3. ObjectOutputStream
            3. 字符流 —— Writer
              1. FileWriter
              2. BufferedWriter
            4. 转换流
              1. InputStreamReader
              2. OutputStreamWriter
      上一篇
      Java SE day3
      下一篇
      Java 中国象棋day1-4 大汇总

      评论
      Loading...