作者:手机用户2502924641 | 来源:互联网 | 2024-12-12 16:41
本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。
一、关键字static
在Java中,关键字static用于修饰类的成员,使其成为静态成员。静态成员的特点如下:
- 随着类的加载而加载。
- 优先于对象存在,即使没有创建类的实例,静态成员也已经存在于内存中。
- 被所有对象共享,无论创建多少个对象,静态成员都只有一个副本。
- 如果访问权限允许,可以直接通过类名调用静态成员,无需创建对象。
类变量内存解析(下图中的String字符串应存放在方法区中,为简化起见,图中将其放在了堆中):
类方法
- 没有对象的实例时,可以通过类名.方法名()的形式访问由static修饰的类方法。
- 在static方法内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
- 因为不需要实例就可以访问static方法,因此static方法内部不能使用this或super。
- static修饰的方法不能被重写。
二、单例设计模式
单例设计模式确保一个类只有一个实例,并提供一个全局访问点。实现单例模式的方法主要有两种:
1. 饿汉式
class Singleton {
private Singleton() {}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
2. 懒汉式(线程不安全)
class Singleton {
private Singleton() {}
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
单例模式的优点在于减少系统性能开销,特别是在对象的创建需要大量资源时。
三、main()方法语法
main()方法是Java程序的入口点,其语法如下:
- 访问权限必须是public。
- 方法必须是static的,以便Java虚拟机在不创建对象的情况下调用该方法。
- 接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。
- 由于main()方法是静态的,不能直接访问类中的非静态成员,必须创建类的实例对象后,才能通过这个对象访问类中的非静态成员。
四、代码块
代码块用于对Java类或对象进行初始化,分为静态代码块和非静态代码块。
- 静态代码块:用static修饰,通常用于初始化static的属性。静态代码块随着类的加载而加载,且只执行一次。
- 非静态代码块:没有static修饰,每次创建对象时都会执行。
五、final关键字
final关键字用于声明类、变量和方法,表示“最终的”。
- final标记的类不能被继承,提高安全性,提高程序的可读性。
- final标记的方法不能被子类重写。
- final标记的变量称为常量,名称大写,且只能被赋值一次。
- static final:全局常量。
六、抽象类与抽象方法
抽象类和抽象方法是Java中实现抽象的重要手段。
- 用abstract关键字修饰的类称为抽象类,不能被实例化。
- 用abstract关键字修饰的方法称为抽象方法,只有方法的声明,没有方法的实现。
- 含有抽象方法的类必须被声明为抽象类。
- 抽象类的子类必须重写父类的抽象方法,否则子类仍为抽象类。
- 不能用abstract修饰变量、代码块、构造器。
- 不能用abstract修饰私有方法、静态方法、final的方法、final的类。
七、模板方法设计模式
模板方法设计模式通过定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造。
八、接口(Interface)
接口是抽象方法和常量值定义的集合,主要用于实现多重继承和面向接口编程。
- 接口中的所有成员变量默认由public static final修饰。
- 接口中的所有抽象方法默认由public abstract修饰。
- 接口中没有构造器。
- 接口采用多继承机制。
- 一个类可以实现多个接口,接口也可以继承其他接口。
- 实现接口的类中必须提供接口中所有方法的具体实现内容,否则仍为抽象类。
- 接口的主要用途是被实现类实现。
- 接口与实现类之间存在多态性。
- 接口和类是并列关系,接口是一种特殊的抽象类。
九、内部类
内部类是定义在另一个类中的类,可以分为成员内部类、局部内部类和匿名内部类。
- 成员内部类:可以声明为private或protected,可以调用外部类的结构,可以声明为static。
- 局部内部类:只能在声明它的方法或代码块中使用,可以使用外部类的成员,包括私有的。
- 匿名内部类:不能定义任何静态成员、方法和类,只能创建一个实例,必须继承父类或实现接口。