您的位置:首页 > 编程语言 > Java开发

Java对于静态的理解

2016-08-31 20:40 183 查看
1、外部类是一个泛型类,里面定义了个静态内部类,那么静态内部类不能有泛型类的数据。

因为泛型是要在对象创建的时候才知道是什么类型的,而对象创建的代码执行先后顺序是static的部分,然后才是构造函数等等。所以在对象初始化之前static的部分已经执行了,如果你在静态部分引用的泛型,那么毫无疑问虚拟机根本不知道是什么东西,因为这个时候类还没有初始化。因此在静态方法、数据域或初始化语句中,引用泛型类型参数是非法的

2、静态方法

a.一般情况下,主方法是静态方法,所以JVM可以直接调用它,主方法为静态方法是因为它是整个软件系统的入口,而进入入口时系统中没有任何对象,只能使用类调用。

b.静态方法不需要有对象,可以使用类名调用(不需要实例也可以调用静态方法)。

c.静态方法中不能访问类的非静态成员,包括成员变量和方法;只能访问本类中的静态变量和其它静态方法。因为此时是通过类调用的,没有对象的概念。原因:从根本上说,静态变量不管类是否实例化都会存在,而实例变量只有类实例化了才存在。直接调用静态方法时并不确定实例变量是否存在。

d.静态方法不能被覆盖,如果子类中有和父类重名的静态方法,虽然编译通过,但它并不能实现多态,所以不能称作覆盖public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new Jeep();
car.sell();
car.product();
//car.quality();//父类没有这个方法,所以不能实现
}

}
class Car{
protected void sell(){
System.out.println("price of car");
}
static void product(){
System.out.println("car china");
}
}
class Jeep extends Car{
static void product(){
System.out.println("jeep china");
}
protected void sell(){
System.out.println("price of jeep");
}
void quality(){
System.out.println("quality of jeep");
}
}3、静态代码块
静态代码块(修饰没有名字的代码块):

    1.只被执行一次;

    2.初始化块在类被加载后首先被运行,不管类是否实例化,而且只执行这一次

    3.作用:一般用来初始化一些复杂类型的静态变量。

public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new Jeep();
System.out.println(car.size);//结果是2
car.sell();
car.product();
Car car2 = new Car();
System.out.println(car2.size);//结果是2
//car.quality();//父类没有这个方法,所以不能实现
}

}
class Car{
static int size;
static{
size = 1;
size++;
}
protected void sell(){
System.out.println("price of car");
}
static void product(){
System.out.println("car china");
}
}
class Jeep extends Car{
static void product(){
System.out.println("jeep china");
}
protected void sell(){
System.out.println("price of jeep");
}
void quality(){
System.out.println("quality of jeep");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 静态