《深入Java(四)》——final属性和为什么main函数必须是static类型

这是我参加“4月日新计划更文活动”的第五天。

  • 在Java中,final属性指的是被标记为final的属性,也就是常量属性,它的取值在初始化之后就不能再被修改了。final属性通常被用于表示不可变的常量,其常用的定义方式为:

  • final属性使用时需要注意以下几点:

    • final属性必须在声明时或者构造函数中进行初始化,否则会编译出错。
    • final属性一旦被初始化,其值就不能被修改。
    • final属性可以是基本类型,也可以是对象类型,但是如果是对象类型,只能保证其引用不变,而不能保证其内部状态不变。
    • final属性通常被定义为静态属性,这样可以使得其在类装载时就被初始化,避免了重复计算和初始化的开销。
    • final属性通常使用大写字母和下划线组成的命名风格,以便于和普通属性做区分。总之,final属性是Java中的常量属性,其取值在初始化之后就不能再被修改了,通常被用于表示不可变的常量。
  • 在JAVA中,final修饰了方法会怎么样,修饰了对象又会怎么样

    • final修饰方法:final修饰的方法称为最终方法,它不能被子类重写。通常情况下,最终方法是为了避免子类在重写方法时破坏父类的代码逻辑。
      需要注意的是,如果一个方法被声明为private、static或者final,那么它默认是最终方法,因为这些修饰符都不能被子类继承和重写。
    • final修饰对象(final修饰对象表示该对象的状态在创建后不能被修改):final修饰的对象称为不可变对象,它的状态在创建后不能被修改。通常情况下,不可变对象在多线程环境中使用更加安全,因为它们不会被修改,也不需要进行同步操作。
    • 创建不可变对象,需要注意的是:

      • 所有的成员变量都要被声明为final,并且在构造函数中初始化。
      • 不提供任何修改状态的方法,包括set方法和修改状态的成员方法。
      • 如果对象包含了其他对象的引用,需要保证这些对象也是不可变对象。
  • 除此之外,final还可以修饰类,被final修饰过后的类就变成了不可以被继承的方法

  • 为什么main函数必须是static函数(另外谈一下,main函数的参数列表为什么有一个字符串数组)

    • 问题一:

      • 在Java中,main函数必须是静态(static)方法的原因是因为在Java中,main函数是程序的入口点,也就是说,程序在启动时第一个被执行的方法就是main函数。而静态方法是类级别的方法,可以在没有创建对象的情况下直接调用。
      • 当Java虚拟机(JVM)启动时,它会根据指定的类名查找并加载该类。然后,它会尝试在该类中查找一个public static void main(String[] args)方法,并将其作为程序的入口点来执行。因此,main方法必须被定义为public,以便JVM可以访问它,同时也必须是静态的,以便在没有实例化该类的情况下调用它。
      • 如果不将main方法定义为静态方法,那么程序启动时必须首先创建该类的实例,然后才能调用该实例的main方法作为程序入口点,这就增加了启动时间和内存开销。而静态方法可以直接通过类名调用,无需创建实例,因此更加高效。
    • 问题二:

      • 需要注意的是,main函数的参数也是固定的,它需要接受一个字符串数组作为参数,这个参数通常用来传递程序启动时的命令行参数。例如,可以使用以下命令行启动程序并传递参数: image.png
      • 在上面的命令行中,arg1和arg2就是传递给main函数的参数,它们会被封装成一个字符串数组作为main函数的参数传递进去。

猜你喜欢

转载自juejin.im/post/7222282361265831997