欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

千锋逆战班学习日志

程序员文章站 2022-06-02 22:49:53
...

千锋逆战班学习第16天


千锋逆战班学习第16天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的static关键字。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!

总结

  1. static可以修饰属性和方法,称为静态属性(类属性)、静态方法(类方法)。
  2. 静态成员是全类所有对象共享的成员,在全类中只有一份,不因创建多个对象而产生多份。
  3. 访问静态属性和方法时,不必创建对象,可以直接“类名.属性名/方法名”访问。
  4. 静态方法允许访问静态成员。
  5. 静态方法不能访问非静态成员。
  6. 静态方法不允许使用this或是super关键字。
  7. 静态方法可以继承,不能重写,没有多态。
  8. 类加载时,触发静态代码块的执行(仅一次),静态属性初始化之后执行,可为静态属性赋值,或必要的初始行为。
  9. 访问静态属性和方法时,不必创建对象,可以直接“类名.属性名/方法名”访问。

习题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);
	}

}

千锋逆战班学习日志

相关标签: 学习总结