共计 1788 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要 public static void main (String[] args) 这个方法
因为这个方法是 Java 程序的入口方法,JVM 在运行程序的时候,会先查找 main 方法,其中 public 是权限修饰符,表明任何类和对象都可以访问这个方法,static 表明 main 是一个静态方法,即,方法中的代码是保存在在静态保存区域中的,只要类被加载后,就可以使用该方法,而不需要通过实例化访问,可以直接通过类名,main 直接访问,JVM 在启动的时候,将会按照上述方法的签名,来查找方法的入口地址,若能找到就执行,找不到,则会报错。void 表明方法没有返回值,main 是 jvm 识别的特殊方法名,是程序入口的方法,字符串数组参数 args 为开发人员在命令行状态下与程序交互提供了一种手段。
如何实现在 main() 方法执行前输出 Hello World
众所周知,在 Java 语言中,main 方法是程序的入口方法。在程序运行时,最先加载的就是 main 方法,但是这并不意味着 main() 方法,就是程序运行时第一个被执行的模块。
例如下方代码
public class Test{
static {System.out.println("Hello World");
}
public static void main(String args[]){System.out.println("Hello World2");
}
}
程序运行的结果为
hello world
hello world2
Java 程序的初始化顺序如何
在 Java 语言中,当实例化对象时,对象所在的所有成员变量,首先要进行初始化,只有当所有类的成员完成初始化后,才会调用对象对象所在类的构造函数创建对象。
Java 程序的初始化一般要有三个原则,
- 静态对象优先于非静态对象初始化,其中静态对象只初始化一次,而非静态对象可能会初始化多次,
- 父类优先于子类进行初始化,
- 按照成员变量的定义,顺序进行初始化,即使变量定义在方法中,他们依然会在任何方法,包括构造函数被调用之前先被初始化。
Java 作用域有哪些
在计算机中,声明不同地方的变量具有不同的作用域,例如局部变量,全局变量,在 Java 语言中,作用域是由花括号位置决定的,它决定了其定义的变量名的可见性,以及生命周期。
java 作用域有 public private。protected,default。
- public 表明该成员变量或方法,对所有类或对象成员都是可见的,所有类或对象都可以直接访问。
- private 表明该成员变量或者方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
- protected 表明成员变量或方法对该类自身,鱼它在同一个包中的其他类,在其他包中的子类,都可见
- default 表明该成员,或者方法,对该类的自身,与它在同一个包中的其他类,都可见,若父类与子类在同一个包中,则子类,对父类的 default,成员变量或方法都有访问权限,若父类与子类位于不同的包内,则没有访问权限。
一个 Java 文件是否可以定义多个类
一个 Java 文件可以定义多个类,但是最多只能有一个类被 public 修饰,并且这个类的类名,与文件名必须相同,若这个文件中没有 public 类,则文件名随便一个类的名字即可。需要注意的是,当用 Javac 指令编译这个 Java 文件的时候,它会给每一个类生成一个对应的.class 文件。
什么是构造函数
构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量,
构造函数具有以下的特点。
- 构造函数必须与类的名字相同。
- 每个类可以有多个构造函数。
- 构造函数可以有 0 个,1 个,或者一个以上的函数。
- 构造函数总是伴随着 new 操作一起调用,且不能由程序编写者直接调用,必须要由系统调用,构造函数在对象实例化时会被自动调用,且只能运行一次,而普通的方法则是在程序调用的时候调用,且可以被该对象调用多次。
- 构造函数主要作用是完成对象的初始化工作。
- 构造函数不能被继承,因此它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数,个数或者参数类型来定义多个构造函数。
- 子类可以通过 super 关键字来显示的调用父类的构造函数,当父类没有提供无参数的构造函数的时候,子类的构造函数中必须显示的调用父类的构造函数。
- 当父类与子类没有定义构造函数的时候,编译器会为父类生成一个默认的无参数的构造函数,给子类也会生成一个默认的无参数的构造函数。