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

为什么需要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. 当父类与子类没有定义构造函数的时候,编译器会为父类生成一个默认的无参数的构造函数,给子类也会生成一个默认的无参数的构造函数。
阅读 284

推荐阅读