Java 中的 static

Java 中的 static 的使用



package com.baiyimao;

/*

 * 

 * 

 * 

 * Java 中被 static 修饰的成员称为静态成员或类成员。

 * 它属于整个类所有,而不是某个对象所有,即被类的所有

 * 对象所共享。静态成员可以使用类名直接访问,也可以使

 * 用对象名进行访问。当然,鉴于他作用的特殊性更推荐用

 * 类名访问~~

 * 

 * 注意: 静态成员属于整个类 当系统第一次使用该类是 就会

 * 为其分配一块内存区域,直到该类被卸载才会进行资源回收

 */


/*

 * 与静态变量一样,我们也可以使用 static 修饰方法,称

 * 为静态方法或类方法。 其实之前我们一直写的 main 方法

 * 就是静态方法。

 * 

 * 

 * 

 * 

 */


public class Hello {

    String className = "JAVA开发一班";

    //1.1 static 修饰的变量为静态变量 所有累的对象共享hobby

    static String hobby = "baiyimao";


    //3.1 static 使用之静态初始化块

    int num1 ;

    int num2 ;

    static int num3 ;//静态变量

    

    

    

    

public static void main(String[] args) {

        

System.out.println(  "****静态变量*******"  );

//静态变量可以直接用类名来访问  无需创建类的对象

System.out.println("通过类名名访问hobby" + Hello.hobby);

//  创建类的对象

Hello hello = new Hello();

System.out.println("通过对象名访问bobby:" + hello.className);

System.out.println(  "*****静态方法******"  );

System.out.println(  " main 方法就是静态方法 "  );

//直接使用类名调用静态方法

Hello.println();

hello.println(); //也可以通过对象名调用 推荐使用类名 调用的方式

Hello.name();//静态方法中调用非静态变量

hello.show();//普通成员方法中 则可以直接访问同类的非静态变量 和 静态变量

Hello.care();//静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法

System.out.println(  "*****3 static 使用之静态初始化块******"  );

System.out.println(  "num1:" + hello.num1  );

System.out.println(  "num2:" + hello.num2  );

System.out.println(  "num5:" + num3  );

Hello hello2 = new Hello();

/*

* print 结果;

* 通过构造方法为变量num3 赋值

* 通过构造方法为变量num2 赋值

* 通过构造方法为变量num1 赋值

* num1:3

* num2:4

* num5:5

* 通过构造方法为变量num2 赋值

* 通过构造方法为变量num1 赋值

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,

然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只

在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静

态初始化块。

*/

}

//2.1使用static 关键字申明静态方法

    public static void println() {

System.out.println("欢迎来到佰亿猫");

}

//2.2如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量

public static void name() {

System.out.println(  "*****2.2 ******"  );

//创建类对象

Hello hello = new Hello();

//通过对象来实现在静态方法中调用非静态变量

System.out.println("欢迎您:"+ hello.className);

System.out.println("欢迎您:"+ hobby + "!");


}

//2.3在普通成员方法中 则可以直接访问同类的非静态变量 和 静态变量

public void show() {

System.out.println(  "*****2.3 ******"  );

System.out.println("欢迎您:"+ className + "!");

System.out.println("欢迎您:"+ hobby + "!");


}

//2.4 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法

    public static void care () {

    

    System.out.println(  "*****2.4 ******"  );

    // 普通方法必须通过对象调用

    Hello hello = new Hello();

    hello.show();

    

    //可以直接调用静态方法

    println();

}

    

    //3.2 static 使用之静态初始化块

    public  Hello() {

num1 = 3;

System.out.println(  "通过构造方法为变量num1 赋值"  );

}

    {//初始化块

    num2 = 4;

    System.out.println(  "通过构造方法为变量num2 赋值"  );

    

    }

    static {//初始化块

num3 = 5;

System.out.println(  "通过构造方法为变量num3 赋值"  );

}

}

/*

 * 附录:

 *  修饰符是添加到这些定义来改变它们的含义的关键词。 

 *  Java语言有各种各样修饰词,其中包括以下内容:

 * Java  访问修辞符

 *  非访问修饰符

 * 

 * 访问控制修饰符:Java提供了许多访问修饰符来设置访问级别类,变量,方法和构造函数。

 * 这四个访问级别:

 * 可见的包,默认。不需要任何修饰​​。

 * 可见的类(private) 

 * 可见的世界(public).

 * 可见包和所有子类 (protected).

 * 

 * 非访问修饰符: Java提供了一些非访问修饰符来实现很多其他的功能。

 * static 修饰符用于创建类的方法和变量

 * final 修饰符的类最终确定,方法和变量的实现。

 * abstract 修饰符用于创建抽象类和方法。

 * synchronized 和 volatile 修饰符这是用于线程。

 */


/*

 * 打印结果如下:

通过构造方法为变量num3 赋值

****静态变量*******

通过类名名访问hobbybaiyimao

通过构造方法为变量num2 赋值

通过构造方法为变量num1 赋值

通过对象名访问bobby:JAVA开发一班

*****静态方法******

 main 方法就是静态方法 

欢迎来到佰亿猫

欢迎来到佰亿猫

*****2.2 ******

通过构造方法为变量num2 赋值

通过构造方法为变量num1 赋值

欢迎您:JAVA开发一班

欢迎您:baiyimao!

*****2.3 ******

欢迎您:JAVA开发一班!

欢迎您:baiyimao!

*****2.4 ******

通过构造方法为变量num2 赋值

通过构造方法为变量num1 赋值

*****2.3 ******

欢迎您:JAVA开发一班!

欢迎您:baiyimao!

欢迎来到佰亿猫

***** static 使用之静态初始化块******

num1:3

num2:4

num5:5

通过构造方法为变量num2 赋值

通过构造方法为变量num1 赋值


 */



猜你喜欢

转载自blog.csdn.net/jq2530469200/article/details/52190146