您现在的位置是:主页 > news > 长沙有效的可以看的网站/中国广告公司前十强
长沙有效的可以看的网站/中国广告公司前十强
admin2025/5/7 16:10:59【news】
简介长沙有效的可以看的网站,中国广告公司前十强,一级消防工程师考试资料,wordpress单点ssostatic 是一个修饰符,用于修饰类的成员方法和成员变量,另外可以编写 static 代码块来优化程序性能。下面我们详细介绍 static 关键字的用法。static与静态变量类中会存在成员变量,一般只有类的对象才能访问成员变量,而每个对象都是…
static 是一个修饰符,用于修饰类的成员方法和成员变量,另外可以编写 static 代码块来优化程序性能。下面我们详细介绍 static 关键字的用法。
static与静态变量
类中会存在成员变量,一般只有类的对象才能访问成员变量,而每个对象都是单独的对象。在某些情况下,我们需要所有的类的对象都能访问某些变量,而不是某个对象所独有。这时需要使用 static 修饰符定义静态变量。
定义静态变量的方式如下:
static 变量类型修饰符 变量名
定义静态变量后,可以通过类的对象进行访问;也可以不创建对象,而直接通过类名访问。鉴于静态变量的特殊性,建议使用类名访问的方式。其访问方式如下:
类名.静态变量名
对象名.静态变量名
静态变量的使用方式如示例 1 所示。
【示例 1】静态变量的使用
package chapter7;
public class staticVar {
static String name = "Ben";
public static void main(String[] args) { // 通过类名访问静态变量
System.out.println("通过类名访问静态变量: " + staticVar.name);
staticVar.name = "Mike";
System.out.println("通过类名修改变量后,名字为: " + staticVar.name);
staticVar var = new staticVar(); // 定义类的对象访问静态变量
System.out.println("通过对象名访问静态变量: " + var.name);
name = "jack";
System.out.println("通过对象名修改变量后,名字为:" + var.name);
staticVar var2 = new staticVar(); // 定义第二个变量访问静态变量
System.out.println("另外一个对象访问静态变量:" + var2.name);
}
}
程序编译后,运行结果如下:
通过类名访问静态变量: Ben
通过类名修改变量后,名字为: Mike
通过对象名访问静态变量: Mike
通过对象名修改变量后,名字为:jack
另外一个对象访问静态变量:jack
从程序运行结果可以看出,静态变量既可以由类的对象操作,也能通过类名直接访问(不需要定义对象)。当存在多个类的对象时,静态变量对于所有的对象来说是共享的,其获取到的值是一致的。
static与静态方法
在 Java 中,static 修饰符还可以直接修饰方法,从而构成静态方法。其定义方式如下:
static 方法返回值 方法名(参数列表) {
方法内容
}
定义了静态方法之后,同样可以通过类名和对象名两种方式来访问。普通的方法只能通过对象名的方式进行访问。静态方法的访问方式如下:
类名.静态方法名
对象名.静态方法名
静态方法与普通的实例方法存在一定的区别:
静态方法中只能访问静态变量,而不能访问普通的成员变量;
实例方法既可以访问静态变量,也可以访问普通的成员变量。
这是因为在创建静态方法时,普通的成员变量还未创建,只能在创建了类的对象之后才能使用成员变量。如果在静态方法中使用普通成员变量,一般会提示错误,错误信息如下:
Non-static filed 'name' cannot be referenced from a static context
关于静态方法的使用方式,如示例 2 所示。
【示例 2】静态方法的使用
package chapter7;
public class staticFun {
static String staticName = "Ben"; // 定义静态变量
String name = "Mike"; // 定义静态变量
static void staticShowName() { // 定义静态方法
System.out.println(staticName); // 静态方法中访问静态变量
// System.out.println (name) ; // 静态方法中访问普通变量,提示错误
}
void showName() { // 定义普通方法
System.out.println(staticName); // 普通方法中访问静态变量
System.out.println(name); // 普通方法中访问普通变量,可以正常使用
}
public static void main(String[] args) {
System.out.println("通过类名调用静态方法");
staticFun.staticShowName();
System.out.println("通过对象名调用静态方法");
staticFun fun = new staticFun(); // 定义对象
fun.staticShowName();
fun.showName();
}
}
程序编译后,运行结果如下:
通过类名调用静态方法
Ben
通过对象名调用静态方法
Ben
Ben
Mike
从示例 2 可以看出,静态方法既可以通过类名直接访问,也可以通过类的对象来访问。在实际的调用过程中,可以根据需要选择不同的调用方式。
static与静态初始化块
静态方法在类加载的时候就已经加载,可以用类名直接调用。在某些情况下,需要在项目启动的时候调用某些操作,如加载基本参数、初始化某些记录等。此时静态方法就不能解决此类需求了。在 Java 中,一般使用静态初始化块来实现这种操作。
静态初始化块是自动执行的,在项目创建的时候就已经执行,其执行顺序永远在第一位。定义方式为:
static {
// 静态代码块主体
}
如果不加 static 修饰符,一般是非静态块。其执行顺序在静态块之后、普通的构造函数之前,如示例 3 所示。
【示例 3】静态初始化代码块的使用
package chapter7;
public class staticfield { // 创建静态类
static { // 静态代码块
System.out.println("父类中,静态块被执行");
}
{ // 非静态代码块
System.out.println("父类中,非静态块被执行");
}
staticfield() { // 构造函数
System.out.println("父类中,构造函数被执行");
}
}
class childstaticfield extends staticfield { // 定义子类
static { // 定义静态代码块
System.out.println("子类中,静态块被执行");
}
{ // 非静态代码块
System.out.println("子类中,非静态块被执行");
}
childstaticfield() { // 子类构造函数
System.out.println("子类中,构造函数被执行");
}
public static void main(String[] args) {
childstaticfield tmp = new childstaticfield(); // 定义子类对象
}
}
程序编译后,运行结果如下:
父类中,静态块被执行
子类中,静态块被执行
父类中,非静态块被执行
父类中,构造函数被执行
子类中,非静态块被执行
子类中,构造函数被执行
从程序运行结果来看,我们可以得出以下两点结论:
对于单个类来说,类在创建对象时首先执行静态块,然后执行非静态块,最后执行构造函数。
对于有继承的子类对象来说,在创建对象时,首先查找父类中是否有静态块,如果有就先执行父类的静态块,然后执行子类的静态块。当静态块都执行完毕后,再执行父类中的非静态块和构造函数。都执行完之后,再依次执行子类的非静态块和构造函数。