Java面试之Java基础知识第一季

47次阅读

共计 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 程序的初始化一般要有三个原则,

  1. 静态对象优先于非静态对象初始化,其中静态对象只初始化一次,而非静态对象可能会初始化多次,
  2. 父类优先于子类进行初始化,
  3. 按照成员变量的定义,顺序进行初始化,即使变量定义在方法中,他们依然会在任何方法,包括构造函数被调用之前先被初始化。

Java 作用域有哪些

在计算机中,声明不同地方的变量具有不同的作用域,例如局部变量,全局变量,在 Java 语言中,作用域是由花括号位置决定的,它决定了其定义的变量名的可见性,以及生命周期。
java 作用域有 public private。protected,default。

  1. public 表明该成员变量或方法,对所有类或对象成员都是可见的,所有类或对象都可以直接访问。
  2. private 表明该成员变量或者方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
  3. protected 表明成员变量或方法对该类自身,鱼它在同一个包中的其他类,在其他包中的子类,都可见
  4. default 表明该成员,或者方法,对该类的自身,与它在同一个包中的其他类,都可见,若父类与子类在同一个包中,则子类,对父类的 default,成员变量或方法都有访问权限,若父类与子类位于不同的包内,则没有访问权限。

一个 Java 文件是否可以定义多个类

一个 Java 文件可以定义多个类,但是最多只能有一个类被 public 修饰,并且这个类的类名,与文件名必须相同,若这个文件中没有 public 类,则文件名随便一个类的名字即可。需要注意的是,当用 Javac 指令编译这个 Java 文件的时候,它会给每一个类生成一个对应的.class 文件。

什么是构造函数

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量,
构造函数具有以下的特点。

  1. 构造函数必须与类的名字相同。
  2. 每个类可以有多个构造函数。
  3. 构造函数可以有 0 个,1 个,或者一个以上的函数。
  4. 构造函数总是伴随着 new 操作一起调用,且不能由程序编写者直接调用,必须要由系统调用,构造函数在对象实例化时会被自动调用,且只能运行一次,而普通的方法则是在程序调用的时候调用,且可以被该对象调用多次。
  5. 构造函数主要作用是完成对象的初始化工作。
  6. 构造函数不能被继承,因此它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数,个数或者参数类型来定义多个构造函数。
  7. 子类可以通过 super 关键字来显示的调用父类的构造函数,当父类没有提供无参数的构造函数的时候,子类的构造函数中必须显示的调用父类的构造函数。
  8. 当父类与子类没有定义构造函数的时候,编译器会为父类生成一个默认的无参数的构造函数,给子类也会生成一个默认的无参数的构造函数。

正文完
 0