static详解

static详解

1、静态变量

public class Test {
    private int age=19;
    private static String name="cqw";
/*
private是私有的意思,不加也没影响,加了是只在这个类里面和在继承关系
里可用(继承即extants,在我博客前面有发过关于继承的详细解释)
*/
    public static void main(String[] args) {
        
        System.out.println(Test.name);
        Test test = new Test();
        System.out.println(test.age);
        
        System.out.println(new Test().age);
/*
  当我们在主函数里要调用Test的静态变量name时,并不需要使用new,
  直接Test.name.sout就可以输出,这叫类名访问,但是当我们要选择
  动态变量时我们必须使用new,这是其中一个区别  推荐使用类名访问
  
  (注意我们对单一一个变量并不一定要写得那么复杂,使用快捷写法
     new Test().age    就可以调用类变量了)
*/
    }

}

下面的对方法的调用也是一样的意思

public class Test {
       public static void main(String[] args) {
      go();           
      new Test().run();/*同时跑了run、come和go方法*/   
     }
    
    
    public static void go(){
        System.out.println("go");
    }
     public void come(){
        System.out.println("run");
    }
    
    public void run(){
        System.out.println("run");
        come();
        go();
    }
    
}
/*
非静态方法可以调用->非静态方法和静态方法
静态方法可以调用->静态方法
如果静态调用非静态则要new
注意主函数本身也是静态方法,所以可以调用go方法
这是类加载机制的问题,在以后会发的博客注解和反射里会详细讲解
*/

2、静态代码块

public class Test1 {
    {
     System.out.println("匿名代码块");    
    }
     /* 
     只有一个括号没有前缀叫匿名代码块,创建类的时候就自动创建了
     而且在构造器之前
     */  
    static {
      System.out.println("静态代码块");
    }
     /*
     静态代码块,类一加载就执行并且永久只执行一次
     */
    
    /*让我们来看看运行先后顺序*/
     public Test1() {
        System.out.println("构造方法");
    }
     public static void main(String[] args) {
       Test1 test1 = new Test1();
       System.out.println("++++++++++++++++++++++");  
       Test1 test2 = new Test1();
    }
}
/*
输出结果:
静态代码块
匿名代码块
构造方法
++++++++++++++++++++++
匿名代码块
构造方法

可以看到,静态只执行了一次
*/

静态代码块主要运用于赋初始值

3、静态倒入包

这被用的比较少

首先看一个Math类里的参数PI

在这里插入图片描述

/*如果导入静态包的写法   (import是用于导入包的)*/
import static java.lang.Math.PI;

public class Test1 {
 public static void main(String[] args) {
       System.out.println(PI);   
 }
 }

/*如果不导入包的写法*/
public class Test1 {
public static void main(String[] args) {
       System.out.println(Math.PI);   
 }
 }

所以区别就是。。。em。。。哈哈,就是在本类里面需要大量引用时少写了一个

如Math. 这样的前缀

所以很少被用。。

另外提一个无关本题目的点:通过final修饰的类不能被继承(突然看到上面PI那有个final,提一下)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值