static

Java 中的 static 使用之静态变量

1.Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。
2.使用 static 可以修饰变量、方法和代码块。
注意:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
例子1:我们在类中定义了一个 静态变量 hobby ,操作代码如下所示:

public class  HelloWorld{
//static修饰的成员变量为静态变量,所有类的对象共享hobby
static String void hobby = "君君";
public static void main(String [] args){
//静态变量可与直接使用类名来访问,无需创建类的对象
System.out.println("通过类名访问hobby:" =HelloWorld.hobby);
//创建类的对象
HelloWorld hello = new HelloWorld();
//使用对象名来访问静态变量
System.out.println(" 通过对象名访问hobby:"+hello.hobby);
//使用对象名的形式修改静态变量的值
hello.hobby="小君君";
//再次使用类名访问静态变量,值已被修改
System.out.println("通过类名访问hobby:"+ HelloWorld.hobby);
	 }
}

例子2:在编辑器中定义了一个 HelloWorld 类,在类中定义一个静态变量 className ,保存班级名称。在 main 方法中调用静态变量输出班级信息。
1.静态变量应使用 static 关键字修饰
2. 可以通过 “类名.静态变量” 访问静态变量 如:HelloWorld.className
也可以通过 “对象名.静态变量” 访问静态变量 如:

public class Helloword{
//定义静态变量,保存班级名称
static String className = "Java 开发“;
public static void main (String[] args)
{
//访问静态变量。输出班级名称
//HelloWorld hh = new  HelloWorld();
//System.out.println(hh.className);
System.out.println(HelloWorld.className);
	 }
}

Java 中的 static 使用之静态方法

1.与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:

public class HelloWorld{
//使用是static 关键字声明静态方法
public static void print(){
//直接使用类名调用静态方法
HelloWold.print();
//也可以通过对象名词用,当然更推荐使用类名调用的方式
HelloWorld demo = new HelloWorld();
demo.print();
	 }
}

静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

public class HelloWorld{
String name = "小君君“;//非静态name
static String hobby = "hh";//静态变量hobby

//在静态方法调用非静态变量
public static void print(){
System.out.print(" 欢迎你:" +name );
System.out.print(“ 哈哈:”+hobby);
	  }
}

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

public static void print(){
//创建类的对象
HelloWorld hello = new HelloWorld (){
//通过对象来实现在静态方法中调用非静态变量
System.out.print(" 欢迎你:" +name );
System.out.print(“ 哈哈:”+hobby);
	  }
 }

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

String name = " 小君君";       //非静态变量name
static String hobby = "hh";     //静态变量hobby

//普通成员方法可以直接访问非静态变量和静态变量
public void show(){
System.out.print(" 欢迎你:" +name );
System.out.print(“ 哈哈:”+hobby);
	}
}

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:
//普通成员方法

public void show(){
System.out.println("welcome");
}
//静态方法
public static void print(){
System.out.println("欢迎");
}
public static void main(String [] args){
HelloWorld demo = new HelloWorld();
demo.show();
//可以直接调用静态方法
print();
}

任务
在编辑器中分别定义了两个静态变量 score1 和 score2 ,用于保存成绩信息。定义了一个静态方法 sum ,用于计算成绩总分,在 main 方法中通过调用静态方法输出成绩总分

public class HellWorld{
//定义静态变量score1
static int score1 = 86;
//定义静态变量score2
static score2 = 92;
//定义静态方法sum,计算成绩总分,并返回总分
public static int sum(){
return score1 + score2;
}
public static void main (String[] args){
//使用类名访问静态方法sum并接收返回值
int allSore =HelloWorld.sum();
//使用对象名访问静态方法sum并接收返回值
//HelloWorld demo = new HelloWorld();
//int allScore = demo.sum();
System.out.println("总分:"+allScore);
	 }
}

Java 中的 static 使用之静态初始化块
Java 中可以通过初始化块进行数据赋值。如:

public class HelloWorld {
String name;       //定义一个成员变量
//通过初始化块为成员变量赋值
{
name = " java";
	 }
}

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

public class Hel1oWorld {
int num1;// 声明变量num1
int num2;// 声明变量num2
static int num3;//声明静态变量num3
num3public HelloWor1d() {// 构造方法
num1 = 91;
system.out. println( "通过构造方法为变量num1赋值");
}
{	//初始化块
num2 = 74;
system.out .println( "通过初始化块为变量num2赋値");
}
static {			// 静态初始化快
num3 = 83;
System. out . println(“通过静态初始化块为静态变量num3赋值”) ;
}
public static void main(String[] args) {
HelloWor1d hello =  new He11oWor1d( );//创建类的対象he11o
System. out . println("num1:" + hel1o. num1) ;
System. out . println("num2:" + he11o. num2);
System. out .println("num3:" + num3);
HelloWorld hello2 = new He11oWor1d();//再创建类的対象hello2
   }
}

程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
例题:在编辑器中,分别通过构造方法、初始化块和静态初始化块对变量进行初始化赋值。

public class HelloWorld {
      String name; //声明变量name
String sex; //声明变量sex 
      static int age;//声明静态变量age
      public HelloWorld() { //构造方法
      System.out .printin("通过构造方法初始化name");
name =” tom";
      { 	//初始化块
      System.out . println("通过初始化块初始化sex");
sex =“男”;
      }
      static { //静态初始化块
      System. out . println("通过静态初始化块初始化age" );
age = 20;
      }
      public void show() {
      System. out.println("姓名:”+ name +”,性别:"+sex+",年龄:"+age);
      }
      public static void main(String[] args) {
      HelloWorld hello = new HelloWorld();//创建对象 
hello. show();    //调用对象的show方法
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值