zoukankan      html  css  js  c++  java
  • 6.17Tips

    首先说一下super吧,像MyThread3 一样,super(s)也就是调用了Thread 类的一个构造函数.

    class MyThread3 extends Thread {
      MyThread3(String s){super(s);}
      public void run(){
        for(int i =1;i<=10;i++){
          System.out.println(getName()+": "+i);
          if(i%3==0){
            join();
          }
        }
      }
    }

    final在类中只能定义一次,必须赋值且只能赋值一次,static可多次,如下类所示

    public static void main(String[] args) {
    //   String temp = TQExample.s_a;
       TQExample test = new TQExample();
      }

     }

     class TQExample {
      public static String s_a = "静态变量:直接赋值";

      public String n_b = "非静态变量:直接赋值";
     
      public final int nf_i;
      public final String nf_s = "我是final对象,直接赋值";
      static {
       System.out.println(s_a);

       s_a = "静态变量:静态块赋值";
      }
      static//静态块可以有多个。
      {
       System.out.println("s_a");

      }

      public TQExample() {
       System.out.println(s_a);
       System.out.println(n_b);
       

       s_a = "静态变量:构造器赋值";

       n_b = "非静态变量:构造器赋值";

       nf_i = 1;//注释这行然后在外面打印它看看看看,会对java的自动赋值有一个更具体的感性认识.
    //   nf_s = "我是final对象,构造器赋值";//这行是错误的,建议你试试.
      
       System.out.println(s_a);
       System.out.println(n_b);
       System.out.println(nf_s);
      }

     }

    显示结果为:

    静态变量:直接赋值
    s_a
    静态变量:静态块赋值
    非静态变量:直接赋值
    静态变量:构造器赋值
    非静态变量:构造器赋值
    我是final对象,直接赋值

    static{}块中的语句是属于类的本身,不属于类中的任何方法。所以在类定义的时候就被执行开始执行。
    非静态块中的变量在{ }外是不可见的!

    String temp = TQExample.s_a;调用了TQExample这个类,在调用过程中执行了静态块,但没有对类进行初始化,故temp最后的值为“静态变量:静态块赋值”。

  • 相关阅读:
    week4:周测错题
    小程序1:登录/注册小程序
    小程序2:实现一个购物车
    day26:装饰器&面向对象当中的方法&property
    day25:7个魔术方法&5个关于类的魔术属性
    day24:多态&魔术方法__new__&单态模式
    day23:单继承&多继承&菱形继承&__init__魔术方法
    day22:面向对象封装对象操作&类操作&面向对象删除操作
    day21:正则函数&模块和包(import)
    APP探索之iAPP
  • 原文地址:https://www.cnblogs.com/emily_fly/p/1505352.html
Copyright © 2011-2022 走看看