一个JAVA文件可以定义多个类,但是只能有一个是public(也可以没有public类),并且该public的类的名称和JAVA文件名称相同。同时一个java文件可以有多个main方法,只有和java文件名相同的那个类的main方法才是程序的入口。在编译的时候,多个类会被分别编译成不同的.class文件。
在JAVA语言中,静态代码块会在类的加载过程中被调用,因此静态代码块可以在main()方法之前执行。
静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。
- 继承体系的所有静态成员初始化(先父类,后子类,静态代码块和静态变量的顺序依赖于在代码中的位置)
- 父类初始化完成(普通成员的初始化-->构造函数的调用)
- 子类初始化(普通成员-->构造函数)
Java中的变量分为:成员变量(随对象的创建和销毁而创建和销毁)、静态变量(随类的加载和卸载而创建和销毁)、局部变量(作用于在花括号内)。
private和protected不能修饰外部类只能修饰内部类。接口的访问控制符只能是public和默认。接口内可以申明变量但是只能被public和默认修饰符(在编译的时候会编译为public static final)。没有声明任何方法的接口被称为标示接口,用来表明实现它的类属于一个特定的类型。Java中的标识接口包括Cloneable和Serializable。
构造函数不能被继承,因此不能覆盖。子类可以通过super关键字来调用父类构造函数,当父类没有提供无参数的构造函数时,子类构造函数必须显示调用父类构造函数。如果父类构造函数提供了无参的构造函数,子类的构造函数就可以不显示的调用父类的构造函数。子类在实例化时会先执行父类的构造函数。普通方法可以和构造方法同名。构造方法伴随着new关键字一起使用,且不能被编写者调用只能有系统调用。
处于阻塞状态的线程的共同特点是:放弃CPU,暂停运行,只能等到导致阻塞的原因消除才能恢复运行;或者被其他线程中断,该线程退出阻塞状态,并抛出InterruptedException。
在JAVA中内存泄露主要有两种情况:1,在堆中申请的空间没有释放;二是对象已不再使用,但任然在内存中保留。在JAVA语言中引起内存泄露的原因主要包括:1.静态集合类。它们的生命周期和程序一致,那么容器中的对象在程序结束前不能释放。2.各种连接,例如数据库连接、网络连接。