static关键字 java

static最突出的特点是在没有创建对象的情况下来就可以调用方法或变量。被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。static可以用来修饰类的成员方法、类的成员变量,也可以编写static代码块来优化程序性能。下面对这些特性进行讲解:

1、静态变量

static变量也称作静态变量,静态变量和非静态变量的区别是:

静态变量被所有的对象所共享,在内存中只有一个副本,被所有的实例共享。

非静态变量是某个对象单独拥有,在创建对象的时候被初始化,各个对象拥有的非静态变量互不影响。

如下例:

class Student {
	static String schoolName;  // 定义静态变量schoolName
}
public class Example12 {
	public static void main(String[] args) {
		Student stu1 = new Student();	     // 创建学生对象
		Student stu2 = new Student();
		Student.schoolName = "传智播客";		// 为静态变量赋值
		System.out.println("我的学校是" + stu1.schoolName);	// 打印第一个学生对象的学校
		System.out.println("我的学校是" + stu2.schoolName); // 打印第二个学生对象的学校
	}
}

输出:

我的学校是传智播客
我的学校是传智播客

注意:static只能用于修饰成员变量,不能用于修饰局部变量,否则错误。如下面的代码是错误的

public class Student {
	public void speak() {  
		static int num=12;       //不能用于修饰局部变量,即使speak也定义为static
	}
}

2、静态方法

被static修饰的方法称作作静态方法,不创建对象就可以调用静态方法,静态方法可以使用“类名.方法名的方式来访问”。

但也因为这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

class Person {
	public static void sayHello() { // 定义静态方法
		System.out.println("hello");
	}
}
class Example {
	public static void main(String[] args) {
		Person.sayHello();     // 调用静态方法,最后直接输出hello
	}
}

3、静态代码块

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,只会执行一次(只会在类第一次使用时才会被加载)也因此static关键字形成静态代码块可以优化程序性能。

class Person {
	static String country;
	static {    //一个静态代码块        
		country = "china";
		System.out.println("Person类中的静态代码");
	}
}

class Example2 {    
	static {  // 静态代码块         
		System.out.println("测试类静态代码");
	}
	public static void main(String[] args) {
		Person p1 = new Person();// 创建对象p1
		Person p2 = new Person();// 创建对象p2
	}
}
结果:该方法中创建了两个对象,但在两次实例化的过程中,静态代码只执行了一次,这说明类在第一次使用时才会被加载



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值