JavaSE 第二十四讲 static 与 final 使用陷阱 10.11

26.final 类型成员变量赋初值方式
a).在声明final类型的成员变量时赋初值
b).在声明final类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋初值。

public class FinalTest4
{
    final int a;//无法编译。未赋初值。    
}
public class FinalTest4
{
    final int a;//可编译。虽然声明final类型的成员变量时未赋值,但在类的构造方法中赋值。注意:需要在类的所有构造方法中为其赋初值。
    
    public FinalTest4()
    {
        a = 0;
    }
       
     public FinalTest4(int a)
    {
        this.a = a;
    }
}

27.static代码块:静态代码块,也是完成一些初始化工作。
首先执行静态代码块,再执行构造方法:静态代码块在类被加载时执行,而构造方法是在生成对象时执行。要想调用某个类来生成对象,首先需要将类加载到Java虚拟机上(JVM),然后由JVM加载这个类来生成对象。

28.类的静态代码块只会执行一次:在类被加载时执行,而每个类只会被加载一次。
而构造方法则不然:在每生成一个对象时都调用类的构造方法,所有new一次就会调用一次构造方法。

public class StaticTest4
{
    public static void main(String[] args)
    {
        new S();//首先执行静态代码块,再执行构造方法。
        new S();//类的静态代码块只会执行一次,而构造方法在每生成一个对象时都调用类的构造方法。
    }
}

class P
{
    public P()
    {
        System.out.println("P constructor");
    }

    static
    {
        System.out.println("P static block");
    }
    
}

class Q extends P
{
    public Q()
    {
        System.out.println("Q constructor");
    }

    static
    {
        System.out.println("Q static block");
    }
}

class S extends Q
{
    public S()
    {
        System.out.println("S constructor");
    }

    static
    {
        System.out.println("S static block");
    }
}

29.不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量;可以在非静态方法中访问静态的成员变量。
总结:静态的可访问静态的,非静态的可访问一切。
不能在静态方法中访问this关键字。

public class StaticTest5
{
    public static void main(String[] args)
    {
        W.change();
    }
}

class W
{
    int a = 10;
    public static void change()
    {
        a++;
    }
}
public class StaticTest5
{
    public static void main(String[] args)
    {
        W w = new W();

        W.change();
    }
}

class W
{
    static int a = 10;

    public static void change()
    {
        this.a++;//不能在静态方法中使用this关键字。
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 465评论 0 0
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 1,556评论 1 9
  • Java关键字final 在设计程序时,出于效率或者设计的原因,有时候希望某些数据是不可改变的。这时候可以使用fi...
    狮_子歌歌阅读 784评论 1 4
  • 我把活着喜欢过了 先睡觉吧,小鸟们 我把活着喜欢过了 因为远处有呼唤我的东西 我把悲伤喜欢过了 可以睡觉了哟 孩子...
    蘸月煮酒阅读 625评论 0 0