千锋逆战班学习日志
程序员文章站
2022-06-02 22:49:53
...
千锋逆战班学习第16天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的static关键字。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!
总结
- static可以修饰属性和方法,称为静态属性(类属性)、静态方法(类方法)。
- 静态成员是全类所有对象共享的成员,在全类中只有一份,不因创建多个对象而产生多份。
- 访问静态属性和方法时,不必创建对象,可以直接“类名.属性名/方法名”访问。
- 静态方法允许访问静态成员。
- 静态方法不能访问非静态成员。
- 静态方法不允许使用this或是super关键字。
- 静态方法可以继承,不能重写,没有多态。
- 类加载时,触发静态代码块的执行(仅一次),静态属性初始化之后执行,可为静态属性赋值,或必要的初始行为。
- 访问静态属性和方法时,不必创建对象,可以直接“类名.属性名/方法名”访问。
习题1
输出如下代码的结果:
class MyClass{
static int a;
int b;
}
public class TestMain {
public static void main(String[] args) {
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass();
mc1.a = 100;
mc1.b = 200;
mc2.a = 100;
mc2.b = 200;
System.out.println(mc1.a);
System.out.println(mc1.b);
System.out.println(mc2.a);
System.out.println(mc2.b);
}
}
习题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
}
}
请问那行会编译错误?
//5行(静态方法不可调用非静态变量)
//7行(静态方法不可调用非静态方法)
习题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();
}
}
结果
习题4
有如下代码:
class MyClass{
static int i = 10;
static {
i = 20;
System.out.println("ln Static");
}
public MyClass() {
System.out.println("MyClass()");
}
public MyClass(int i) {
System.out.println("MyClass(int i)");
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);
}
结果
习题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 Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Super sup = new Sub();
sup.m1();
sup.m2();
Sub sub = (Sub)sup;
sub.m1();
sub.m2();
}
}
结果
习题6
以下那些论述正确
A.静态方法中不能调用非静态方法
B.非静态方法中不能调用静态方法
C.静态方法不能覆盖
D.静态方法能够用类名直接调用。
E.可以在不产生一个对象情况下调用静态方法
F.静态方法里可以使用this
答案:ACDE
习题15
设计一个类MyClass,为MyClass增加一个count属性,用来统计总共创建了多少个对象
class MyClass{
static int count = 0;
public MyClass() {
count++;
}
}
public class Test15 {
public static void main(String[] args) {
System.out.println(MyClass.count);
MyClass m1 = new MyClass();
System.out.println(MyClass.count);
MyClass m2 = new MyClass();
System.out.println(MyClass.count);
MyClass m3 = new MyClass();
System.out.println(MyClass.count);
MyClass m4 = new MyClass();
System.out.println(MyClass.count);
MyClass m5 = new MyClass();
System.out.println(MyClass.count);
}
}
下一篇: 冻榴莲能吃吗,冻榴莲好吃吗