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 赋值
*/