python初始化方法的作用_JAVA的main方法,satatic,初始化原则,变量作用域

public static void main(String[ ] args)为java程序的入口方法,JVM在运行时会首先查找main方法。

public是权限修饰符,表明任何类或对象都可以访问这个方法

static表明main()方法是一个静态方法,也就是代码储存在静态区域,只要类被加载后就可以使用该方法而不需要通过实例化对象来访问,可直接通过类名.main()直接访问。

JVM就是按照上述方法的签名来查找方法的入口地址(必须有public和static的修饰,返回值为void,且方法参数为字符串数组),若找到就执行,找不到报错。

void表明方法没有返回值,main是JVM识别的特殊方法名。

字符串参数args为开发人员在命令状态下与程序交互提供了一种手段。

一般要执行一个类的方法,必须实例化一个类的对象,然后通过对象来调用这个方法,但由于main是程序入口方法,一开始就执行这个,此时没有实例化对象,因此编写main方式时就要求不需要实例化对象就可以调用这个方法,所以,main方法被定义成public与static。

public与static没有先后顺序关系,谁前谁后都行

也可以把main()方法定义为final

public static final void main(String[ ] args)

也可以用synchronized来修饰main()方法

public static synchronized void main(String[ ] args)

不管哪种方法,都要保证main()方法返回值是void,并且有static和public关键字修饰,同时山于main()方法为程序的人口方法,因此不能用abstract关键字来修饰。

虽然每个类可以定义main()方法,但是只有与文件名相同的用public修饰的类中的main()方法才能作为整个程序的人口方法。

static public abstract void main(String[ ] args )这是错误的main方法入口签名

Hello World案例

29f86ee9d4688650171940876442f9c1.png

最终先输出了Hello World1而没有先执行main方法,因为静态块在类加载时就会被调用,所以可以直接用静态快来输出Hello World

9cb016f971288dcf25ab7a12ca297ee1.png

static表明是静态方法

而静态块不考虑顺序,都会在main()方法执行前执行,所以还是先输出Hello World1

Java程序初始化的顺序

当要实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有对类中的所有成员完成初始化后,才能调用对象所在类的构造函数创建对象。

java程序的初始化一般遵循3个原则(优先级依次递减):

1.静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次

2.父类优先于子类进行初始化

3.按照成员变量的定义顺序进行初始化

即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化。

java程序的初始化顺序

父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数卜而给出一个不同模块初始化时执行顺序的一个例子。

7a0df4354970fa9291e44a72801357fb.png

af95be31c6ad2b07ec4f9e4bffc23dd9.png

static表明是静态方法

f9487cd096b5e90d0818130b251caa04.png

在java中不同地方的变量有不同的作用域

了Java语言中,作用域是由花括号的位置决定的,它决定了其定义的变量名的可见性和周期性。

java语言中,变量类型有3种:成员变量、静态变量、和局部变量

类的成员变量作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变员就会在内存分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量生命周期才结束。被static修饰的成员变量被称为静态变量或全局变量,与成员变量不同,静态变量不需要实例化,而是被所有实例共享,只要一个类被加载,JVM就会给类的静态变量分配储存空间,因此,就可以通过类名和变量名来访问静态变量、局部变量的作用域与可见性为它所在的花括号内。

成员变量四种作用域

d36ea70b887076e9060f2b5c5969d8bd.png

  1. public该成员变量和方法对所有类或对象都可见

  2. private表明该成员变量或方法是私有的,只有当前类具有访问权限,其他的类或对象没有访问权限

  3. default表明该成员变量或方法只有自己和与其位于同一包内的类可见若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package(包)内,则没有访问权限。

  4. protected 表明该成员变量或方法对自己及其子类是可见的,即自己和子类具有权限访问。除此之外的其他类或对象都没有访问权限。
    需要注意的是,这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰类(只有public,abstract或final能用来修饰类)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值