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

2016.7.29终于弄清楚的static关键字

2016-07-29 15:16 453 查看
  关于static,以前敲代码经常看到,但反正觉得看得懂就行,经常得过且过,现在准备好好梳理一下知识,就来看下这个static关键字的作用。

1.在Java里,可以定义一个不需要创建对象就能够调用的方法,这种方法就是静态方法。

静态方法可以直接通过 (类名.方法名)进行调用;

而非静态方法需要先new出该方法所在类的实例(对象),在通过该实例调用非静态方法

例子如下:

public class B {
//静态方法
public static void sayhello(){
System.out.println("helloWorld");
}
//非静态方法
public void sayHi(){
System.out.println("hiWorld");
}

public static void main(String[]args){
B.sayhello();//静态方法可以直接通过类名.方法名调用

B b=new B();//飞静态方法需要先new一个实例,再通过实例调用
b.sayHi();
}

}

2.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员,非静态方法的调用先要new出实例,而非静态变量的调用我还不知道。案例如下:

public class B {
//静态变量number和静态方法hello
public static int number=1;
public static void hello(){}

//非静态变量number2和非静态方法hi
public int number2=2;
public void hi(){}

public static void sayhello(){
//静态方法只能直接调用同类其他静态成员(方法,变量)
B.hello();
System.out.println(number);
//而不能直接访问类中的非静态成员
B b=new B();
b.hi();
}

}

3.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所指的本类对象没有产生;同理,super指的是父类对象,静态方法的调用先于对父类对象的引用,所以用super也会报错。案例如下:

public class C {

     private String name;

     public void setName(String name){

    this.name=name;//无错

     }

     public static void setName2(String name){

    this.name=name;//this报错

     }

}

4.静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,案例如下:
fun()
{
static int i=0;//非法。
}

5.一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}

小例题:

class
Parent {
static String name = "hello"; 

System.out.println("parent block"); 

static { 
System.out.println("parent static block"); 

public Parent(){ 
System.out.println("parent constructor"); 


}

class Child extends Parent{ 
static String childName = "hello"; 

System.out.println("child block"); 

static { 
System.out.println("child static block"); 

public Child(){ 
System.out.println("child constructor"); 




public class C { 
public static void main(String[] args) { 
new Child();//语句(*) 


}
<
4000
/span>

问输出结果是什么?

父类静态代码块>子类静态代码块>父类非静态代码块>父类构造方法>子类非静态代码块>子类构造方法

所以输出结果为:

parent static block

child static block

parent block

parent constructor

child block

child constructor

感谢ID小顾问http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java