说明一下public static void main(String args[])这段声明里每个关键字的作用?
public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为 pulic.
static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。
void: main方法没有返回值。
String是命令行传进参数的类型,args是指命令行传进的字符串数组。
public,private,protected的区别,继承方法与访问权限
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能 赋值给short型。
而short s1 = 1; s1 += 1;**+=操作符会进行隐式自动类型转换**,是 Java 语言规定的运算 符;Java编译器会对它进行特殊处理,因此可以正确编译。因为s1+= 1;相当于s1 = (short)(s1 + 1)。
static的独特之处?
1、被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享 。
2、在该类被第一次加载的时候,就会去加载被static修饰的部分,而且只在类第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要是可以再次赋值的。
3、static变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分配。赋值的话,是可以任意赋值的!
4、被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。
程序初始化的顺序
在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。
java程序的初始化—般遵循以下三个原则(以下三个原则优先级依次递减):
1)静态对象(变 量)优先于非静态对象初始化,其中静态对象(变量)只初始化1次,而非静态对象(变量)可 能会初始化多次。
2)父类优先于子类进行初始化。
3)按照成员变量定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任意方法(包括构造方法)被调用之前先进行初始化。
Java程序的初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数 等),它们执行的顺序为:父类静态变量→父类静态代码块→子类静态变量→子类静态代码→父类非静态变量→父类非静态代码块→父类构造方法→子类非静态变量→子类非静态代码块→子类构造方法。
(静态)非静态成员域在定义时初始化和(静态)非静态代码块中初始化的优先级是平级的,也就是说按照从上到下初始化,最后—次初始化为最终的值(不包括非静态的成员域在构造器中初始化)。所以在(静态)非静态块中初始化的域甚至能在该域声明的上方,因为分 配存储空间在初始化之前就完成了。