tags
date
type
status
slug
category
summary
password
icon
常用知识语法模糊点
- 类的属性和方法
- 实例属性
权限修饰符 数据类型 属性名 [= 初始值]
- 一般而言,实例属性是针对每个类对象而言的,每个类对象可以有不同属性的值,用于表示对象的特有信息,独立状态
- 类属性]
权限修饰符 static 数据类型 属性名[ = 初始值 ]
- 而类属性一般是针对所有类对象而言,一般是所有对象共用的某个值(一旦改变,所有使用者都使用新值)
- 也常用于指定常量或者统计信息,全局配置信息
- 类方法(静态方法)
- 使用
static
关键字声明,属于类本身,而不是类的某个实例(对象) - 定义
权限修饰符 static 数据类型 方法名(参数列表)
- 属性和变量的区别
- 属性通过对象或类访问,用 getter 和 setter 来封装
- 类的成员变量也叫属性
- 局部变量和方法参数更多的是用于方法中
- 除了基本的数据类型(四个:整型、浮点型、字符串型、布尔型)还有三种引用数据类型 类、数组、接口(都是引用传递,存储地址)
- 继承
- 方法重写 —— 核心概念就是保持框架和父类一致,但内部实现不同(多态的体现)
- 接口
- 关键字:interface
- 都是抽象方法,Java8后 如果是默认方法和静态方法(内部需要提供实现)
- 主要功能是实现代码的解耦
- abstract抽象类
- 抽象类是一个不能被实例化的类,它提供了共用的行为模板,并由子类实现具体功能。抽象类可以包含抽象方法和具体方法。
- 抽象方法是没有具体实现的方法,必须在子类中实现。抽象方法不能被
static
、final
或private
修饰。 - 抽象类在实际开发中用于定义一个共用的接口或模板,让子类实现具体的业务逻辑。
- 通过抽象类,开发团队可以更好地实现代码复用和灵活的设计。
- final 关键字
final
变量:一旦被初始化后,值不能再修改。常用于常量定义(如static final
)。final
方法:该方法不能被子类重写,通常用于保持方法行为不变。final
类:该类不能被继承,常用于设计封闭和安全性高的类。final
参数:参数传递后,不能在方法内部修改该参数的值。
- super关键字
super
的主要作用有两个:- 调用父类的构造方法。
- 访问父类的成员变量和方法
- 如果父类提供了无参构造方法,那么子类可以省略调用 super
- private关键字
- 一般我们将类的成员变量设置为
private
这意味着这些变量只能在类内部访问。而为了提供受控的访问,我们使用get
和set
方法来读取和修改这些私有变量。
- set和get
get
方法用于获取(访问)类的私有成员变量的值。set
方法用于修改类的私有成员变量的值。- 封装使得我们可以在不影响外部代码的情况下随时修改类的实现(比如添加新的验证逻辑)
- tostring
toString
方法是 Java 中的一个特殊方法,它是Object
类的一部分。所有类默认都继承了toString
方法,用于返回对象的字符串表示。- 便于调试和打印对象信息:重写
toString
方法后,可以通过打印对象来快速查看对象的属性信息。 - 更友好的输出:当需要将对象转换为字符串输出时,
toString
方法可以提供清晰的格式化信息,尤其在日志记录或调试时非常有用。
- static关键字
static
关键字 将类的成员(变量、方法、内部类、代码块)与类本身关联,而不是与类的实例关联。它表示这些成员属于类,而不是某个对象。static
变量:属于类本身,所有对象共享同一个静态变量。static
方法:属于类,可以通过类名直接调用,不能访问实例成员。static
代码块:在类加载时执行一次,用于静态变量的初始化或类级别的初始化。static
内部类:独立于外部类实例的内部类,可以直接创建它的对象而不需要外部类的实例。- 静态方法不能访问实例变量或调用实例方法:因为静态方法在类加载时就已经存在,而实例成员只有在对象创建后才存在。静态方法只能访问静态变量或调用其他静态方法。
- 静态方法和静态变量可以通过类名直接访问:这是静态成员的特点,无需创建对象即可直接访问。
- 静态变量共享:所有对象共享同一个静态变量,这意味着一个对象修改了静态变量的值,其他对象也会受到影响。
- 静态代码块只执行一次:静态代码块只在类加载时执行一次,用于执行一次性的初始化操作。
- Java的内存结构
- 栈用于存储方法中的局部变量和对象的引用
- 局部变量:包括方法中的参数和在方法内定义的变量,这些变量存储在栈中。
- 对象引用:在栈中存储的并不是对象本身,而是对象在堆中的引用(即对象的内存地址)。
- 堆:所有使用
new
关键字创建的对象都会存储在堆中,包括实例变量和数组 - 是 Java 的内存区域之一,用于存储通过
new
关键字创建的对象。对象一旦被创建,就会存储在堆中,直到不再被引用(即,变得不可达),这时垃圾回收器会自动释放这些对象所占的内存 - 对象的生命周期:对象的生命周期比局部变量长得多,因为对象存储在堆中,只有当没有任何引用指向该对象时,才会被垃圾回收器回收。
- 方法区
- 存储与类和方法相关的数据,例如类的元数据、静态变量、常量等
- 类的元数据:存储类的结构信息,如类名、方法、字段、接口等。
- 静态变量:静态变量在类加载时分配内存,存储在方法区内。
- 常量池:常量池用于存储编译时期生成的常量,比如字符串常量、数值常量等。
- 运行时常量池:运行时常量池在类加载时加载,包含类的常量信息和方法的字节码信息。
- 静态域
- 存储静态变量的地方,通常和方法区有关
- 类加载时分配:当类被加载到 JVM 中时,静态变量就会被分配内存,且只初始化一次。
- 共享性:所有该类的实例对象共享同一个静态变量,修改一个对象的静态变量,其他对象的静态变量也会被修改
- 简要理解:
- 栈:存储局部变量和对象的引用,变量的生命周期与方法的执行时间一致。
- 堆:存储通过
new
创建的对象,生命周期由垃圾回收器管理。(通过构造函数初始化 或者 this 形式也会放进来) - 方法区:存储类的元数据、静态变量、常量池,类加载时分配内存。(如 static的存进这里)
- 静态域:存储静态变量,静态变量属于类,所有实例共享。(如 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
- 以图形为例
- 直线-Line
- 矩形-Rect
- 圆-Circle
- 使用swing绘制图形
- IO流
- File
- 表示一个文件或文件夹类,不具备文件读取能力
- 构造方法
- File(String path)
- 常用方法
- createNewFile():创建新文件
- delete():删除文件
- exists():判断文件是否存在
- getName():获取名称
- getPath():获取路径
- isDirectory():是否为文件夹
- Length():文件内容的长度
- List():列举文件夹中的所有文件或文件夹
- getParent():获取当前文件的目录String类型
- getParentFile():获取当前文件的目录File类型
- 输入流
- 将文件内容读取到电脑中
- 字节流 —— InputStream 只能操作文本文件,不能操作多媒体文件
- FileInputStream
- BufferStream
- ObjectInputStream
- 字符流 —— Reader 什么都能读取,但是读取文件时,对中文的处理要特别注意
- FileReader
- BufferedReader
- 输出流
- 写入内容到文件中
- 字节流 —— OutputStream
- FileOutputStream
- BufferedOutputStream
- ObjectOutputStream
- 字符流 —— Writer
- FileWriter
- BufferedWriter
- 转换流
- InputStreamReader
- OutputStreamWriter
- 作者:瑾墨
- 链接:https://www.gaoqilan.tech/Code/0ff1a31f-082e-804f-b4b3-d8db3c1864c8
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。