static和final
static
可用于修饰变量,方法,代码块儿,内部类
静态变量:
static---修饰变量 静态变量,也叫类的变量
随着类的加载而被加载到方法区的静态区中.在静态区中会根据数据类型赋予一个初值。静态变量先于对象的创建而存在,所以可以不用通过实例化对象而访问。当然也可以通过对象来访问,但不提倡这样使用。该类的对象所拥有的静态变量实际上是静态变量在静态区分配的存储空间的地址。
System.in
System.out
静态变量可否定义在构造代码块儿中?---不可以.
静态变量可否在构造代码块儿中赋初值---可以。
静态方法:
static修饰的方法叫静态方法,也叫类方法,随着类的加载而被加载到方法区的静态区中,注意,是加载到静态区中,而不是执行,只有在调用的时候,会到栈中去执行。静态方法和静态变量一样,也是不依赖于任何该类的对象而存在的,所以能够不实例化对象而直接通过类来调用。虽然可以用对象来调用,但不提倡这样使用。
Arrays.sort();
Arrays.copyOf();
System.arraycopy()
Arrays.toString();
1. 可以将静态变量定义在静态方法中吗?---不可以
2. 能在静态方法中调用本类的非静态的方法或访问成员变量吗?—不可以
3. 静态方法可以被重载吗?---可以
4. 静态方法可以被重写吗?---可以继承但不能重写
5. 能在静态方法中使用this或super吗?---不可以
6. 子类中能和父类中拥有签名相同的静态方法吗?---可以
静态代码块:
在这个类第一次被使用的时候执行一次(创建对象,或调用方法的时候) 先父后子,先动后静
class C{
static{
System.out.println("static c block");
}
/*{
System.out.println("c constructor block");
}
public C(){
System.out.println("C constructor");
}
*/
}
class D extends C{
static{
System.out.println("static D block");
}
/*{
System.out.println("D constructor block");
}
public D(){
System.out.println("D constructor");
}
*/
}
final:
1.修饰的变量是常量,常量的值一旦在创建时被赋值就不可修改
2.final修饰的对象的引用不能修改,但引用指向的属性可以修改
3.final修饰的数组元素可以修改,但是数组的引用不可修改
4.final修饰的类不可以被继承
5.final修饰的方法不可以被子类重写