为什么static只修饰外部类不可以修饰内部类:1️⃣static修饰的为类成员会随着类的加载而加载,比如静态代码块,静态成员,静态方法(这里只是加载,并没有调用)等等,可以想象一下,如果把一个Class文件中的外部类设为static,目的难道是让这个类随着应用的启动而加载吗?如果在这次使用过程中根本没有使用过这个类,那么是不是就会浪费内存。这样来说设计不合理,总而言之,设计不合理的地方,Java是不会让它存在的。2️⃣而为什么内部类可以使用static修饰呢,因为内部类算是类的成员了,如果没有使用静态来修饰,那么在创建内部类的时候就需要先有一个外部类的对象,如果我们一直在使用内部类,那么内存中就会一直存在外部类的引用,而我们有时候只需要使用内部类,不需要外部类,那么还是会浪费内存,甚至会造成内存溢出。使用static修饰内部类之后,内部类在创建对象时就不需要有外部类对象的引用了。💥最终结论就是:static可以用来修饰内部类,但是不可以用来修饰外部类
public static void main(String[] args)
main方法是java虚拟机在调用,所以它的访问权限必须是public
java虚拟机在执行main()方法时不必创建对象,所以它的方法必须是static
该方法接受String类型的数组参数,该数组中保存执行java命令时,传递给所运行的类的参数
args是在java执行程序时通过命令行传入的 (java Hello tom jack smith)
main方法中,可以直接调用main 方法所在类的静态方法和静态属性;但是不能直接访问该类中的非静态成员,必须创建一个该类的实例对象后,才能通过这个对象去访问非静态成员
相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操
如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
代码块的调用优先于构造器
类在什么时候被加载?
普通代码块与静态代码块的调用
总结
创建一个对象时,在一个类中的调用顺序是
构造器中隐含了本类普通代码块的调用
创建一个子类对象时,(静态)代码块,(静态)属性初始化,以及构造器的调用顺序 🍓考点
练习题
设计模式(23种):设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
单例模式: 采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法