新手笔记:针对static关键字的学习

static主要可以修饰:

  • 变量
  • 方法
  • 代码块
  • 内部类
  • 导入包
static 修饰变量
在class中使用static关键字修饰的变量是class的属性,在class加载时 作用于成员变量用来表示只保存一份副本。
public class Test
{
  public static void main(String[] args) {
    MyClass myClass1 = new MyClass( );
    MyClass myClass2 = new MyClass( );
    System.out.println( myClass1.i );
    System.out.println( myClass2.i );
  }
}
class MyClass
{
  public static double i = Math.random( );
}
经过以上程序编译结果显示为:
0.08445234158424719
0.08445234158424719
即在使用static修饰符修饰类中的变量时,该变量可视为“全局变量”,未经修改前不会改变内容。
static 修饰方法
static修饰的方法不需要经过创建类的对象即可直接使用,但是需要注意以下几点:
1.静态方法中不能使用本类的非静态成员变量
public class Test
{
  private static String aString = "test";
  private String bString = "test";

  public static void fun ( )
  {
    System.out.println( aString );//成功
    System.out.println( bString );//编译不通过
  }
}
2.在静态方法中不可以使用this或者super等关键字,因为static修饰的方法是在使用前不会创建本类的对象,因此this或者super是空的。
static 修饰代码块
static修饰的代码块会在创建类的时候执行,并且只会执行一次,具体的执行顺序为:静态代码块(只执行一次)-->普通代码块(按照顺序执行)-->构造方法。
package StaticTest;
public class daimakuai
{
  {
    System.out.println( "我是第一个代码块" );
  }

  daimakuai ( )
  {
    System.out.println( "我是构造方法无参" );
  }

  daimakuai ( int number )
  {
    System.out.println( "我是构造方法有参" );
  }
  {
    System.out.println( "我是第二个代码块" );
  }
  static
  {
    System.out.println( "我是静态代码块" );
  }

  public static void main ( String[ ] args )
  {
    new daimakuai( );
    System.out.println( "******************我是华丽丽的分割线1*********************" );
    new daimakuai( );
    System.out.println( "******************我是华丽丽的分割线2*********************" );
    new daimakuai( 999999 );
  }
}
显示的结果为:
我是静态代码块
我是第一个代码块
我是第二个代码块
我是构造方法无参
******************我是华丽丽的分割线1*********************
我是第一个代码块
我是第二个代码块
我是构造方法无参
******************我是华丽丽的分割线2*********************
我是第一个代码块
我是第二个代码块
我是构造方法有参
注:jvm在使用classloader加载类的时候,会先查看该类是否存在父类,如果存在父类,并且父类中存在静态代码块,就先执行父类的静态代 码块,再执行子类的静态代码块,然后执行父类的普通代码块和子类的普通代码块。
package StaticTest;


/**
 * 父类
 * 
 * @author lenovo
 * 
 */
public class daimakuaiFather
{
  {
    System.out.println( "我是父类的普通代码块" );
  }


  daimakuaiFather ( )
  {
    System.out.println( "我是父类的构造方法无参" );
  }


  static
  {
    System.out.println( "我是父类的静态代码块" );
  }
}

package StaticTest;

/**
 * 子类
 * 
 * @author lenovo
 * 
 */
public class daimakuai extends daimakuaiFather
{
  {
    System.out.println( "我是子类的普通代码块" );
  }

  daimakuai ( )
  {
    System.out.println( "我是子类的构造方法无参" );
  }
  static
  {
    System.out.println( "我是子类的静态代码块" );
  }
}

package StaticTest;
<pre name="code" class="plain"><span style="font-family: Verdana, Arial, Helvetica, sans-serif;">public class staticTest</span>
{ /** * @param args */ public static void main(String[] args) { new daimakuai( ); }}
 
 结果为: 
 
我是父类的静态代码块
我是子类的静态代码块
我是父类的普通代码块
我是父类的构造方法无参
我是子类的普通代码块
我是子类的构造方法无参
static 修饰内部类
static修饰的内部类在使用时可以直接通过形如:VariantTest.Inner.Out( );的形式调用内部类Inner中的Out方法,无需实例化该内部类对象。在创建内部类并且经过编译后会出现形如:VariantTest$Inner.class的编译文件,其中 VariantTest是外部类,Inner是内部类。
static 修饰导入包
我们经常会在java项目中导入jar包帮助我们进行程序的编辑,而在import后面加上static就可以直接使用jar包中的静态方法而不用写出类名了。
package StaticTest;

import static java.lang.System.out;
public class staticTest
{

  /**
   * @param args
   */
  public static void main(String[] args) {

    out.println( "我是静态导入" );
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值