zoukankan      html  css  js  c++  java
  • 基础知识

    1、类中的静态语句块只能访问到在块之前定义的变量,定义在块之后的变量,可以在块中进行赋值,但是不能访问。如下示例:

     1 package com.cfang.loadClassTest;
     2 
     3 public class TestClsStatic {
     4 
     5     //public static int i = 123;  //
     6     
     7     static{
     8         i = 456;
     9         System.out.println(i); //Cannot reference a field before it is defined
    10     }
    11     
    12     public static int i = 123; //
    13 }

      上述第9行报错“非法向前引用”,可以注释掉所在行,放开行。

    2、调用静态字段,只有直接定义这个字段的类才会被初始化,所以通过子类调用父类的静态字段,只会触发父类的初始化而不初始化子类。如下程序示例:

     1 package com.cfang.loadClassTest;
     2 
     3 public class TestLoadClass {
     4 
     5     public static void main(String[] args) {
     6         //通过子类去调用父类的静态字段,只会触发父类初始化,而子类本身并不初始化
     7         System.out.println(SubClass.value);
     8         
     9         //对自身常量池的引用,不会触发初始化操作
    10 //        System.out.println(SubClass.value1);
    11         
    12         //不会触发初始化操作
    13 //        SuperClass[] arr = new SuperClass[10];
    14 //        System.out.println(arr.toString());
    15         
    16 //        SuperClass cls = new SuperClass();
    17         
    18 //        SuperClass cls = new SubClass();
    19 //        System.out.println(cls.value3);
    20     }
    21 }
    22 
    23 class SuperClass{
    24     static{
    25         System.out.println("init superClass");
    26     }
    27     public static int value = 123;
    28     public static final int value1 = 456;
    29     public int value3 = 111;
    30 }
    31 
    32 class SubClass extends SuperClass{
    33     static{
    34         System.out.println("init subClass");
    35     }
    36 }

      输出结果为:

    init superClass
    123

    3、类成员变量会初始化值,而局部变量必须进行初始化。如下:

     1 package com.cfang.loadClassTest;
     2 
     3 public class TestInit {
     4 
     5     private static String str;
     6     
     7     public static void main(String[] args) {
     8         String str2;
     9         System.out.println(str); //输出:null
    10         System.out.println(str2); //编译不通过,报错信息:The local variable str2 may not have been initialized
    11     }
    12 }

    。。。

  • 相关阅读:
    【2021-03-31】人生十三信条
    【2021-03-30】证明自己是人类忠实的朋友
    【2021-03-29】万物本是无序
    缀点成线
    1比特与2比特字符
    Solution -「LOCAL」「cov. 牛客多校 2020 第三场 I」礼物
    Solution -「HNOI 2007」「洛谷 P3185」分裂游戏
    Solution -「CF 1372E」Omkar and Last Floor
    Solution -「POJ 3710」Christmas Game
    Solution -「CF 1380F」Strange Addition
  • 原文地址:https://www.cnblogs.com/eric-fang/p/10385085.html
Copyright © 2011-2022 走看看