有关static的作业

static 是 java 语言中的关键字,意思是“静态的”,它可以用来修饰变量、方法、代码块等,修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。

static的作用就是用于区分成员变量、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例/。静态变量是成员变量的一种,静态变量存储在方法区中,则它在类加载时就会进行初始化,所以静态变量访问的时候不需要创建实例(对象),直接可以通过类名来访问;下面举个例子:

public class StaticTest01 {
public static void main(String[] args) {
Chinese c1 = new Chinese("张三", "333333333333", "中国");
System.out.print("姓名:" + c1.name);
System.out.print(" 身份证号:" + c1.idNum);
System.out.println(" 国籍:" + c1.nation);
Chinese c2 = new Chinese("李四", "444444444444", "中国");
System.out.print("姓名:" + c2.name);
System.out.print(" 身份证号:" + c2.idNum);
System.out.println(" 国籍:" + c2.nation);
}
}
class Chinese {
// 姓名; 实例变量
String name;
//身份证号; 实例变量
String idNum;
//国籍; 实例变量
String nation;

//无参构造器
public Chinese() {}
//有参构造器
public Chinese(String myName, String myIdNum, String myNation) {
this.name = myName;
this.idNum = myIdNum;
this.nation = myNation;
}
}

输出:

姓名:张三 身份证号:333333333333 国籍:中国
姓名:李四 身份证号:444444444444 国籍:中国

可以看出来,这个Chinese类抽象的是中国人,所以这里面”国籍“实例变量就可以声明为静态变量,让国籍固定为chinese;
访问时只需要用Chinese类来访问就可以了;

静态变量可以使用引用去访问,但实际上在执行过程中,引用所指向的对象并没有参与,如果是空引用访问实例变量,程序一定会发生空指针异常,但是如果用空引用访问静态变量,程序并没有发生空指针异常,所以通过引用访问静态变量实际上还是直接通过类去访问的,列如:

public class StaticTest03 {
public static void main(String[] args) {
Chinese c = new Chinese("张三", "3333333333");
System.out.print("姓名:" + c.name);
System.out.print(" 身份证号:" + c.idNum);
//这里使用引用调用了静态变量nation
System.out.println(" 国籍:" + c.nation);

//将引用c置空
c = null;
/*
这两个实例变量当引用c置空后就它所指向的实例就无法从堆内存中找到了
System.out.print("姓名:" + c.name);
System.out.print(" 身份证号:" + c.idNum);
*/

//而因为nation是静态变量,存放在方法区中,还是可以找到;
System.out.println(" 国籍:" + c.nation);
}
}
class Chinese {
// 姓名; 实例变量
String name;
//身份证号; 实例变量
String idNum;
//国籍; 静态变量
static String nation = "中国";

// 无参构造器
public Chinese() {}
// 有参构造器
public Chinese(String myName, String myIdNum) {
this.name = myName;
this.idNum = myIdNum;
}
}

2、静态变量使用的场景:

(1)对象间共享值时

(2)方便访问变量时

3、静态方法使用注意事项:

(1)不能在静态方法内使用非静态变量,即不能直接访问所属类的实例变量;

(2)不能在静态方法内直接调用非静态方法;

(3)静态方法中不能使用this和super关键字;
二、子类会继承父类的静态方法,当然非静态方法也会继承。如果父类中的静态方法和子类中的非静态方法同名,那么通过对象去调用,编译器不能判断去调用哪个方法,因此会报错,同理父类中的非静态方法和子类中的静态方法同名也会造成编译器报错。

public class SquareIntTest {

public static void main(String[] args) {

int result;

 

for (int x = 1; x <= 10; x++) {

result = square(x);

System.out.println("The square of " + x + " is " + result + "\n");

}

}

// 自定义求平方数的静态方法

public static int square(int y) {

return y * y;

}

}

分析解答:static,是静态的,属于公共的,不需要实例化;如果不带static,,就必须实例化类,再调用该方法。解决方法如下:

public class SquareIntTest {

public static void main(String[] args) {

int result;

SquareIntTest t=new SquareIntTest();

for (int x = 1; x <= 10; x++)

{

result = t.square(x);

System.out.println("The square of " + x + " is " + result + "\n");

}

}

// 自定义求平方数的方法

public  int square(int y) {

return y * y;

}

}

posted @   小旺财  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示