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

Java 关键字之static详解

2016-05-30 16:33 288 查看
Static 关键字

总结归纳:

1.        静态方法和静态变量是属于某一个类,而不属于类的对象;

2.        静态方法和静态变量的引用可以直接通过类名+. 或者引用+.;

3.        在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。

4.        静态变量在某种程序上与其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问

5.        static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),

           但是不能在 其他类中通过类名来直接引用,这一点很重要。

         换个思路理解:private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。

         static前面加上其它访问权限关键字的效果也以此类推。eg:public

6.     用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。

注:Static修饰的变量为静态变量,static修饰的方法叫静态方法

static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...) 

类名.静态变量名

一:static 修饰代码块/类时:

Static还可以定义静态语句块。

Static 定义静态语句块实例如下:

Public class StaticTest01{

//静态语句块:在类加载的阶段执行,并且只执行一次,并且是自上而下的顺序执行

Static{

System.out.println(“1”);

}

Static{

System.out.println(“2”);

}

Static{

System.out.println(“3”);

}

Static{

System.out.println(“4”);

}

//入口

Public static void main(String[] args){

}

关于实例语句块:每次调用构造方法之前会执行一次,自上而下执行

public class StaticTest02{

//静态语句块

Static{

System.out.println(“A”);

}

//实例语句块

{

System.out.println(“1”);

}

{

System.out.println(“2”);

}

//构造方法

StaticTest02(){

System.out.println(“StaticTest02无参数的构造方法执行!”);



public static void main(string[]args){

//调用构造方法

new StaticTest02();

}

}

二:Static 修饰方法时:

Static修饰的方法为静态方法

一般情况下工具类中的方法大部分都是静态方法,静态方法不用创建对象也可以直接访问方法。

public class StaticTest03{

//成员方法:必须使用“引用.”调用

public void m1(){

 当前

}

//静态方法可以使用“类名.”方法调用,不能直接访问非静态数据(成员变量和方法);

//静态方法中不能使用this

public static void m2(){

}

//入口

public static voidmain(String[] args){

StaticTest03 st=newStaticTest03();

st.m1();

 m2();

//静态方法按照正规方式访问:”类名.”,同时也可以用”引用.”访问

//st.m2();//编译阶段检查出st是StaticTest03 类型,编译通过,运行时仍使用 “StaticTest03.“方式访问,不需要对象;

//空的引用去访问成员的时候才会出现空指针异常

M2方法不是成员,而是静态的所以及时引用是空的,也不会报空指针异常;

StaticTest03 s=null;

S.m2();

 }

}

三:Static 修饰变量时:

Static 修饰的变量为静态变量



变量分类:局部变量,成员变量(实例变量,非静态变量),静态变量;

public class StaticTest04{

public void main (String[] args){

Animal a1=new Animal(“AAA”,10);

Animal a1=new Animal(“BBB”,11);

}

}                                                        

//抽象现实世界中“陆生”动物

class Animal{

//Field

//成员变量(一个对象一份)

//在创建对象的时候初始化,并且存储在堆中的每一个对象中

String name;                  

int age;

String type=“陆生”;

//Constructor

Animal(string name,int age){

this.name=name;

this.age=age;

}

}

变更:static string type=“陆生”;//静态变量,被存储在方法区,所有的java 对象共享这一份,所以是类级别的变量,使用”类名.”方式访问。

什么时候声明静态变量?

  如果这个属性所有的对象都有,且这个属性的值是相同的,则该属性声明为静态变量

如何访问静态变量

//类名.

System.out.println(Animal.type);

//引用.

System.out.println(a1.type);

Animal a3=null;

System.out.println(a3.type);//静态变量底层访问的时候一定使用的”类名.”和对象无关,不会出现空指针异常

什么时候初始化

成员变量:创建java对象时初始化

静态变量:在类加载阶段赋值,并只赋值一次

关于代码的顺序:

//非法向前引用

Public classstaticTest05{

Static{

System.out.println(i);

}

Static int i=100;

}

结果:加载失败

应改为:

Public classstaticTest05{

Static int i=100;

Static{

System.out.println(i);

}

}

最后总述:

类{

//必须对象存在才可以访问,采用”引用.”;

成员变量

成员方法

//可以通过 ”类名.”也可以使用 ”引用.”底层也是 ”类名.”访问;

静态变量

静态方法

//类加载时且执行一次;

静态语句块

//构造方法每调用之前执行一次;

实例语句块

//创建对象,给成员变量赋值;

构造方法

//用在成员方法和构造方法中;

this

}

空指针异常:空引用访问成员时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: