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{
    / /编译错误!子类不能继承
}

二、遇到的问题

     没有遇到很复杂的问题

三、明日计划

     明天继续学习第五章的内容

原文地址:https://www.cnblogs.com/wmdww/p/13362822.html