Static修饰符
1.(static属性)有如下代码:
class MyClass{
static int a;
int b;
}
public class Test1{
public static void main(String args[]){
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass();
mc1.a = 100;
mc1.b = 200;
mc2.a = 300;
mc2.b = 400;
System.out.println(mc1.a);
System.out.println(mc1.b);
System.out.println(mc2.a);
System.out.println(mc2.b);
}
}
请输出结果:
300
200
300
400
2.(静态成员)有如下代码
class MyClass {
int a;
static int b;
void fa(){}
static void fb(){}
public void m1(){
System.out.println(a); //1
System.out.println(b); //2
fa(); //3
fb(); //4
}
public static void m2(){
System.out.println(a); //5
System.out.println(b); //6
fa(); //7
fb(); //8
}
}
请问哪些行会编译出错?
A. //1
B. //2
C. //3
D. //4
E. //5
F. //6
G. //7
H. //8
E G
注:静态方法不能访问非静态成员
3.(静态属性)有如下代码
class MyClass {
static int count = 0;
public MyClass(){
count++;
System.out.println(count);
}
}
public class TestMain{
public static void main(String args[]){
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass();
MyClass mc3 = new MyClass();
}
}
请写出该程序运行时输出的结果。
1
2
3
4.(静态初始化代码块)有如下代码
class MyClass{
static int i = 10;
static {
i = 20;
System.out.println("In Static");
}
public MyClass(){
System.out.println("MyClass()");
}public MyClass(int i){
System.out.println("MyClass(int)");
this.i = i;
}
}
public class TestMain{
public static void main(String args[]){
MyClass mc1 = new MyClass();
System.out.println(mc1.i);
MyClass mc2 = new MyClass(10);
System.out.println(mc2.i);
}
}
请写出该程序运行的结果 。
In Static
MyClass()
20
MyClass(int)
10
注:静态代码块只执行一次。
5.(静态方法)有如下代码
class Super{
public static void m1(){
System.out.println("m1 in Super");
}
public void m2(){
System.out.println("m2 in Super");
}
}
class Sub extends Super{
public static void m1(){
System.out.println("m1 in Sub");
}
public void m2(){
System.out.println("m2 in Sub");
}
}
public class TestMain{
public static void main(String args[]){
Super sup = new Sub();
sup.m1();
sup.m2();
Sub sub = (Sub) sup;
sub.m1();
sub.m2();
}
}
写出这个程序的运行结果。
m1 in Super
m2 in Sub
m3 in Sub
m4 in Sub
注:静态方法不能重写
6.(static)以下哪些论述是正确的
A. 静态方法中不能调用非静态方法
B. 非静态方法中不能调用静态方法
C. 静态方法不能被覆盖
D. 静态方法能够用类名直接调用
E. 可以在不产生任何一个对象的情况下调用静态方法
F. 静态方法里可以使用 this
A C D E
15.(static)设计一个类 MyClass,为 MyClass 增加一个 count 属性,用来统计总共创建了多少个对象。
public class MyClass {
private static int count = 0;
public MyClass(){
count ++;
}
public int getCount(){
return count;
}
}
每个人生阶段都需要努力去扮好自己的角色,越努力越轻松,越坚强越幸运!加油!