2020.7.22
一、今日学习内容
1、static关键字
通常访问类的属性和方法需要创建该类的实例,而static关键字的访问是不需要某个特定的实例的。如果在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,就能够在它的类的任何对象创建之前被访问,而不必引用任何对象,用户可以将方法和变量都声明为static。
(1)静态变量
静态变量只需要在变量前加上static 关键字即可,静态变量不需要通过对象来访问,直接使用“类名.变量名”直接访问,并且该变量不属于具体的哪一对象。
示例:
public class VarDemo { private static int x=1; public static void main (String[] args) { VarDemo.x++; //使用类名直接访问 VarDemo V = new VarDemo() ; V.x++; //使用对象访问 System. out.println("x="+x); } }
输出结果:x=3
不管使用对象访问还是使用类名访问,对x的值都起到了作用,那是因为静态变量是属于整个类的,并不属于某一个具体的对象。
(2)静态方法
示例:
public class StaticMethodDemo { public static void main (String[] args) { / /通过类名直接访问 Static MethodDemo. test() ; } public static void test() { System. out.println("test...") ; } }
(3)静态代码块
static代码块也叫静态代码块,可以有多个,并且位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,static代码块会优先与构造器执行,如果static代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行,每个代码块只会被执行一次。
示例:观察静态代码块的执行的顺序
public class Stati cBlockDemo { static{ System. out.print1n ("静态代码块") ; } public Stati cBlockDemo() { System. out.print1n ("构造方法"); } public static void main(String[] args) { StaticBlockDemo d = new Stati cBlockDemo () ; StaticBlockDemo d2 = new StaticBlockDemo (); } }
输出结果:静态代码块
构造方法
构造方法
静态代码块优先于构造方法执行,并且静态代码块在类加载时,只执行一次。
2、final关键字
final关键字是最终的意思,使用final 修饰类,代表该类是不能被继承的。final 修饰方法表示该方法不能被重写。final 修饰变量,代表该变量是常量。
(1)final属性
public class FinalVarDemo { private static final int x=5; //该属性不能修改 public static void main(String[] args) { x=10; //报错! } }
使用final 修饰的属性不能修改,一旦修改,编译的时候就会报错!通常使用final修饰的属性,表示已经确定的值,不能被修改,如PI=3.14159等。
(2)final方法
使用final 修饰方法时,该方法不能被重写。注意,这里所说的不能被重写,并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定 义该方法的。
示例:
class A{ public final void t() { System. out.println("A t()") ; } } class B extends A{ //编译错误!父类方法为final类型,子类不能重写 public void t () { System. out.println("Bt()") ; } }
该例子在编译时就会报错,因为final 方法是不允许被重写的。
(3)final类:使用final修饰的类,表示该类不能被继承
示例:
final class A{ public final void t() { System. out.println("At()") ; } } class B extends A{ / /编译错误!子类不能继承 }
二、遇到的问题
没有遇到很复杂的问题
三、明日计划
明天继续学习第五章的内容